xzw 8 달 전
부모
커밋
b580d3ef1a
3개의 변경된 파일86개의 추가작업 그리고 50개의 파일을 삭제
  1. 60 32
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 25 17
      src/sdk/cover/index.js

+ 60 - 32
public/lib/potree/potree.js

@@ -25528,6 +25528,7 @@
 	    }
 	    if (!isTouch || e.touches.length == 1) {
 	      if ((!this.drag || this.drag.notPressMouse || Potree.settings.intersectOnObjs && this.drag.object) && !isFlying) {
+	        var _curr$_listeners;
 	        /* let blacklist = this.drag && this.drag */
 	        var hoveredElements = this.getHoveredElements();
 	        if (hoveredElements.length > 0) {
@@ -25557,19 +25558,30 @@
 	          this.lastMouseoverElement = curr;
 	          viewer.dispatchEvent('content_changed');
 	        }
-	        if (hoveredElements.length > 0) {
-	          var object = hoveredElements.map(e => e.object).find(e => e._listeners && e._listeners['mousemove']);
-	          if (object) {
-	            /* object.dispatchEvent({
-	                type: 'mousemove',
-	                object: object
-	            }); */
-	            object.dispatchEvent($.extend(this.getEventDesc(e), {
+	        if (curr !== null && curr !== void 0 && (_curr$_listeners = curr._listeners) !== null && _curr$_listeners !== void 0 && _curr$_listeners.mousemove) {
+	          if (curr) {
+	            //xzw改为只取第一个
+	            curr.dispatchEvent($.extend(this.getEventDesc(e), {
 	              type: 'mousemove',
-	              hoveredElement: hoveredElements.find(e => e.object == object)
+	              hoveredElement: cur
 	            }));
 	          }
 	        }
+	        /* if(hoveredElements.length > 0){
+	            let object = hoveredElements
+	                .map(e => e.object)
+	                .find(e => (e._listeners && e._listeners['mousemove']));
+	            
+	            if(object){ 
+	                object.dispatchEvent($.extend(  
+	                    this.getEventDesc(e),
+	                    {
+	                        type: 'mousemove',
+	                        hoveredElement: hoveredElements.find(e=>e.object == object)
+	                    }
+	                ));
+	            }  
+	        } */
 	        this.hoveredElements = hoveredElements;
 	      }
 
@@ -42274,7 +42286,7 @@
 	}; //稍微小点防止字体模糊
 
 	var titleLineHeight = 2;
-	var arrowCountMax = 100; //箭头总数不能超过这个值。 The count value passed into the constructor represents the maximum number of instances of this mesh. You can change the number of instances at runtime to an integer value in the range [0, count].If you need more instances than the original count value, you have to create a new InstancedMesh.
+	var arrowCountMax = 1000; //箭头总数不能超过这个值。 The count value passed into the constructor represents the maximum number of instances of this mesh. You can change the number of instances at runtime to an integer value in the range [0, count].If you need more instances than the original count value, you have to create a new InstancedMesh.
 	var lastArrowCamPos,
 	  lastArrowCount = 0;
 	var depthProps = {
@@ -42357,6 +42369,7 @@
 	  marker.scale.set(s, s, s);
 	};
 	var fakeMarker;
+	var lastFadeTime;
 	var showFakeMarker = (path, position) => {
 	  //添加marker时指示位置  
 	  if (!fakeMarker) {
@@ -42368,10 +42381,12 @@
 	  path.add(fakeMarker);
 	  fakeMarker.position.copy(position);
 	  Potree.Utils.updateVisible(fakeMarker, 'add', true);
+	  viewer.dispatchEvent('content_changed');
 	  return fakeMarker;
 	};
 	var hideFakeMarker = () => {
 	  fakeMarker && Potree.Utils.updateVisible(fakeMarker, 'add', false);
+	  lastFadeTime = Date.now();
 	};
 	class Path$1 extends ctrlPolygon {
 	  constructor(prop) {
@@ -42412,7 +42427,8 @@
 	          y: 0.5
 	        },
 	        //向上移动一半
-	        maxLineWidth: 300
+	        maxLineWidth: 300,
+	        textAlign: Potree.settings.isOfficial && 'left'
 	      }));
 	      this.titleLabel.sprite.material.depthTest = false;
 	      var line = LineDraw.createFatLine([new Vector3(0, 0, 0), new Vector3(0, 0, titleLineHeight)], Object.assign({}, depthProps, {
@@ -42484,7 +42500,7 @@
 	      //和measure不同的是它的边是连在一起的一整条
 	      this.edge = new Mesh(voidGeometry, new DepthBasicMaterial($.extend({}, depthProps, {
 	        color: this.pathColor || '#fff',
-	        opacity: 0.4,
+	        opacity: 0.3,
 	        side: 2,
 	        transparent: true,
 	        fadeFar: this.fadeFar
@@ -42550,7 +42566,7 @@
 	            this.hideArrowUntilUpdate();
 	            this.dispatchEvent('changed');
 	          } else {
-	            this.isNew || viewer.measuringTool.isAdding || this.dispatchEvent('click'); //viewer.focusOnObject(this, 'measure') //正在添加测量线时不要focus其他线(容易误触)
+	            this.isNew || viewer.measuringTool.isAdding || this.dispatchEvent('clicked'); //viewer.focusOnObject(this, 'measure') //正在添加测量线时不要focus其他线(容易误触)
 	          }
 	        });
 	      };
@@ -42636,7 +42652,9 @@
 	      transform2D: {
 	        x: 0,
 	        y: 0.2
-	      } //朝上偏移一些   配合最外层z混合增高
+	      },
+	      //朝上偏移一些   配合最外层z混合增高
+	      textAlign: Potree.settings.isOfficial && 'left'
 	    }));
 	    if (hasHoverEvent) {
 	      label.addEventListener('mouseover', () => {
@@ -42772,7 +42790,7 @@
 	          action: 'add',
 	          name: 'pen_delPoint'
 	        });
-	        hideFakeMarker();
+	        //hideFakeMarker()
 	      }
 	      this.hoverStates.marker = marker;
 	    } /* ,{importance:1} */);
@@ -43137,7 +43155,7 @@
 	    }, 300); //为了防止不停点击不停更新,所以隐藏一下不变了再更新
 	  }
 	  static updateArrows(force) {
-	    var far = math.linearClamp(Potree.fpsRendered2, [10, 60], [80, 180]); //几乎看不见了
+	    var far = math.linearClamp(Potree.fpsRendered2, [10, 60], [200, 350]); //几乎看不见了
 
 	    var paths = viewer.scene.measurements.filter(e => {
 	      var _e$arrows;
@@ -43168,7 +43186,7 @@
 	        });
 	      }
 	    });
