xzw 8 ヶ月 前
コミット
1d45add550
4 ファイル変更10794 行追加10452 行削除
  1. 10690 10388
      public/lib/Cesium/Cesium.js
  2. 9 7
      public/lib/potree/potree.js
  3. 1 1
      public/lib/potree/potree.js.map
  4. 94 56
      src/sdk/cover/index.js

ファイルの差分が大きいため隠しています
+ 10690 - 10388
public/lib/Cesium/Cesium.js


+ 9 - 7
public/lib/potree/potree.js

@@ -40517,7 +40517,7 @@
 	    this.isIntersectSelf == 'all' && this.isNew //有线相交了
 	    || this.isAtWrongPlace && this.isNew || !e.isAtDomElement && this.isNew //如果是刚添加时在其他dom点击, 不要响应
 	    || e.hoverViewport != viewer.mainViewport && this.unableDragAtMap //垂直的测量线不允许在地图上放点
-	    || this.isNew && !this.getDifferentPoint(this.points, this.points.length) //不允许和之前的点相同, 但这句在点云稀疏时会导致难结束 
+	    || (this.isNew || this.forbitRepeatPoint) && !this.getDifferentPoint(this.points, this.points.length) //不允许和之前的点相同, 但这句在点云稀疏时会导致难结束 
 	    )) {
 	      return this.continueDrag(null, e);
 	    }
@@ -43297,7 +43297,7 @@
 	    }, 300); //为了防止不停点击不停更新,所以隐藏一下不变了再更新
 	  }
 	  static updateArrows(force) {
-	    var far = math.linearClamp(Potree.fpsRendered2, [10, 60], [200, 350]); //几乎看不见了
+	    var far = math.linearClamp(Potree.fpsRendered2, [10, 60], [200, 300]); //几乎看不见了
 
 	    var paths = viewer.scene.measurements.filter(e => {
 	      var _e$arrows;
@@ -43328,7 +43328,7 @@
 	        });
 	      }
 	    });
-	    var spaceDis = MathUtils.clamp(math.toPrecision(Math.pow(minDisSq, 0.1) * 5, 1), 5, 10); //箭头之间的间距,适当调节稀疏
+	    var spaceDis = MathUtils.clamp(math.toPrecision(Math.pow(minDisSq, 0.1) * 5, 1), 5, 15); //箭头之间的间距,适当调节稀疏
 	    spaceDis *= math.linearClamp(Potree.fpsRendered2, [10, 60], [3, 1]);
 	    if ((lastArrowCamPos && math.closeTo(lastArrowCamPos, viewer.mainViewport.view.position, 2) || lines.length == 0) && !force) return; //很远的时候lines空的不更新(不清空)
 	    lastArrowCamPos = viewer.mainViewport.view.position.clone();
@@ -69199,7 +69199,7 @@
 	    ray.set(origin, direction);
 	    Potree.Utils.setCameraLayers(ray,
 	    //设置能识别到的layers 
-	    ['sceneObjects', 'mapObjects', 'measure', 'transformationTool', 'model'], viewer.inputHandler.hoverViewport && viewer.inputHandler.hoverViewport.extraEnableLayers);
+	    ['sceneObjects', 'mapObjects', /* 'measure',   */'transformationTool', 'model'], viewer.inputHandler.hoverViewport && viewer.inputHandler.hoverViewport.extraEnableLayers);
 	    var planeIntersect = ray.intersectObjects([_plane], true)[0] || false;
 	    if (planeIntersect === false) return;
 	    pointEnd.copy(planeIntersect.point).sub(worldPositionStart);
@@ -78523,7 +78523,7 @@
 	          var dis2 = boundFloor.distanceToPoint(viewer.mainViewport.view.position);
 	          minRadius = Math.max(2, dis1 * 0.5);
 	          maxRadius = Math.max(4, dis2 * 1.5);
-	          console.log('changeRadius common', minRadius, maxRadius);
+	          //console.log('changeRadius common', minRadius, maxRadius)
 	        }
 	      }
 	    });
@@ -78637,7 +78637,7 @@
 	    var distance = MathUtils.clamp(dis, 0.8 * object.scale.x, Math.max(len * 0.1, 3 * object.scale.x));
 	    minRadius = distance;
 	    maxRadius = dis * 2;
