xzw 3 months ago
parent
commit
480deebd8f
3 changed files with 57 additions and 23 deletions
  1. 47 9
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 9 13
      src/sdk/cover/index.js

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

@@ -67228,7 +67228,7 @@
 	    viewport.targetPlane.setFromNormalAndCoplanarPoint(view.direction.clone(), boundCenter);
 	    viewport.targetPlane.projectPoint(center, viewport.shiftTarget); //target转换到过模型中心的平面,以保证镜头一定在模型外 this.shiftTarget是得到的
 
-	    info.endPosition = this.getPosOutOfModel(viewport, boundSize);
+	    info.endPosition = this.getPosOutOfModel(viewport, boundSize).position;
 
 	    //if(viewport.name == 'mapViewport')info.endPosition.z = Math.max(Potree.config.map.cameraHeight, info.endPosition.z) 
 
@@ -67270,10 +67270,23 @@
 	    //let {boundSize, center} = viewer.bound
 	    boundSize = boundSize || this.getViewBound(viewport).boundSize;
 	    var expand = 10;
-	    var radius = boundSize.length() * 2;
-	    var position = viewport.shiftTarget.clone().sub(viewport.view.direction.clone().multiplyScalar(radius + expand));
-	    return position;
+	    var radius = (viewport.rotateSide ? boundSize.length() : boundSize.clone().projectOnVector(viewport.view.direction).length()) * 2;
+	    var far = radius + expand;
+	    var position = viewport.shiftTarget.clone().sub(viewport.view.direction.clone().multiplyScalar(far));
+	    far *= 2; //for camera.  
+	    return {
+	      position,
+	      far
+	    };
 	  }
+
+	  /* getCamFar(viewport){
+	      let boundSize = this.getViewBound(viewport).boundSize
+	      let expand = 30; 
+	      let radius = boundSize.length() * 2 
+	      return   expand + radius   
+	  } */
+
 	  updateCameraOutOfModel() {
 	    //因为移动模型导致模型超出相机外,所以更新位置
 	    viewer.viewports.forEach((viewport, i) => {
@@ -67287,9 +67300,15 @@
 	        viewport.targetPlane.projectPoint(viewport.view.position, viewport.shiftTarget)  //target转换到过模型中心的平面,以保证镜头一定在模型外 this.shiftTarget是得到的
 	        */
 	        this.setShiftTarget(viewport, boundCenter);
-	        var endPosition = this.getPosOutOfModel(viewport, boundSize);
+	        var {
+	          position,
+	          far
+	        } = this.getPosOutOfModel(viewport, boundSize);
 	        //if(viewport.name == 'mapViewport')endPosition.z = Math.max(Potree.config.map.cameraHeight, endPosition.z) 
-	        viewport.view.position.copy(endPosition);
+
+	        viewport.view.position.copy(position);
+	        viewport.camera.far = far;
+	        viewport.camera.updateProjectionMatrix();
 	      }
 	    });
 	  }
@@ -67320,7 +67339,7 @@
 	    vec.applyMatrix4(rotMatrix);
 	    viewport.shiftTarget.subVectors(center, vec); //新的
 
-	    viewport.view.position = this.getPosOutOfModel(viewport, boundSize);
+	    viewport.view.position.copy(this.getPosOutOfModel(viewport, boundSize).position);
 	  }
 	  getOrthoCamera() {
 	    var camera = new OrthographicCamera(-100, 100, 100, 100, 0.01, 10000);
@@ -73154,8 +73173,9 @@
 	  //镜头朝向 
 	  active: true,
 	  //相机位置在z轴正向
-	  limitBound: new Box3(new Vector3(-Infinity, -Infinity, 1), new Vector3(Infinity, Infinity, 5000)),
-	  //在地面以上
+	  viewContainsPoints: [new Vector3(0, 0, 0)],
+	  //为了看到ground
+	  // limitBound: new THREE.Box3(new THREE.Vector3(-Infinity,-Infinity, 1),new THREE.Vector3(Infinity,Infinity,5000)), //在地面以上
 	  margin: {
 	    x: 50,
 	    y: 150
@@ -73171,6 +73191,7 @@
 	  active: true,
 	  //相机位置在x轴负向  右下角屏
 	  viewContainsPoints: [new Vector3(0, 0, 0)],
+	  //为了看到轴线
 	  margin: {
 	    x: 300,
 	    y: 250
@@ -73529,11 +73550,28 @@
 	    viewer.compass.setDomPos();
 
 	    //this.changeSkyboxGeo(true)
+	    /* 
+	    if(this.selected){
+	        this.splitFarFun = ()=>{//移动位置后两边都要更新far
+	            viewer.viewports.forEach(v=>{
+	                let far = this.SplitScreen.getCamFar(v)
+	                v.camera.far = far 
+	                v.camera.updateProjectionMatrix()
+	            })
+	            
+	        }
+	        this.selected.addEventListener('transformChanged',  this.splitFarFun)
+	             
+	        this.splitFarFun()
+	    } */
+	    this.SplitScreen.updateCameraOutOfModel();
 	  },
 	  leaveSplit() {
 	    this.split = false;
 	    this.SplitScreen.unSplit();
 	    viewer.setControls(viewer.orbitControls);
+	    //this.selected?.removeEventListener('transformChanged',  this.splitFarFun)
+
 	    Potree.settings.pointDensity = this.beforeSplit.pointDensity;
 	    /* if(this.selected && this.selected.isPointcloud){ 
 	        this.showModelOutline(this.selected, true) 

File diff suppressed because it is too large
+ 1 - 1
public/lib/potree/potree.js.map


+ 9 - 13
src/sdk/cover/index.js

@@ -613,7 +613,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
 
         getScreenByPosition(pos3d, modelId, canShelter/* , disToCameraLimit */) {//通过模型局部坐标获取屏幕坐标 
 
-            //console.log('getScreenByPoint ', pos3d.toArray())
+            console.log('getScreenByPoint ', pos3d.toArray())
             let isLocal = modelId != void 0
             pos3d = new THREE.Vector3().copy(pos3d)
             let worldPos = isLocal ? Potree.Utils.datasetPosTransform({ fromDataset: true, datasetId: modelId, position: pos3d }) : pos3d
@@ -634,6 +634,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
  
             let result = Potree.Utils.getPos2d(worldPos, viewport, dom)
             if(!result.trueSide)return null
+             
+            
             return result
         },
 
@@ -1116,7 +1118,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     }
 
                     msg = Potree.Common.CloneObject(msg) 
-                    console.log(model.name, msg)
+                    //console.log(model.name, msg)
                     bus.emit('transformChanged', msg)
                 }
                 model.addEventListener('transformChanged', (e) => {
@@ -2542,20 +2544,12 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
             
             let orientation
-            /* 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);
-                //console.log('toCes',cPos,height) //数字过大如e35会崩溃
-                return cPos;
-            }; */
-
+          
             let cPos = Potree.math.toCes(pPos);
-            
-            
+             
             
             if(MergeEditor.split){
+                pPos.y = 5408190 //为什么很高的时候会变位置,所以固定下
                 orientation = {
                     heading: Cesium.Math.toRadians(0.0),  // 方向角
                     pitch: Cesium.Math.toRadians(-90.0),  // 俯仰角
@@ -2578,6 +2572,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                 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) //恢复