xzw 2 years ago
parent
commit
83b5f504f1

+ 18 - 27
src/custom/objects/Magnifier.js

@@ -173,48 +173,38 @@ export default class Magnifier extends THREE.Object3D {//放大镜or望远镜
         })
         
         var updateVisi = (e)=>{
-            if(e.hoverViewport == viewer.mainViewport){
+            //if(e.hoverViewport == viewer.mainViewport){
                 Potree.Utils.updateVisible(this,"atViewport", true)
                 this.update(e.intersect && e.intersect.location)
-            }else{
+            /* }else{
                 Potree.Utils.updateVisible(this,"atViewport", false) //小地图不显示
-            } 
+            } */ 
             
         }
         
-        viewer.addEventListener('global_mousemove', updateVisi)
-        viewer.addEventListener('global_touchstart', updateVisi)
+        //viewer.addEventListener('global_mousemove', updateVisi)
+        viewer.addEventListener('global_touchstart', updateVisi) 
+        viewer.addEventListener('getIntersect', updateVisi)
         
         
-        /* viewer.addEventListener("beginSplitView",()=>{
-            this.updateVisible("splitView", false) 
-        })
-        viewer.addEventListener("finishSplitView",()=>{
-            this.updateVisible("splitView", true) 
-        })  */
-         
+     
          
         this.addEventListener("setEnable",(e)=>{
-            Potree.Utils.updateVisible(this, "enable", e.value) //界面开关
+            Potree.Utils.updateVisible(this, "enable", e.value, 1,   e.value?'add':'cancel' ) //界面开关
             /* if(Potree.settings.displayMode == 'showPanos') && e.value){
                 Potree.settings.pointDensity = 'magnifier'
             }else if() */
             
         })
-         
-         
-        if(Potree.settings.isOfficial){
-            Potree.Utils.updateVisible(this, "enable", false) 
-        }else{
-            Potree.Utils.updateVisible(this, "measure", false) 
-            viewer.addEventListener("measureMovePoint",()=>{//测量开始
-                Potree.Utils.updateVisible(this, "measure", true) 
-            })
-            viewer.addEventListener("endMeasureMove",()=>{
-                Potree.Utils.updateVisible(this, "measure", false) 
-            })
-        }
+          
+        //默认隐藏, 显示的条件:测量拖拽  或  外部消息setEnable
+        
+        Potree.Utils.updateVisible(this, "default", false, 0) //默认隐藏 
         
+        viewer.addEventListener("MeasureDragChange",(e)=>{//测量drag 
+            Potree.Utils.updateVisible(this, "measure", e.state, 1,   e.state?'add':'cancel') 
+        })
+         
         
         viewer.scene.view.addEventListener('flyingDone',()=>{
             if(!this.visible)return
@@ -229,11 +219,12 @@ export default class Magnifier extends THREE.Object3D {//放大镜or望远镜
     
     //注意:在鼠标没有移动的时候,无法获取到最新的intersect, 放大镜内的内容可能是错误的。全景模式下更奇怪,原因未知
     update(aimPos){//相机靠近 navvis的做法 
+     
         var dontRender = this.dontRender || !(aimPos instanceof THREE.Vector3) || Potree.settings.displayMode == 'showPanos' && viewer.images360.flying
         aimPos = aimPos instanceof THREE.Vector3 ?  aimPos : this.aimPos
         if(!aimPos  || !this.visible)return
         
-        
+        //console.log('aimPos', aimPos)
         
         var playerCamera = viewer.scene.getActiveCamera()
         

+ 12 - 6
src/custom/objects/tool/Measure.js

@@ -236,9 +236,9 @@ export class Measure extends ctrlPolygon{
             let center = new THREE.Vector3().addVectors(p1,p2).multiplyScalar(0.5);  
             label.setPos(center) 
             distance = distance == void 0 ? p1.distanceTo(p2) : distance; 
-            var text = viewer.unitConvert.convert(distance, 'distance', Potree.settings.precision, this.unitSystem, 0.1 , true)//distance要传0.1 这个factor
+            var text = this.labelText || viewer.unitConvert.convert(distance, 'distance', Potree.settings.precision, this.unitSystem, 0.1 , true)//distance要传0.1 这个factor
             label.setText(text)
-            return distance
+          
         }
          
          
@@ -254,10 +254,10 @@ export class Measure extends ctrlPolygon{
             let previousPoint = this.points[previousIndex];
 
           
-            if(this.showDistances){ // edge labels
+            if(this.showDistances || this.labelText){ // edge labels
                 let edgeLabel = this.edgeLabels[index];
-                let distance = point.distanceTo(nextPoint)
-                edgeLabel.shouldVisi = (index < lastIndex || this.isRect || this.closed && !this.isNew ) && distance>0 
+                let distance = this.labelText || point.distanceTo(nextPoint)
+                edgeLabel.shouldVisi = this.labelText || (index < lastIndex || this.isRect || this.closed && !this.isNew ) && distance>0 
                 /* this.closed || */edgeLabel.setVisible(edgeLabel.shouldVisi)  
                 if(edgeLabel.visible){
                     setEdgeLabel(edgeLabel,point,nextPoint,distance)
@@ -415,6 +415,7 @@ export class Measure extends ctrlPolygon{
             } 
         }
         this.isEditing = state  
+        viewer.dispatchEvent({type:'MeasureDragChange',state})
     }
     
 
@@ -926,7 +927,12 @@ export class Measure extends ctrlPolygon{
             prop.maxMarkers = 2,
             prop.minMarkers = 2,
             prop.faceDirection = "horizontal"  
-                   
+        }else if(prop.measureType == "Hor LINE with Text"){ //add 
+            prop.showEdges = true,
+            prop.maxMarkers = 2,
+            prop.minMarkers = 2,
+            prop.faceDirection = "horizontal"  
+                 
         }else if(prop.measureType == 'Area'){
             prop.showDistances = true,  
             prop.atPlane = true,                

+ 8 - 8
src/custom/potree.shim.js

@@ -793,10 +793,8 @@ Utils.updateVisible = function(object, reason, ifShow, level=0, type){//当所
                 type: 'isVisible',
                 visible: shouldVisi,
                 reason,
-            }) 
-        }
-        
-        
+            })  
+        } 
     }    
     
     
@@ -831,10 +829,12 @@ Utils.updateVisible = function(object, reason, ifShow, level=0, type){//当所
     update() 
     
 } 
- 
- 
- 
- 
+/* 
+    复杂案例: 如果物体默认隐藏, 当符合任何一个其他条件时可见,则可:
+    Potree.Utils.updateVisible(this, "default", false, 0 ) //默认隐藏    
+    Potree.Utils.updateVisible(this, 条件名,  ifShow, 1, ifShow?'add':'cancel' ) //其他的条件
+*/ 
+
 Utils.getObjVisiByReason = function(object,reason){//获取在某条件下是否可见.  注: 用户在数据集选择可不可见为"datasetSelection"
     if(object.visible)return true
     else{

+ 1 - 1
src/custom/viewer/viewerBase.js

@@ -161,9 +161,9 @@ export class ViewerBase extends THREE.EventDispatcher{
                 var width_ = width * view.width
                 var height_ = height * view.height
                 
+                view.setResolution(Math.ceil(width_), Math.ceil(height_), width, height ) //本来应该是floor,但是这样奇数时会少一个像素,导致向左移一个像素且宽度少1。现在则多绘制1个像素,超出的1个像素应该不会绘制出来(但不知道其他地方是否有偏差,比如pick时)
                 if(height_ == 0)return  //avoid NAN
                 
-                view.setResolution(Math.ceil(width_), Math.ceil(height_), width, height ) //本来应该是floor,但是这样奇数时会少一个像素,导致向左移一个像素且宽度少1。现在则多绘制1个像素,超出的1个像素应该不会绘制出来(但不知道其他地方是否有偏差,比如pick时)
                 let aspect = width_ / height_;  //camera的参数精确些,不用视口的归整的resolution像素值,否则hasChange无法为true, 导致canvasResize了但map没update从而闪烁
                 view.camera.aspect = aspect;
                 

+ 5 - 7
src/navigation/InputHandlerNew.js

@@ -827,7 +827,7 @@ export class InputHandler extends THREE.EventDispatcher {
         
         
         
-        let canUseDepthTex = (Potree.settings.displayMode == 'showPanos' || useDepthTex)
+        let canUseDepthTex = !Potree.settings.unableUseDepTexPick && (Potree.settings.displayMode == 'showPanos' || useDepthTex)
             && viewer.images360.currentPano.pointcloud.hasDepthTex && viewport == viewer.mainViewport && !usePointcloud 
         
         
@@ -908,7 +908,7 @@ export class InputHandler extends THREE.EventDispatcher {
         //点云费时:2-15ms
         //深度图费时: 0.1-0.2ms
 
-        
+        this.viewer.dispatchEvent({type:'getIntersect',  intersect})
         
         if(onlyGetIntersect){ 
             return intersect
@@ -972,11 +972,9 @@ export class InputHandler extends THREE.EventDispatcher {
         
             let dontIntersect =  this.drag && viewport.alignment || isFlying /* viewer.images360.flying */ // flying 时可能卡顿
             //console.log('dontIntersectPointcloud',dontIntersectPointcloud)
-              
-            /* if(e.onlyGetIntersect )   */intersect = this.getIntersect(viewport,  e.onlyGetIntersect, e.pickWindowSize, !!dontIntersect, e.whichPointcloud) //数据集多的时候卡顿
-            /* else  Potree.Common.intervalTool.isWaiting('getIntersect', ()=>{  
-                 this.intersect = this.getIntersect(viewport,  e.onlyGetIntersect, e.pickWindowSize, !!dontIntersect, e.whichPointcloud) //数据集多的时候卡顿
-            }, 156); */
+               
+            intersect = this.getIntersect(viewport,  e.onlyGetIntersect, e.pickWindowSize, !!dontIntersect, e.whichPointcloud || e.usePointcloud || this.drag) //深度图不准,尽量用点云
+             
 	                 
             //console.log('intersectPoint', intersectPoint)
         } 

+ 19 - 15
src/viewer/NavigationCube.js

@@ -594,22 +594,8 @@ class NavigationCube{
                     }) 
                     faceMesh.material.uniforms.faceColor.value.set(Colors.blue) 
                 }); 
-                 
-                if(name == 'Top'){
-                    navCubeViewer.addEventListener('enterTopView',()=>{ 
-                        faceMesh.dispatchEvent('click')  
-                        
-                    }) 
-                    navCubeViewer.addEventListener('leaveTopView',()=>{ 
-                        if(navCubeViewer.lastView){
-                            navCubeViewer.switchView2(navCubeViewer.lastView) 
-                        }
-                    })
-                    
-                    
-                }
-                 
             })
+            
         }  
         
          
@@ -732,6 +718,24 @@ class NavCubeViewer extends ViewerBase{
                 })
                 
             }) 
+            
+            
+            //外部传消息,使进入俯视 
+            this.addEventListener('enterTopView',()=>{  
+                let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine)  //使基准线在俯视图中水平
+                let yaw = baseLine ? new THREE.Vector2().subVectors(baseLine.points[0], baseLine.points[1]).angle() : 0 
+                this.switchView('ortho', {dir: new THREE.Vector3(0,0,-1),yaw,pitch: -1.5707963267948966}) 
+            }) 
+            this.addEventListener('leaveTopView',()=>{ 
+                if(this.lastView){
+                    this.switchView2(this.lastView) 
+                }
+            })
+            
+                
+                 
+            
+            
         })