-	    console.log('updateRadiusByModel', minRadius, maxRadius);
+	    //console.log('updateRadiusByModel',minRadius, maxRadius)
 	    return distance;
 	  }
 	  stopTweens() {
@@ -83846,7 +83846,9 @@
 
 	    var s = SiteModel.editing && SiteModel.selected && (SiteModel.selected.buildType == 'room' || SiteModel.selected.buildType == 'floor'); //空间模型的房间选中材质是需要depth的,这时候需要绘制两次点云
 
-	    Potree.settings.pointEnableRT = !this.screenshoting && (this.scene.measurements.filter(e => e.visible).length > 0 || s || (PanoEditor === null || PanoEditor === void 0 ? void 0 : PanoEditor.entered) || this.tags.children.some(e => e.visible));
+	    Potree.settings.pointEnableRT = /* !this.screenshoting && */this.scene.measurements.filter(e => e.visible).length > 0 || s || (PanoEditor === null || PanoEditor === void 0 ? void 0 : PanoEditor.entered) || this.tags.children.some(e => e.visible);
+	    //2024.12为什么截图时不遮挡?
+
 	    if (vrActive) {
 	      this.renderVR();
 	    } else {

ファイルの差分が大きいため隠しています
+ 1 - 1
public/lib/potree/potree.js.map


+ 94 - 56
src/sdk/cover/index.js

@@ -115,18 +115,16 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
     viewer.addEventListener('camera_changed', e => {
         var camera = e.viewport.camera
         var pos = camera.position
-        if (e.viewport.name == 'MainView') {
+        if (e.viewport.name == 'MainView' ) {
             sceneBus.emit('cameraChange', { x: pos.x, y: pos.y, z: pos.z, rotate: camera.rotation })
+  
+        }
 
-            updateMap()
-            
-            Potree.Common.intervalTool.isWaiting('updateCamNear', ()=>{ 
-                updateCamNear()  
-            }, 1000)
-            updateCamFar()
-            //viewer.scene.tags.children.forEach(tag=>tag.functions.updateVisiFar()) 
-             
-        } 
+        updateMap() 
+        Potree.Common.intervalTool.isWaiting('updateCamNear', ()=>{ 
+            updateCamNear()  
+        }, 1000)
+        updateCamFar()        
     })
     
      
@@ -537,7 +535,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             
             console.log('bgOpacity', bgOpacity)
             
-            Potree.Utils.updateVisible(MergeEditor.boxHelper, 'screenshot', false)
+            Potree.Utils.updateVisible(MergeEditor.boxHelper, 'screenshot', false) 
+            Potree.Utils.updateVisible(viewer.scene.overlayScene, 'screenshot', false) //hide all 
+            
+            
             var { getImagePromise, finishPromise } = viewer.startScreenshot({ type: 'default', /* useRenderTarget:true,  */bgOpacity }, width, height)
             var deferred = $.Deferred();
             finishPromise.done(({ dataUrl }) => {
@@ -559,7 +560,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                 }
                 
                 
-                Potree.Utils.updateVisible(MergeEditor.boxHelper, 'screenshot', true)
+                Potree.Utils.updateVisible(MergeEditor.boxHelper, 'screenshot', true) 
+                Potree.Utils.updateVisible(viewer.scene.overlayScene, 'screenshot', true) 
             })
 
             return deferred.promise()
@@ -1054,13 +1056,11 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
 
                     result.leaveTransform()
                     MergeEditor.enterSplit()
-
-
-                    //console.log('enterAlignment',model.position, model.rotation)
-                    let bus = new mitt()
-
-                    /* MergeEditor.transformControls.attach(model)
-                    MergeEditor.transformControls.mode = 'translate' */
+                    if(Potree.settings.showCesium){
+                        cesiumViewer.scene.canvas.style.width = '50%'
+                        //cesiumViewer.resize() 
+                    } 
+                    let bus = new mitt() 
 
                     return {
                         bus
@@ -1071,7 +1071,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     MergeEditor.leaveSplit()
                     MergeEditor.transformControls.detach()
                     MergeEditor.transformControls2.detach()
-
+                    if(Potree.settings.showCesium){
+                        cesiumViewer.scene.canvas.style.width = ''  
+                        updateMap()
+                    }
                 },
 
                 enterScaleSet() {//设置比例
@@ -1099,8 +1102,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
 
                         let vec = new THREE.Vector3().subVectors(viewer.mainViewport.camera.position, scaleMeasure.points[1])
 
-
-                        let s = length / (scaleMeasure.points[0].distanceTo(scaleMeasure.points[1]))
+                        let dis = scaleMeasure.points[0].distanceTo(scaleMeasure.points[1])
+                        let s = length / Math.max(dis,0.00001)
                         result.changeScale(model.scale.x * s * 100)
                         /* setTimeout(()=>{
                             viewer.focusOnObject(scaleMeasure , 'measure', 500)  
@@ -1110,8 +1113,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                         viewer.scene.view.setView({
                             position: newCamPos, target: scaleMeasure.getCenter(), duration: 0, callback: () => {
                                 //更改target到measure中心的好处就是可以让相机绕measure中心转,坏处是每次更改都会变一下画面
-                                Potree.settings.cameraFar = Math.max(model.enterScaleOldState_.far, viewer.scene.view.position.distanceTo(model.boundCenter) + model.boundingBox.clone().applyMatrix4(model.matrixWorld).getSize(new THREE.Vector3).length())
-
+                                //Potree.settings.cameraFar = Math.max(model.enterScaleOldState_.far, viewer.scene.view.position.distanceTo(model.boundCenter) + model.boundingBox.clone().applyMatrix4(model.matrixWorld).getSize(new THREE.Vector3).length())
+                                //use updateCamFar()
                             }
                         }) 
                            
@@ -1143,6 +1146,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                                     //bus.emit('quit') //删除
                                 }
                             )
+                            scaleMeasure.forbitRepeatPoint = true //两个点不能相同,否则长度是0
                             scaleMeasure.addEventListener('marker_dropped', (e) => {//拖拽结束后发送changeCallBack
                                 if (scaleMeasure.parent) {
                                     //未被删除
@@ -1170,7 +1174,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     setTimeout(()=>{//可能还原了 相机位置移动回去
                         if(model.scale.x == model.enterScaleOldState_.scale){
                             MergeEditor.focusOn(model, 0)  //reset orbitcontrol's minRadius         //viewer.mainViewport.view.copy(model.enterScaleOldState_.view)
-                            Potree.settings.cameraFar = model.enterScaleOldState_.far  
+                            //Potree.settings.cameraFar = model.enterScaleOldState_.far  
                         }
                     },10)
                     
@@ -1993,7 +1997,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
 
 
     function updateCamFar(){ 
-        Potree.settings.cameraFar = THREE.Math.clamp(viewer.mainViewport.camera.position.z * 2, 10000, 100000000000)
+        Potree.settings.cameraFar = THREE.Math.clamp(viewer.bound.boundingBox.distanceToPoint(viewer.mainViewport.camera.position)+viewer.bound.boundSize.length(), 10000, 100000000000)
          
     }
 
@@ -2001,12 +2005,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
     function updateMap(){
          
         if (Potree.settings.showCesium && Potree.settings.displayMode == 'showPointCloud') {
-            let camera = viewer.mainViewport.camera
+            let camera = MergeEditor.split ? viewer.viewports.find(e=>e.name == 'top').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 orientation
             let toCes = (pos) => {
                 let xy = [pos.x, pos.y];
                 let height = pos.z;
@@ -2017,41 +2019,77 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             };
 
             let cPos = toCes(pPos);
-            let cUpTarget = toCes(pUp);
-            let cTarget = toCes(pTarget);
+            
+            
+            
+            if(MergeEditor.split){
+                orientation = {
+                    heading: Cesium.Math.toRadians(0.0),  // 方向角
+                    pitch: Cesium.Math.toRadians(-90.0),  // 俯仰角
+                    roll: 0.0  // 翻滚角
+                }
+                
+                if(!cesiumViewer.camera.perpFrustum_){
+                    cesiumViewer.camera.perpFrustum_ = cesiumViewer.camera.frustum 
+                    cesiumViewer.camera.frustum = new Cesium.OrthographicOffCenterFrustum({//OrthographicFrustum OrthographicOffCenterFrustum
+                        left: -10000,  // 左边界
+                        right: 10000,  // 右边界
+                        bottom: -10000,  // 下边界
+                        top: 10000,   // 上边界
+                        near: 1.0,     // 近裁剪面距离
+                        far: 100000000.0, // 远裁剪面距离 
+                    })
+                }
+                 
+                cesiumViewer.camera.frustum.left = camera.left / camera.zoom
+                cesiumViewer.camera.frustum.right = camera.right / camera.zoom
+                cesiumViewer.camera.frustum.top = camera.top / camera.zoom
+                cesiumViewer.camera.frustum.bottom = camera.bottom / camera.zoom
+            }else{
+                
+                cesiumViewer.camera.perpFrustum_ && (cesiumViewer.camera.frustum = cesiumViewer.camera.perpFrustum_, cesiumViewer.camera.perpFrustum_ = null) //恢复
+                
+                //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 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());
+                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());
-            //console.log('ces', 'cPos', cPos, 'cDir',cDir, 'cUp', cUp)
-            cesiumViewer.camera.setView({
-                destination: cPos,
-                orientation: {
+                cDir = Cesium.Cartesian3.normalize(cDir, new Cesium.Cartesian3());
+                cUp = Cesium.Cartesian3.normalize(cUp, new Cesium.Cartesian3());
+                //console.log('ces', 'cPos', cPos, 'cDir',cDir, 'cUp', cUp)
+                orientation = {
                     direction: cDir,
                     up: cUp
                 }
+                let aspect = cesAspect || camera.aspect; 
+                //console.log('updateMap', 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.camera.setView({
+                destination: cPos,
+                orientation 
             });
 
-
-
-            let aspect = cesAspect || viewer.scene.getActiveCamera().aspect;
-            
-            //console.log('updateMap', 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.scene.globe.show = camera.position.z > 0  //在地面之下地球会闪烁,故隐藏
             cesiumViewer.render(); //立即render,否则会和点云render不同步而错位
-        }
+        }//cesium测试沙盒 https://sandcastle.cesium.com/
     }
 
     return sdk