xzw 11 kuukautta sitten
vanhempi
commit
cf8d7e8213
1 muutettua tiedostoa jossa 127 lisäystä ja 105 poistoa
  1. 127 105
      src/sdk/cover/index.js

+ 127 - 105
src/sdk/cover/index.js

@@ -46,60 +46,15 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
     
     let { THREE } = Potree.mergeEditStart(dom, mapDom)
     let MergeEditor = viewer.modules.MergeEditor
-    Potree.settings.unableNavigate = false
+    Potree.settings.unableNavigate = true
+    
+    /* Potree.settings.showCesium = !!lonlat
+    Potree.settings.showCesium && buildMap()
+     */
+    
+    
+    
     
-    Potree.settings.showCesium = !!lonlat
-    if (Potree.settings.showCesium) {
-
-        viewer.backgroundOpacity = 0
-
-        Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2ZGM2YzY0ZC1kNWE0LTRiYTgtYTkwNS1kYmJiODRjMWUwMmQiLCJpZCI6MjMzMTQ1LCJpYXQiOjE3MjI5OTUwNTB9.niqpkl6xOkQ2KeJjelyDDDydmSGqKXKb5cX2NyxSNAw'
-        window.cesiumViewer = new Cesium.Viewer('app', {
-            useDefaultRenderLoop: true,
-            requestRenderMode: true, //add 只有需要render时才会render,如tile加载完后、镜头移动后
-            animation: false,
-            baseLayerPicker: false,
-            fullscreenButton: false,
-            geocoder: false,
-            homeButton: false,
-            infoBox: false,
-            sceneModePicker: false,
-            selectionIndicator: false,
-            timeline: false,
-            navigationHelpButton: false,
-            //imageryProvider : Cesium.createOpenStreetMapImageryProvider({url : 'https://a.tile.openstreetmap.org/'}),
-            imageryProvider: Cesium.UrlTemplateImageryProvider({ //直接用84坐标,不用转高德
-
-                //"https://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&style=7&yrs=m&x=${x}&y=${y}&z=${z}"    //  
-
-
-                //url : 'https://webst0{0-7}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}&token=YOUR_API_KEY',
-                url: 'https://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}&token=YOUR_API_KEY',
-                minimumLevel: 0,
-                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地形
-        });
-
-        
-        //lonlat = [113.595236803415,22.3665168584444]//[113.600356,22.364093]
-        Potree.setLonlat(lonlat[0], lonlat[1])
-        
-        Potree.cesScreenshot = (w,h)=>{
-            cesiumViewer.scene.canvas.style.width = w+'px'
-            cesiumViewer.scene.canvas.style.height = h+'px'
-            cesiumViewer.resize()
-            cesiumViewer.render();
-            let dataUrl = window.cesiumViewer.scene.canvas.toDataURL('image/png')
-            //Potree.Common.downloadFile(dataUrl,  'screenshot.png')   
-            cesiumViewer.scene.canvas.style.width = ''
-            cesiumViewer.scene.canvas.style.height = ''
-            return dataUrl
-        }
-    }
     
 
     viewer.addEventListener('camera_changed', e => {
@@ -108,55 +63,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
         if (e.viewport.name == 'MainView') {
             sceneBus.emit('cameraChange', { x: pos.x, y: pos.y, z: pos.z, rotate: camera.rotation })
 
-            if (Potree.settings.showCesium && Potree.settings.displayMode == 'showPointCloud') {
-
-                let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
-                let pRight = new THREE.Vector3(600, 0, 0).applyMatrix4(camera.matrixWorld);
-                let pUp = new THREE.Vector3(0, 600, 0).applyMatrix4(camera.matrixWorld);
-                let pTarget = viewer.scene.view.getPivot();
-
-                let toCes = (pos) => {
-                    let xy = [pos.x, pos.y];
-                    let height = pos.z;
-                    let deg = viewer.transform.lonlatToLocal.inverse(xy)  //  toMap.forward(xy);
-                    let cPos = Cesium.Cartesian3.fromDegrees(...deg, height);
-
-                    return cPos;
-                };
-
-                let cPos = toCes(pPos);
-                let cUpTarget = toCes(pUp);
-                let cTarget = toCes(pTarget);
-
-                let cDir = Cesium.Cartesian3.subtract(cTarget, cPos, new Cesium.Cartesian3());
-                let cUp = Cesium.Cartesian3.subtract(cUpTarget, cPos, new Cesium.Cartesian3());
-
-                cDir = Cesium.Cartesian3.normalize(cDir, new Cesium.Cartesian3());
-                cUp = Cesium.Cartesian3.normalize(cUp, new Cesium.Cartesian3());
-
-                cesiumViewer.camera.setView({
-                    destination: cPos,
-                    orientation: {
-                        direction: cDir,
-                        up: cUp
-                    }
-                });
-
-
-
-                let aspect = viewer.scene.getActiveCamera().aspect;
-                if (aspect < 1) {
-                    let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
-                    cesiumViewer.camera.frustum.fov = fovy;
-                } else {
-                    let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
-                    let fovx = Math.atan(Math.tan(0.5 * fovy) * aspect) * 2
-                    cesiumViewer.camera.frustum.fov = fovx;
-                }
-
-
-                cesiumViewer.render(); //立即render,否则会和点云render不同步而错位
-            }
+            updateMap()
         }
     })
     
@@ -189,8 +96,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
         })
     }
     