-	    var spaceDis = MathUtils.clamp(math.toPrecision(Math.pow(minDisSq, 0.1) * 5, 1), 5, 8); //箭头之间的间距,适当调节稀疏
+	    var spaceDis = MathUtils.clamp(math.toPrecision(Math.pow(minDisSq, 0.1) * 5, 1), 5, 10); //箭头之间的间距,适当调节稀疏
 	    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();
@@ -56857,7 +56875,7 @@
 	    })));
 	    this.spot.scale.set(defaultSpotScale, defaultSpotScale, defaultSpotScale);
 	    this.spot.renderOrder = this.spot.pickOrder = Potree.config.renderOrders.tag.spot;
-	    Potree.settings.isOfficial || this.changeImage(Potree.resourcePath + '/textures/spot_default.png');
+	    Potree.settings.isOfficial || this.changeMap(Potree.resourcePath + '/textures/spot_default.png');
 	    this.line = LineDraw.createFatLine([], {
 	      mat: lineMat
 	    });
@@ -56867,7 +56885,7 @@
 	      root: group,
 	      text: '',
 	      sizeInfo: {
-	        width2d: 130
+	        width2d: 150
 	      },
 	      textColor: {
 	        r: 255,
@@ -56892,7 +56910,9 @@
 	      transform2Dpercent: {
 	        x: 0,
 	        y: 0.5
-	      } //向上移动一半
+	      },
+	      //向上移动一半
+	      textAlign: Potree.settings.isOfficial && 'left'
 	    })); //更新sprite时,实际更新的是root: spot的矩阵
 	    this.setTitle(this.title);
 	    this.updateTitlePos();
