浏览代码

fix: measure

xzw 3 年之前
父节点
当前提交
5ae322d7da
共有 3 个文件被更改,包括 175 次插入55 次删除
  1. 55 31
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 119 23
      src/sdk/cover/index.js

+ 55 - 31
public/lib/potree/potree.js

@@ -59888,29 +59888,37 @@ void main() {
         
         initData(prop){
             //开始加数据  
+            if(Potree.settings.editType == 'merge'){ //融合页面没有地图,measure的不需要指定datasetId,每个点都有各自的datasetId,跟着各自的模型走
+                prop.points = prop.dataset_points.map((p,i)=>{
+                    return Potree.Utils.datasetPosTransform({fromDataset:true, datasetId:prop.points_datasets[i], position: new Vector3().copy(p)})
+                }); 
+            } 
+            
+            
+            
             if(prop.points){ 
             
                 for(const p of prop.points){
                     const pos = new Vector3().copy(p); 
                     this.addMarker({point:pos}); 
                 }
-             
-                if(this.datasetId != void 0){//初始化位置
-                    if(this.dataset_points){
-                        this.dataset_points = this.dataset_points.map(e=>{
-                            return e && new Vector3().copy(e) 
-                        });
-                        this.transformByPointcloud(); //根据dataset_points生成points  
-                    }  
-                }else {
-                    if(prop.dataset_points && prop.dataset_points.some(e=>e != void 0)){
-                        console.error('存在测量线的datasetId为空而dataset_points有值,请检查并删除:'+this.sid);//存在过的bug,原因未知,可能是后台处理dataset时替换的错误:http://192.168.0.21/index.php?m=bug&f=view&bugID=23601
-                        console.log(this);
-                    }
-                }
                 
                 
-                  
+                if(Potree.settings.editType != 'merge'){ 
+                    if(this.datasetId != void 0){//初始化位置
+                        if(this.dataset_points){
+                            this.dataset_points = this.dataset_points.map(e=>{
+                                return e && new Vector3().copy(e) 
+                            });
+                            this.transformByPointcloud(); //根据dataset_points生成points  
+                        }  
+                    }else {
+                        if(prop.dataset_points && prop.dataset_points.some(e=>e != void 0)){
+                            console.error('存在测量线的datasetId为空而dataset_points有值,请检查并删除:'+this.sid);//存在过的bug,原因未知,可能是后台处理dataset时替换的错误:http://192.168.0.21/index.php?m=bug&f=view&bugID=23601
+                            console.log(this);
+                        }
+                    } 
+                }  
                 
                 this.getFacePlane();
                 this.getPoint2dInfo(this.points);
@@ -60288,7 +60296,7 @@ void main() {
             
             e.drag.endDragFun && e.drag.endDragFun(e);//  addmarker
              
-            if(this.changeCallBack)this.changeCallBack();
+            //if(this.changeCallBack)this.changeCallBack()
                
             return true
         };
@@ -60643,7 +60651,7 @@ void main() {
             
             
             this.addEventListener('marker_dropped',(e)=>{ 
-                this.updateDatasetBelong();
+                this.updateDatasetBelong(e.index);
             }); 
 
       
@@ -60663,7 +60671,21 @@ void main() {
         }
      
          
-        updateDatasetBelong(){//更新所属数据集
+        updateDatasetBelong(changeIndex){//更新所属数据集
+         
+            if(Potree.settings.editType == "merge"){//无地图
+                /* this.dataset_points = this.points.map((e,i)=>{ 
+                    return Potree.Utils.datasetPosTransform({toDataset:true, datasetId:this.points_datasets[i], position:e.clone()})
+                }) */
+                this.dataset_points[changeIndex] = Potree.Utils.datasetPosTransform({toDataset:true, datasetId:this.points_datasets[changeIndex], position:this.points.clone()});
+                
+                
+                return
+            }
+        
+        
+        
+        
             let old = this.datasetId;
             
             let maxCount = {id:null,count:0};
@@ -60689,16 +60711,10 @@ void main() {
                 if(this.datasetId == void 0){
                     this.dataset_points = null; //可能为空或[null,null...]
                 }else {
-                    if(Potree.settings.editType == 'merge'){//无地图
-                        this.dataset_points = this.points.map((e,i)=>{ 
-                            return Potree.Utils.datasetPosTransform({toDataset:true, datasetId:this.points_datasets[i], position:e.clone()})
-                        });
-                    }else {
-                        this.dataset_points = this.points.map(e=>{ 
-                            return Potree.Utils.datasetPosTransform({toDataset:true,datasetId:this.datasetId, position:e.clone()})
-                        });
-                    }
-                    
+                     
+                    this.dataset_points = this.points.map(e=>{ 
+                        return Potree.Utils.datasetPosTransform({toDataset:true,datasetId:this.datasetId, position:e.clone()})
+                    }); 
                 }  
             //}
         }
@@ -61011,7 +61027,8 @@ void main() {
             this.selected = absoluteState;
             viewer.mapViewer && viewer.mapViewer.dispatchEvent('content_changed');
             if(hoverObject != 'byList'){
-                this.bus && this.bus.emit('highlight', this.selected);//列表高亮
+                //this.bus && this.bus.emit('highlight', this.selected)
+                this.dispatchEvent({type:'highlight',state:this.selected});//列表高亮
             }
         }
         
@@ -77878,7 +77895,8 @@ void main() {
 
 
         
-        createMeasureFromData(data){//add
+        createMeasureFromData(data){//add 
+        
             const measure = new Measure(data);
             
             viewer.scene.addMeasurement(measure);
@@ -117728,13 +117746,19 @@ ENDSEC
             model.updateMatrixWorld(); 
             if(model.matrixWorld.equals(model.lastMatrixWorld))return
             viewer.scene.measurements.forEach(measure=>{
+                let changed;
                 measure.points_datasets.forEach((dataset_id,i)=>{
                     if(dataset_id == model.dataset_id){
+                        changed = true;
                         measure.points[i] = Potree.Utils.datasetPosTransform({fromDataset:true,datasetId:dataset_id, position:measure.dataset_points[i].clone()});
                         measure.updateMarker(measure.markers[i], measure.points[i]);
-                        measure.update();
+                       
                     }
                 });
+                if(changed){
+                    measure.getPoint2dInfo(measure.points);
+                    measure.update();
+                }
             });
             
               

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


+ 119 - 23
src/sdk/cover/index.js

@@ -38,35 +38,20 @@ export const enter = (dom, isLocal) => {
     
     
     
-    
+     
     const units = { 1: 'metric', 2: 'imperial' }
-    let getMeasureType = function (type, unit) {
+    let getMeasureType = function (type, unit=1) {
         let info
         switch (type) {
-            case 'LINE':
+            case 'free':
                 info = { measureType: 'Distance' }
                 break
-            case 'AREA':
+            case 'area':
                 info = { measureType: 'Area' }
-                break
-            case 'L_LINE':
-                info = { measureType: 'Hor Distance' }
-                break
-            case 'L_AREA':
-                info = { measureType: 'Hor Area' }
-                break
-            case 'L_RECTANGLE':
-                info = { measureType: 'Hor Rect Area' }
-                break
-            case 'V_LINE':
+                break 
+            case 'vertical':
                 info = { measureType: 'Ver Distance' }
-                break
-            case 'V_AREA':
-                info = { measureType: 'Ver Area' }
-                break
-            case 'V_RECTANGLE':
-                info = { measureType: 'Ver Rect Area' }
-                break
+                break  
             default:
                 console.error('无此 measure type')
         }
@@ -764,6 +749,117 @@ export const enter = (dom, isLocal) => {
         
         
         
+        // 新的测量创建方法,传入type 返回新测量对象
+        startMeasure(type){ 
+        // 寻创建的测量对象有上面绘画测量对象的所有方法
+            const bus = mitt()
+            let info = getMeasureType(type, unit)
+       
+
+            let measure = viewer.measuringTool.startInsertion(
+                info,
+                () => {
+                    //done:
+                    bus.emit('end',  {
+                        dataset_points: measure.dataset_points.map(p=>p.clone()) , 
+                        points_datasets: measure.points_datasets
+                    }/* , ret */) //完成
+                },
+                () => {
+                    //cancel
+                    bus.emit('quit'/* , ret */) //删除
+                }
+            )
+            Potree.Log('startMeasure: ' + measure.id, '#00c7b2')
+            
+            let cancel = ()=>{ 
+                Potree.Log('clear删除: ' + measure.id, '#00c7b2') 
+                viewer.dispatchEvent({ type: 'cancel_insertions', remove: true, measure })
+                viewer.scene.removeMeasurement(measure)
+            }
+        
+            let result = {
+                bus,
+                cancel                
+            }
+        
+            /* StartMeasure = Measure & {
+              // 多了cancel 取消测量的事件,没有参数
+              // 多了invalidPoint 当用户测量了无效点时的事件,抛出无效原因
+              bus: Emitter<{ cancel: void; invalidPoint: string }>
+            } */
+            return result
+        },
+        
+        
+         
+        
+        
+        // 绘画测量线(非新增使用)
+        // type = 'free' (自由) || 'vertical' (垂直) || 'area' (面积)
+        // positions 点数组 构成如下 [{ point: {x,y,z}, modelId: 1 }]
+        drawMeasure(type, dataset_points, points_datasets){ 
+            // 返回测量对象有如下
+            
+            const bus = mitt()
+            let info = getMeasureType(type /* , unit */)
+            //info.points = positions 
+            info.dataset_points = dataset_points
+            info.points_datasets = points_datasets
+            //info.sid = sid
+            info.bus = bus
+            let measure = viewer.measuringTool.createMeasureFromData(info)
+            Potree.Log('drawMeasure由数据新建: ' + measure.id, '#00c7b2')
+            
+            measure.addEventListener('highlight',(e)=>{
+                bus.emit('highlight', e.state)
+            })
+            measure.addEventListener('marker_dropped',(e)=>{//拖拽结束后发送changeCallBack
+                if (measure.parent) {
+                    //未被删除
+                    bus.emit('update',{
+                        dataset_points: measure.dataset_points.map(p=>p.clone()) , 
+                        points_datasets: measure.points_datasets
+                    })
+                }
+            })
+            
+            
+            let result = {
+               
+                destroy(){
+                  //删除
+                    Potree.Log('clear删除: ' + measure.id, '#00c7b2')
+
+                    viewer.scene.removeMeasurement(measure)
+                },
+                
+                show(){
+                    viewer.updateVisible(measure, 'inListByUser', true)
+                },
+                 
+                hide(){
+                    viewer.updateVisible(measure, 'inListByUser', false)
+                },
+                // 更新点位事件,选中取消时间
+                // update 事件抛出positions   positions就是上面的参数 , 选中事件 抛出true||fakse
+                 
+                bus,
+                 
+                changeSelect(isHight){
+                    measure.setSelected(isHight, 'byList')
+                }
+
+              
+            }
+            return result
+        },
+        
+        
+        
+        
+        
+        
         
         
         addTag(info){//加热点
@@ -797,7 +893,7 @@ export const enter = (dom, isLocal) => {
     }
      
     
-    console.log('版本: 2022.8.23-1')
+    console.log('版本: 2022.8.29-1')
      
     return sdk 
 }