-    
-    
+     
     viewer.images360.addEventListener('endChangeMode',(e)=>{
         sceneBus.emit('modeChange', {mode: e.mode == 'showPanos' ? 'pano' : 'fuse',  model : e.mode == 'showPanos' && viewer.images360.currentPano.pointcloud.result_} )
          
@@ -638,9 +544,15 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                 MergeEditor.ground.material.uniforms.uColor.value.set(color)
                 //MergeEditor.ground.children[0].material.color.set(color)
             }
+            viewer.dispatchEvent('content_changed')
+            
+             
             if(type == 'map'){
                 MergeEditor.setGroundPlaneImg(null)
                 Potree.settings.showCesium = true
+                buildMap()
+                viewer.backgroundOpacity = 0
+                return
             }else{
                 Potree.settings.showCesium = false
             }
@@ -670,7 +582,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
             }
 
 
-            viewer.dispatchEvent('content_changed')
+            
         },
         switchMapType(type) {
             let map = viewer.mapViewer.mapLayer.maps.find(e => e.name == 'map')
@@ -1395,7 +1307,116 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
     }
 
+    function buildMap(){
+        if (Potree.settings.showCesium && !window.cesiumViewer) {
+
+            viewer.backgroundOpacity = 0
+
+            Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2ZGM2YzY0ZC1kNWE0LTRiYTgtYTkwNS1kYmJiODRjMWUwMmQiLCJpZCI6MjMzMTQ1LCJpYXQiOjE3MjI5OTUwNTB9.niqpkl6xOkQ2KeJjelyDDDydmSGqKXKb5cX2NyxSNAw'
+            window.cesiumViewer = new Cesium.Viewer('app', {
+                useDefaultRenderLoop: true,
+                requestRenderMode: true, //add 只有需要render时才会render,如tile加载完后、镜头移动后
+                animation: false,
+                baseLayerPicker: false,
+                fullscreenButton: false,
+                geocoder: false,
+                homeButton: false,
+                infoBox: false,
+                sceneModePicker: false,
+                selectionIndicator: false,
+                timeline: false,
+                navigationHelpButton: false,
+                //imageryProvider : Cesium.createOpenStreetMapImageryProvider({url : 'https://a.tile.openstreetmap.org/'}),
+                imageryProvider: Cesium.UrlTemplateImageryProvider({ //直接用84坐标,不用转高德
+
+                    //"https://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&style=7&yrs=m&x=${x}&y=${y}&z=${z}"    //  
+
+
+                    //url : 'https://webst0{0-7}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}&token=YOUR_API_KEY',
+                    url: 'https://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}&token=YOUR_API_KEY',
+                    minimumLevel: 0,
+                    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地形
+            });
+
+            
+            //lonlat = [113.595236803415,22.3665168584444]//[113.600356,22.364093]
+            Potree.setLonlat(lonlat[0], lonlat[1])
+            
+            Potree.cesScreenshot = (w,h)=>{
+                cesiumViewer.scene.canvas.style.width = w+'px'
+                cesiumViewer.scene.canvas.style.height = h+'px'
+                cesiumViewer.resize()
+                cesiumViewer.render();
+                let dataUrl = window.cesiumViewer.scene.canvas.toDataURL('image/png')
+                //Potree.Common.downloadFile(dataUrl,  'screenshot.png')   
+                cesiumViewer.scene.canvas.style.width = ''
+                cesiumViewer.scene.canvas.style.height = ''
+                return dataUrl
+            }
+        }
+        updateMap()
+        
+        
+    }
+
+
+
+    function updateMap(){
+        if (Potree.settings.showCesium && Potree.settings.displayMode == 'showPointCloud') {
+            let camera = viewer.mainViewport.camera
+            let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
+            let pRight = new THREE.Vector3(600, 0, 0).applyMatrix4(camera.matrixWorld);
+            let pUp = new THREE.Vector3(0, 600, 0).applyMatrix4(camera.matrixWorld);
+            let pTarget = viewer.scene.view.getPivot();
+
+            let toCes = (pos) => {
+                let xy = [pos.x, pos.y];
+                let height = pos.z;
+                let deg = viewer.transform.lonlatToLocal.inverse(xy)  //  toMap.forward(xy);
+                let cPos = Cesium.Cartesian3.fromDegrees(...deg, height);
 
+                return cPos;
+            };
+
+            let cPos = toCes(pPos);
+            let cUpTarget = toCes(pUp);
+            let cTarget = toCes(pTarget);
+
+            let cDir = Cesium.Cartesian3.subtract(cTarget, cPos, new Cesium.Cartesian3());
+            let cUp = Cesium.Cartesian3.subtract(cUpTarget, cPos, new Cesium.Cartesian3());
+
+            cDir = Cesium.Cartesian3.normalize(cDir, new Cesium.Cartesian3());
+            cUp = Cesium.Cartesian3.normalize(cUp, new Cesium.Cartesian3());
+
+            cesiumViewer.camera.setView({
+                destination: cPos,
+                orientation: {
+                    direction: cDir,
+                    up: cUp
+                }
+            });
+
+
+
+            let aspect = viewer.scene.getActiveCamera().aspect;
+            if (aspect < 1) {
+                let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
+                cesiumViewer.camera.frustum.fov = fovy;
+            } else {
+                let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
+                let fovx = Math.atan(Math.tan(0.5 * fovy) * aspect) * 2
+                cesiumViewer.camera.frustum.fov = fovx;
+            }
+
+
+            cesiumViewer.render(); //立即render,否则会和点云render不同步而错位
+        }
+    }
 
     return sdk
 }
@@ -1403,6 +1424,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
 
 
+
  
  
 /*