@@ -78280,7 +78300,8 @@
 	 *
 	 *
 	 */
-	var minRadius = 2;
+	var minRadius = 2,
+	  maxRadius = 300;
 	class OrbitControls$1 extends EventDispatcher {
 	  constructor(viewer, viewport) {
 	    super();
@@ -78373,19 +78394,9 @@
 	      });
 	    };
 	    var scroll = e => {
-	      var _viewer$inputHandler$, _viewer$inputHandler$2;
 	      if (!this.enabled) return;
 	      var resolvedRadius = this.currentViewport.view.radius + this.radiusDelta;
-
-	      /* let model = viewer.inputHandler.intersect?.model || viewer.inputHandler.intersect?.pointcloud || viewer.modules.MergeEditor?.selected;  
-	      let min = 0.1
-	      if(model){
-	          min *= model.scale.x            //有的模型太小。注意:如果没有选中模型且没有intersect会无法前进是会有点怪
-	      }
-	      if(resolvedRadius < min && e.delta>0)return; //防止缩放太小,导致很慢 */
 	      this.radiusDelta += -e.delta * resolvedRadius * 0.1;
-	      var model = ((_viewer$inputHandler$ = viewer.inputHandler.intersect) === null || _viewer$inputHandler$ === void 0 ? void 0 : _viewer$inputHandler$.object) || ((_viewer$inputHandler$2 = viewer.inputHandler.intersect) === null || _viewer$inputHandler$2 === void 0 ? void 0 : _viewer$inputHandler$2.pointcloud);
-	      model && this.updateRadiusByModel(model, viewer.inputHandler.intersect.location.distanceTo(this.currentViewport.view.position));
 	      this.stopTweens();
 	    };
 	    var dblclick = e => {
@@ -78474,6 +78485,19 @@
 	        if (distance < minRadius) minRadius = distance * 0.5; //融合页面当focus一个很小的物体时,需要将minRadius也调小
 	      }
 	    });
