|
@@ -44,6 +44,7 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
viewer.backgroundOpacity = 0
|
|
|
|
|
|
+ Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2ZGM2YzY0ZC1kNWE0LTRiYTgtYTkwNS1kYmJiODRjMWUwMmQiLCJpZCI6MjMzMTQ1LCJpYXQiOjE3MjI5OTUwNTB9.niqpkl6xOkQ2KeJjelyDDDydmSGqKXKb5cX2NyxSNAw'
|
|
|
window.cesiumViewer = new Cesium.Viewer('app', {
|
|
|
useDefaultRenderLoop: true,
|
|
|
requestRenderMode:true, //add 只有需要render时才会render,如tile加载完后、镜头移动后
|
|
@@ -64,11 +65,10 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
maximumLevel : 19
|
|
|
}),
|
|
|
//高德秘钥版 imageryProvider: new Cesium.AmapImageryProvider({key, mapStyle: 'normal'})
|
|
|
-
|
|
|
+ //报错 401 (Unauthorized) 的方法 https://blog.csdn.net/LBY_XK/article/details/121992641
|
|
|
|
|
|
terrainShadows: Cesium.ShadowMode.DISABLED, //terrain地形
|
|
|
});
|
|
|
-
|
|
|
|
|
|
proj4.defs("LOCAL", "+proj=tmerc +ellps=WGS84 +lon_0=" + lonlat[0].toPrecision(15) + " +lat_0=" + lonlat[1].toPrecision(15)); //高德坐标系
|
|
|
proj4.defs("LOCAL_MAP", "+proj=tmerc +ellps=WGS84 +lon_0=" + lonlat[0].toPrecision(15) + " +lat_0=" + lonlat[1].toPrecision(15)); //地图和本地一样
|
|
@@ -90,7 +90,7 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
var pos = camera.position
|
|
|
if (e.viewport.name == 'MainView') {
|
|
|
sceneBus.emit('cameraChange', { x: pos.x, y: pos.y, z: pos.z, rotate: camera.rotation })
|
|
|
-
|
|
|
+
|
|
|
if(Potree.settings.showCesium){
|
|
|
|
|
|
let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
|
|
@@ -142,6 +142,9 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
}
|
|
|
}
|
|
|
})
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
viewer.addEventListener('webglError', e => {
|
|
|
console.error('viewer webglError: ' + e)
|
|
|
sceneBus.emit('webglError', { msg: e.msg })
|
|
@@ -329,7 +332,14 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ let camera_changed = (e)=>{
|
|
|
+ if (e.viewport.name == 'MainView' && e.changeInfo.positionChanged ) {
|
|
|
+ //viewer.mainViewport.camera.position
|
|
|
+ viewer.mainViewport.view.radius = 0.1 //使pivot在面前一丢丢距离
|
|
|
+ viewer.setControls(viewer.orbitControls)
|
|
|
+ viewer.removeEventListener('camera_changed', camera_changed)
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
|
@@ -473,7 +483,7 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
setBackdrop(sky, type, {scale,rotate}){//天空盒背景
|
|
|
//console.log('天空盒背景', sky,type)
|
|
|
-
|
|
|
+
|
|
|
let setGroundAndText = (color)=>{
|
|
|
MergeEditor.secondCompass.dom.find(".dirText").css({'color':color})
|
|
|
viewer.compass.dom.find(".dirText").css({'color':color})
|
|
@@ -765,10 +775,61 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
}
|
|
|
|
|
|
- let scaleMeasure
|
|
|
+ let scaleMeasure
|
|
|
let result = {
|
|
|
bus,
|
|
|
getDefaultRotation,
|
|
|
+
|
|
|
+ supportPano(){ //是否支持全景图
|
|
|
+ return model.panos && model.panos.length > 0
|
|
|
+ },
|
|
|
+ flyInPano(){// 飞入全景图
|
|
|
+ let pano = viewer.images360.findNearestPano(null,model.panos)
|
|
|
+ if(pano){
|
|
|
+ viewer.removeEventListener('camera_changed', camera_changed)
|
|
|
+ viewer.images360.panos.forEach(pano=>{
|
|
|
+ pano.setEnable(pano.pointcloud == model )
|
|
|
+ })
|
|
|
+ viewer.setControls(viewer.fpControls)
|
|
|
+ viewer.images360.flyToPano({pano, canCancelLast:true})
|
|
|
+
|
|
|
+ let changeVisi = (object)=>{
|
|
|
+ Potree.Utils.updateVisible(object, 'showPanos', object == model)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Potree.settings.displayMode = 'showPanos'
|
|
|
+ MergeEditor.transformControls.detach(model)
|
|
|
+ Potree.Utils.updateVisible(MergeEditor.boxHelper,'showPanos',false)
|
|
|
+
|
|
|
+
|
|
|
+ viewer.images360.addEventListener('endChangeMode',()=>{
|
|
|
+ //Potree.Utils.updateVisible(viewer.objs, 'showPanos', false)
|
|
|
+ viewer.objs.children.forEach(changeVisi)
|
|
|
+ },{once:true})
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+ flyOutPano(){// 飞出全景图(就是切换到正常融合视角)
|
|
|
+ let panoPos = viewer.images360.position.clone()
|
|
|
+ //Potree.Utils.updateVisible(viewer.objs, 'showPanos', true)
|
|
|
+ let changeVisi = (object)=>{
|
|
|
+ Potree.Utils.updateVisible(object, 'showPanos', true)
|
|
|
+ }
|
|
|
+ viewer.objs.children.forEach(changeVisi)
|
|
|
+ viewer.images360.panos.forEach(pano=>{
|
|
|
+ pano.setEnable(true)
|
|
|
+ })
|
|
|
+
|
|
|
+ Potree.settings.displayMode = 'showPointCloud'
|
|
|
+ Potree.Utils.updateVisible(MergeEditor.boxHelper,'showPanos',true)
|
|
|
+
|
|
|
+
|
|
|
+ viewer.addEventListener('camera_changed', camera_changed)
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
changeShow(show){
|
|
|
props.show = show //for autoLoads show model
|
|
|
if(model){
|
|
@@ -776,12 +837,17 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
if(model.panos){
|
|
|
model.panos.forEach(e=>e.setEnable(show))
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
viewer.dispatchEvent('content_changed')
|
|
|
}
|
|
|
},
|
|
|
changeSelect(state){
|
|
|
if(model){
|
|
|
- MergeEditor.selectModel(model, state, true, true)
|
|
|
+ let fly = viewer.images360.latestRequestMode != 'showPanos'
|
|
|
+ MergeEditor.selectModel(model, state, fly, true)
|
|
|
+
|
|
|
+
|
|
|
if(state && viewer.inputHandler.selection[0]){
|
|
|
MergeEditor.transformControls.attach(model) //viewer.transformObject(model); //交换
|
|
|
}
|
|
@@ -967,60 +1033,7 @@ export const enter = ({dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
})
|
|
|
},
|
|
|
|
|
|
- supportPano(){ //是否支持全景图
|
|
|
- return model.panos && model.panos.length > 0
|
|
|
- },
|
|
|
- flyInPano(){// 飞入全景图
|
|
|
- let pano = viewer.images360.findNearestPano(null,model.panos)
|
|
|
- if(pano){
|
|
|
- viewer.images360.panos.forEach(pano=>{
|
|
|
- pano.setEnable(pano.pointcloud == model )
|
|
|
- })
|
|
|
- viewer.setControls(viewer.fpControls)
|
|
|
- viewer.images360.flyToPano(pano)
|
|
|
- /* viewer.images360.addEventListener('endChangeMode',()=>{
|
|
|
- Potree.Utils.updateVisible(viewer.objs, 'showPanos', false)
|
|
|
- },{once:true}) */
|
|
|
- let changeVisi = (object)=>{
|
|
|
- Potree.Utils.updateVisible(object, 'showPanos', object == model)
|
|
|
- }
|
|
|
- viewer.objs.children.forEach(changeVisi)
|
|
|
-
|
|
|
-
|
|
|
- Potree.settings.displayMode = 'showPanos'
|
|
|
- MergeEditor.transformControls.detach(model)
|
|
|
- Potree.Utils.updateVisible(MergeEditor.boxHelper,'showPanos',false)
|
|
|
- viewer.removeEventListener('camera_changed', this.camera_changed)
|
|
|
-
|
|
|
- }
|
|
|
- },
|
|
|
- flyOutPano(){// 飞出全景图(就是切换到正常融合视角)
|
|
|
- let panoPos = viewer.images360.position.clone()
|
|
|
- //Potree.Utils.updateVisible(viewer.objs, 'showPanos', true)
|
|
|
- let changeVisi = (object)=>{
|
|
|
- Potree.Utils.updateVisible(object, 'showPanos', true)
|
|
|
- }
|
|
|
- viewer.objs.children.forEach(changeVisi)
|
|
|
- viewer.images360.panos.forEach(pano=>{
|
|
|
- pano.setEnable(true)
|
|
|
- })
|
|
|
- setTimeout(()=>{//在下一帧再变,因为3dtiles需要更新一下才会显示tiles
|
|
|
- Potree.settings.displayMode = 'showPointCloud'
|
|
|
- Potree.Utils.updateVisible(MergeEditor.boxHelper,'showPanos',true)
|
|
|
- },20)
|
|
|
- this.camera_changed = (e)=>{
|
|
|
- if (e.viewport.name == 'MainView' && e.changeInfo.positionChanged ) {
|
|
|
- //viewer.mainViewport.camera.position
|
|
|
- viewer.mainViewport.view.radius = 0.1 //使pivot在面前一丢丢距离
|
|
|
- viewer.setControls(viewer.orbitControls)
|
|
|
- viewer.removeEventListener('camera_changed', this.camera_changed)
|
|
|
- }
|
|
|
- }
|
|
|
- viewer.addEventListener('camera_changed', this.camera_changed)
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- },
|
|
|
+
|
|
|
destroy(){
|
|
|
model && MergeEditor.removeModel(model)
|
|
|
viewer.dispatchEvent('content_changed')
|