浏览代码

fix: 基准点上的垂线可以拖拽

xzw 1 年之前
父节点
当前提交
462aedc62c
共有 3 个文件被更改,包括 140 次插入28 次删除
  1. 1 1
      public/static/lib/potree/potree.js
  2. 1 1
      public/static/lib/potree/potree.js.map
  3. 138 26
      src/sdk/laser/core/enter.js

+ 1 - 1
public/static/lib/potree/potree.js

@@ -82839,7 +82839,7 @@ void main()
 	    
 	    
 	    createGuideLines(){//add 固定点垂线的辅助线  可以多段
-	        var guideLine = LineDraw.createFatLine(this.guideLinePoints ,{material:this.getLineMat('guide2'), renderOrderShift:-1} );
+	        var guideLine = LineDraw.createFatLine(this.guideLinePoints ,{material:this.getLineMat('guide2'), renderOrderShift:-1, uncontinuous:true} );
 	        this.guideLine = guideLine;  //暂时也叫这个名字
 	        this.add(guideLine);
 	    }

文件差异内容过多而无法显示
+ 1 - 1
public/static/lib/potree/potree.js.map


+ 138 - 26
src/sdk/laser/core/enter.js

@@ -432,7 +432,7 @@ var enter = ({
         
         return info
     } */
-    let getMeasurePointsInfo = (fixPoint, onlyMoveBasePoint)=>{
+    let getMeasurePointsInfo = (fixPoint, baseMeasurePoints )=>{
         let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine && e.points.length == 2) 
         if(!baseLine){
             return console.error('创建失败,因基准线不存在')
@@ -456,15 +456,36 @@ var enter = ({
             }
         }
       
-        let basePoint2d = new THREE.Vector2().copy(fixPoint.basePoint)
-        let anotherPoint2d = new THREE.Vector2().addVectors(basePoint2d, new THREE.Vector2().subVectors(baselineP12d,baselineP22d))//测量线方向上另一点 
+      
         let basePointProj = fixPoint.basePoint.clone().setZ(baseLine.points[0].z)
-        let foot2_2d = Potree.math.getFootPoint(fixPoint2d, basePoint2d, anotherPoint2d) 
-        let foot2_P1 = new THREE.Vector3(foot2_2d.x, foot2_2d.y, baseLine.points[0].z)  
-        info.disMeasure2 = {
-            guideLinePoints : [new THREE.Vector3().copy(fixPoint.basePoint), basePointProj, foot2_P1, foot1_P1],
-            points : [basePointProj, foot2_P1 ],
-        } 
+      
+        
+        
+        
+        if(baseMeasurePoints){//初始创建
+            info.disMeasure2 = {
+                points : baseMeasurePoints,
+                guideLinePoints:[fixPoint.basePoint.clone(), basePointProj,
+                                basePointProj, baseMeasurePoints[0].clone(),
+                                 baseMeasurePoints[1].clone(), foot1_P1]
+            } 
+        }else{
+            let basePoint2d = new THREE.Vector2().copy(fixPoint.basePoint)
+            let anotherPoint2d = new THREE.Vector2().addVectors(basePoint2d, new THREE.Vector2().subVectors(baselineP12d,baselineP22d))//测量线方向上另一点 
+            
+            let foot2_2d = Potree.math.getFootPoint(fixPoint2d, basePoint2d, anotherPoint2d) 
+            let foot2_P1 = new THREE.Vector3(foot2_2d.x, foot2_2d.y, baseLine.points[0].z)  
+            
+            info.disMeasure2 = {
+                points : [basePointProj, foot2_P1 ],
+                guideLinePoints : [fixPoint.basePoint.clone(), basePointProj, foot2_P1, foot1_P1],
+                
+            }
+            
+            
+        }
+        
+         
         fixPoint.bus.emit('measureChange',[
             {line: info.disMeasure1.points, dis: info.disMeasure1.points[0].distanceTo(info.disMeasure1.points[1])},
             {line: info.disMeasure2.points, dis: info.disMeasure2.points[0].distanceTo(info.disMeasure2.points[1])} 
@@ -478,10 +499,10 @@ var enter = ({
     
     
     
-    let createMeasureForPoint = (fixPoint)=>{
+    let createMeasureForPoint = (fixPoint, baseMeasurePoints)=>{
         
         
-        let info = getMeasurePointsInfo(fixPoint)
+        let info = getMeasurePointsInfo(fixPoint, baseMeasurePoints)
         if(!info)return
          
         let info1 = {//垂直于基准线的水平测量线
@@ -501,7 +522,45 @@ var enter = ({
             guideLinePoints : info.disMeasure2.guideLinePoints 
         } 
         let disMeasure2 = viewer.measuringTool.createMeasureFromData(info2);
-    
+        
+        //因多个measure在同一直线上,会重叠,所以使可拖拽
+        let mouseover = (e) => { 
+            //this.setMarkerSelected(e.object, 'hover', 'single'); 
+            viewer.dispatchEvent({
+                type : "CursorChange", action : "add",  name:"markerMove"
+            }) 
+        };
+        
+        let mouseleave = (e) => { 
+            //this.setMarkerSelected(e.object, 'unhover', 'single'); 
+            viewer.dispatchEvent({
+                type : "CursorChange", action : "remove",  name:"markerMove"
+            })
+        }  
+        disMeasure2.edges[0].addEventListener('mouseover', mouseover);
+        disMeasure2.edges[0].addEventListener('mouseleave', mouseleave);
+        let dragInfo = {}
+        
+        disMeasure2.edges[0].addEventListener('startDragging',(e)=>{
+            dragInfo = {
+                startMeasurePoints : disMeasure2.points.map(e=>e.clone()),
+                dragPoint : e.drag.location.clone(),
+                normal : new THREE.Vector3().copy(Potree.math.getNormal2d({p1:disMeasure2.points[0], p2:disMeasure2.points[1]})).setZ(0), //measure的法线
+                plane: new THREE.Plane().setFromNormalAndCoplanarPoint(new THREE.Vector3(0,0,1),  disMeasure2.points[0]), //水平面
+            }
+        })
+        
+        disMeasure2.edges[0].addEventListener('drag',(e)=>{ //平移
+            let ray = Potree.Utils.mouseToRay(e.pointer, e.drag.dragViewport.camera);
+            let I = ray.intersectPlane(dragInfo.plane, new THREE.Vector3())
+            if(!I)return //向上了
+            let dragVec = new THREE.Vector3().subVectors(I, dragInfo.dragPoint);
+            dragVec.projectOnVector(dragInfo.normal) 
+            dragDisMeasure2(fixPoint, dragVec, dragInfo.startMeasurePoints) 
+            
+         
+            
+        })
         
         fixPoint.disMeasure1 = disMeasure1;
         fixPoint.disMeasure2 = disMeasure2;
@@ -519,15 +578,40 @@ var enter = ({
         })
     }
     
-    let removeMeasureForPoint = (fixPoint)=>{
-        viewer.scene.removeMeasurement(fixPoint.disMeasure1);  
-        viewer.scene.removeMeasurement(fixPoint.disMeasure2);  
-        fixPoint.disMeasure1 = null
-        fixPoint.disMeasure2 = null
-        fixPoint.basePoint = null 
+    
+    
+    
+    let dragDisMeasure2 = (fixPoint, dragVec, startMeasurePoints)=>{//将disMeasure2拖拽一定距离
+        let disMeasure1 = fixPoint.disMeasure1, 
+            disMeasure2 = fixPoint.disMeasure2  
+        startMeasurePoints = startMeasurePoints || disMeasure2.points  //开始拖拽时的点
+        disMeasure2.points = startMeasurePoints.map(e=>new THREE.Vector3().addVectors(e,dragVec))
+         
+        let basePointProj = disMeasure2.guideLinePoints[1]
+        let foot1_P1 = disMeasure2.guideLinePoints[disMeasure2.guideLinePoints.length-1]
+        disMeasure2.guideLinePoints = [fixPoint.basePoint.clone(), basePointProj,      //修改虚线
+                             basePointProj, disMeasure2.points[0].clone(),
+                             disMeasure2.points[1].clone(), foot1_P1]
+        disMeasure2.updateGuideLines()
+        disMeasure2.update({ifUpdateMarkers:true})  
+        viewer.dispatchEvent('content_changed') 
+        
+        
+        fixPoint.bus.emit('measureChange',[
+            {line: disMeasure1.points.map(e=>e.clone()), dis: disMeasure1.points[0].distanceTo(disMeasure1.points[1])},
+            {line: disMeasure2.points.map(e=>e.clone()), dis: disMeasure2.points[0].distanceTo(disMeasure2.points[1])} 
+        ])
+    
     }
-    let updateMeasureForPoint = (fixPoint, {onlyBasePoint}={})=>{
+    
+    
+    
+    let updateMeasureForPoint = (fixPoint, {onlyBasePoint,updateBaseLine}={})=>{
         if(!fixPoint.disMeasure1)return
+        let ps = fixPoint.disMeasure2.guideLinePoints 
+        let dragVec = ps.length == 6 && new THREE.Vector3().subVectors(ps[3],ps[2])
+        
+        
         
         let info = getMeasurePointsInfo(fixPoint)
         if(!info)return
@@ -535,6 +619,7 @@ var enter = ({
             fixPoint.disMeasure1.points = info.disMeasure1.points
             fixPoint.disMeasure1.update({ifUpdateMarkers:true})
         }
+        
         fixPoint.disMeasure1.guideLinePoints = info.disMeasure1.guideLinePoints 
         fixPoint.disMeasure1.updateGuideLines()
         fixPoint.disMeasure2.points = info.disMeasure2.points
@@ -542,12 +627,36 @@ var enter = ({
         fixPoint.disMeasure2.guideLinePoints = info.disMeasure2.guideLinePoints 
         fixPoint.disMeasure2.updateGuideLines()
         
+        if(dragVec){
+            if(updateBaseLine){//移动基准线的话dragVec也改变方向了 
+                //let dragDir = dragVec.dot(fixPoint.disMeasure1.lineDir)<0 ? 1 : -1 //向外or向内
+                let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine && e.points.length == 2) 
+                let dragDir = dragVec.cross(baseLine.lineDir).z < 0 ? 1 : -1
+        
+                
+                ps = fixPoint.disMeasure2.guideLinePoints
+                let newVec = new THREE.Vector3().subVectors(ps[ps.length-2],ps[ps.length-1]).normalize()
+                let dis = dragVec.length() * dragDir
+                newVec.multiplyScalar(dis)
+                dragVec = newVec
+            }
+            dragDisMeasure2(fixPoint, dragVec)//恢复之前拖拽的距离
+        }
+        
+        
+        
+        
     }
     
+     
     
-    
-    
-    
+    let removeMeasureForPoint = (fixPoint)=>{
+        viewer.scene.removeMeasurement(fixPoint.disMeasure1);  
+        viewer.scene.removeMeasurement(fixPoint.disMeasure2);  
+        fixPoint.disMeasure1 = null
+        fixPoint.disMeasure2 = null
+        fixPoint.basePoint = null 
+    }
     
 
     var sdk = {
@@ -799,7 +908,7 @@ var enter = ({
 
 
 
-            createFixPoint({measure, graph, pos, basePoint}){//创建固定点或多线段   
+            createFixPoint({measure, graph, pos, basePoint, }){//创建固定点或多线段   
                 
                 console.log('createFixPoint',measure, graph, pos, basePoint)
                 let ifDrawVerMeasure = measure//是否绘制垂线
@@ -810,7 +919,7 @@ var enter = ({
                 
                 
                 const baseLineChanged = ()=>{
-                    updateMeasureForPoint(mainPoint)
+                    updateMeasureForPoint(mainPoint,{updateBaseLine:true})
                 }
                 const setDisplay = (show)=>{ 
                     if(graph){
@@ -899,8 +1008,11 @@ var enter = ({
                     changePos(pos){//固定点修改 
                         console.log('changePos',pos) 
                         mainPoint.copy(pos)
-                        ifDrawVerMeasure && updateMeasureForPoint(mainPoint)
-                       
+                        if(ifDrawVerMeasure){  
+                            updateMeasureForPoint(mainPoint) 
+                        }
+                         
+                        
                     },
                     changeBase(pos){//基准点修改
                         console.log('changeBase',pos)