+	    this.viewer.addEventListener('camera_changed', e => {
+	      if (e.viewport == this.currentViewport) {
+	        var _viewer$inputHandler$, _viewer$inputHandler$2;
+	        var model = ((_viewer$inputHandler$ = viewer.inputHandler.intersect) === null || _viewer$inputHandler$ === void 0 ? void 0 : _viewer$inputHandler$.object) || ((_viewer$inputHandler$2 = viewer.inputHandler.intersect) === null || _viewer$inputHandler$2 === void 0 ? void 0 : _viewer$inputHandler$2.pointcloud);
+	        if (model) this.updateRadiusByModel(model, viewer.inputHandler.intersect.location.distanceTo(this.currentViewport.view.position));else {
+	          var disToGroundInDir = Math.abs(this.currentViewport.camera.position.z / this.currentViewport.view.direction.z); //相机和地面交点距离
+	          maxRadius = Math.max(2, disToGroundInDir * 1.5); //越靠近地面速度越慢,防止移动来移动去久了之后距离模型很近但radius很大
+
+	          minRadius = disToGroundInDir * 0.9; //防止在高空放大很慢
+	          //console.log('changeRadius common', minRadius, maxRadius)
+	        }
+	      }
+	    });
 	  }
 	  setScene(scene) {
 	    this.scene = scene;
@@ -78583,7 +78607,8 @@
 	    var len = size.length();
 	    var distance = MathUtils.clamp(dis, 0.8 * object.scale.x, Math.max(len * 0.1, 3 * object.scale.x));
 	    minRadius = distance;
-	    //console.log('updateRadiusByModel',distance)
+	    maxRadius = dis * 2;
+	    //console.log('updateRadiusByModel',minRadius, maxRadius)
 	    return distance;
 	  }
 	  stopTweens() {
@@ -78658,6 +78683,9 @@
 	      var radius = view.radius + _progression * this.radiusDelta;
 	      var _V = view.direction.multiplyScalar(-radius);
 	      var _position = new Vector3().addVectors(view.getPivot(), _V);
+	      if (radius > maxRadius) {
+	        radius = maxRadius;
+	      }
 	      if (this.constantlyForward) {
 	        // 到达中心点后还能继续向前移动,也就是能推进中心点
 	        if (radius < minRadius) {

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 1
public/lib/potree/potree.js.map


+ 25 - 17
src/sdk/cover/index.js

@@ -121,9 +121,9 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             updateMap()
             
             Potree.Common.intervalTool.isWaiting('updateCamNear', ()=>{ 
-                updateCamNear() 
+                updateCamNear()  
             }, 1000)
-             
+            updateCamFar()
             //viewer.scene.tags.children.forEach(tag=>tag.functions.updateVisiFar()) 
              
         } 
@@ -919,9 +919,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
 
             }
 
-            let updateFar = ()=>{
-                Potree.settings.cameraFar = Math.max(result.oldFar, viewer.scene.view.position.distanceTo(model.boundCenter) + model.boundingBox.clone().applyMatrix4(model.matrixWorld).getSize(new THREE.Vector3).length())
-            }
+             
 
             let scaleMeasure
             let result = {
@@ -1004,12 +1002,12 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     model.dispatchEvent('transformChanged') //改了position */
                 },
                 changePosition(pos) {//校准取消时执行
-                    console.log('changePosition', pos.x, pos.y, pos.z)
+                    //console.log('changePosition', pos.x, pos.y, pos.z)
                     model && model.position.copy(pos)
                     model.dispatchEvent({ type: 'position_changed' })
                 },
                 changeRotation(rot) {//校准取消时执行 
-                    console.log('changeRotation', rot.x, rot.y, rot.z)
+                    //console.log('changeRotation', rot.x, rot.y, rot.z)
                     model && model.rotation.setFromVector3(rot)
                     model.dispatchEvent({ type: 'rotation_changed' })
                 },
@@ -1088,6 +1086,12 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                         if (m != model) Potree.Utils.updateVisible(m, 'enterScaleSet', false)
                     })
                     result.oldFar = Potree.settings.cameraFar
+                    model.enterScaleOldState_ = {
+                        //view: viewer.mainViewport.view.clone(),
+                        scale: model.scale.x,
+                        far: Potree.settings.cameraFar
+                    }
+                    
                     
                     
                     let setScale = () => {
@@ -1106,7 +1110,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中心转,坏处是每次更改都会变一下画面
-                                updateFar()
+                                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())
+
                             }
                         }) 
                            
@@ -1162,8 +1167,11 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                         if (m != model) Potree.Utils.updateVisible(m, 'enterScaleSet', true)
                     })
                 
-                    setTimeout(()=>{//可能还原了
-                        Potree.settings.cameraFar = Math.max(result.oldFar, viewer.scene.view.position.distanceTo(model.boundCenter) + model.boundingBox.getSize(new THREE.Vector3).length())
+                    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  
+                        }
                     },10)
                     
                      
@@ -1368,7 +1376,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                         pos:  e.root ? Potree.Utils.datasetPosTransform({toDataset:true, position: e.position.clone(),  datasetId: e.root.dataset_id  }) : e.position.clone()
                     }) 
                 })
-                path.addEventListener('click',(e)=>{
+                path.addEventListener('clicked',(e)=>{
                     bus.emit('focus') 
                 })
                  
@@ -1981,14 +1989,13 @@ 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)
+         
     }
 
 
-    function 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);
@@ -2037,7 +2044,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                 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不同步而错位
         }
     }