Browse Source

fix: 设置比例

xzw 3 năm trước cách đây
mục cha
commit
eb7b2c508c
3 tập tin đã thay đổi với 213 bổ sung19 xóa
  1. 31 9
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 181 9
      src/sdk/cover/index.js

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

@@ -60680,8 +60680,8 @@ void main() {
             }
             this.datasetId = maxCount.count > 0 ?  maxCount.id : null;
              
-            if(this.datasetId != old){
-                this.dispatchEvent({type:'changeDatasetId'});
+            //if(this.datasetId != old){
+                //this.dispatchEvent({type:'changeDatasetId'})
                 if(this.datasetId == void 0){
                     this.dataset_points = null; //可能为空或[null,null...]
                 }else {
@@ -60689,7 +60689,7 @@ void main() {
                         return Potree.Utils.datasetPosTransform({toDataset:true,datasetId:this.datasetId, position:e.clone()})
                     });
                 }  
-            }
+            //}
         }
         
         
@@ -63823,7 +63823,7 @@ void main() {
                         MergeEditor.maintainBoundXY(model);
                         MergeEditor.setModelBtmHeight(model); 
                         updateBound();
-                        model.dispatchEvent('transformChanged'); 
+                        model.dispatchEvent('transformChanged');  
                     };
                     model.addEventListener('position_changed', ()=>{
                         updateBound();
@@ -63838,14 +63838,16 @@ void main() {
                     });
                     model.addEventListener("rotation_changed", maintainBtmZAndCenter );
                     model.addEventListener("scale_changed", maintainBtmZAndCenter );
-                    
+                    model.addEventListener('transformChanged', ()=>{
+                        MergeEditor.modelTransformCallback(model);
+                    });
                 
                 }
                 model.updateMatrixWorld();
                 viewer.updateModelBound();
                 
                 MergeEditor.getBoundCenter(model); //初始化
-                 
+                model.lastMatrixWorld = model.matrixWorld.clone();
                 done(model);
             };
         
@@ -117662,8 +117664,7 @@ ENDSEC
              
         },
         
-        setModelBtmHeight(model, z ){ 
-            
+        setModelBtmHeight(model, z ){  
             //无论模型怎么缩放、旋转,都使最低点为z
             if(z == void 0) z = model.btmHeight; //维持离地高度
             else model.btmHeight = z;
@@ -117707,8 +117708,29 @@ ENDSEC
         getBoundCenter(model){
             if(!model.boundCenter) model.boundCenter = new Vector3;
             model.boundingBox.getCenter(model.boundCenter).applyMatrix4(model.matrixWorld); 
-        }
+        },
+        
         
+        
+        modelTransformCallback(model){
+            
+            model.updateMatrixWorld(); 
+            if(model.matrixWorld.equals(model.lastMatrixWorld))return
+            viewer.scene.measurements.forEach(measure=>{
+                measure.points_datasets.forEach((dataset_id,i)=>{
+                    if(dataset_id == model.dataset_id){
+                        measure.point[i] = Potree.Utils.datasetPosTransform({fromDataset:true,datasetId:dataset_id, position:measure.dataset_points[i].clone()});
+                        measure.updateMarker(measure.markers[index], measure.point[i]);
+                        measure.update();
+                    }
+                });
+            });
+            
+              
+         
+            
+            model.lastMatrixWorld = model.matrixWorld.clone();
+        }
     };   
         
         

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 1
public/lib/potree/potree.js.map


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

@@ -36,6 +36,124 @@ export const enter = (dom, isLocal) => {
     let maxLoadingCount = /* isLocal ? 1 :  */2; //正在加载模型的最大数目
     
     
+    
+    
+    
+    const units = { 1: 'metric', 2: 'imperial' }
+    let getMeasureType = function (type, unit) {
+        let info
+        switch (type) {
+            case 'LINE':
+                info = { measureType: 'Distance' }
+                break
+            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':
+                info = { measureType: 'Ver Distance' }
+                break
+            case 'V_AREA':
+                info = { measureType: 'Ver Area' }
+                break
+            case 'V_RECTANGLE':
+                info = { measureType: 'Ver Rect Area' }
+                break
+            default:
+                console.error('无此 measure type')
+        }
+        info.unit = units[unit]
+        return info
+    }
+
+    let getMeasureFunction = function (measure, bus) {
+        measure.changeCallBack = () => {
+            //拖拽结束后发送
+            if (measure.parent) {
+                //未被删除
+                bus.emit('update')
+            }
+        }
+
+        return {
+            quit: () => {
+                Potree.Log('quit结束且删除: ' + measure.id, '#00c7b2')
+                viewer.dispatchEvent({ type: 'cancel_insertions', remove: true, measure })
+            }, //触发结束。退出测量模式,清除之前操作
+            clear: () => {
+                //删除
+                Potree.Log('clear删除: ' + measure.id, '#00c7b2')
+
+                viewer.dispatchEvent({ type: 'cancel_insertions', remove: true, measure })
+                viewer.scene.removeMeasurement(measure)
+            },
+
+            getPoints: () => {
+                return measure.points
+            },
+            getDatasetLocations: () => {
+                return measure.dataset_points
+            },
+            getDatasets: () => {
+                return measure.points_datasets
+            },
+            getDatasetId: () => {
+                return measure.datasetId
+            },
+
+            getArea: () => {
+                return measure.area //{value:area, string:..}
+            },
+            getDistance: () => {
+                if (measure.points.length < 2) return null
+
+                var value = measure.points[0].distanceTo(measure.points[1])
+
+                return {
+                    value, //米
+                    string: viewer.unitConvert.convert(value, 'distance', void 0, measure.unitSystem, 0.1, true),
+                }
+            },
+            changeUnit: unit => {
+                //公制|英制 , 1 | 2 单位
+                measure.setUnitSystem(units[unit])
+            },
+            toDataURL: (width, height) => {
+                //截图
+                isScreenshoting = true
+                var promise = viewer.startScreenshot({ type: 'measure', measurement: measure, hideMarkers: true }, width, height)
+                promise.done(() => {
+                    isScreenshoting = false
+                })
+                return promise
+            },
+            //手动开启或关闭:
+            show: () => {
+                viewer.updateVisible(measure, 'inListByUser', true)
+            },
+            hide: () => {
+                viewer.updateVisible(measure, 'inListByUser', false)
+            },
+            highlight: isHight => {
+                measure.setSelected(isHight, 'byList')
+            },
+        }
+    }
+    
+    
+    
+    
+    
+    
+    
     let sdk = {
         sceneBus,
         getPositionByScreen(pos2d, hopeModelId ){//通过屏幕坐标获取真实坐标 . hopeModelId: 如果指定了模型,优先返回hopeModelId上的intersect
@@ -516,12 +634,15 @@ export const enter = (dom, isLocal) => {
                 },
                 changeBottom(z){
                     model && MergeEditor.setModelBtmHeight(model,z)
+                    model.dispatchEvent('transformChanged') //改了position
                 },
                 changePosition(pos){//校准取消时执行
                     model && model.position.copy(pos)
+                    model.dispatchEvent({type:'transformChanged'}) 
                 }, 
                 changeRotation(rot){//校准取消时执行
                     model && model.rotation.setFromVector3(rot)
+                    model.dispatchEvent({type:'transformChanged'}) //通知measure
                 },
                 
                 enterRotateMode(){
@@ -565,7 +686,53 @@ export const enter = (dom, isLocal) => {
                 leaveAlignment(){
                     MergeEditor.leaveSplit() 
                 },
+                /* enterScaleSet()我输入长度会调用setLength
+                返回{
+                 setLength(length: number)
+                }
+                */
+                enterScaleSet(){
+                    let bus = new mitt()
+                    let length, measure;
+                     
+                    
+                    
+                    let setScale = ()=>{
+                        if(length == void 0 || measure == void 0)return
+                        let s = length / measure.length 
+                        result.changeScale(s)
+                         
+                        //measure.update()
+                    }
+                    
+                    return { 
+                        bus,
+                        setLength(v){
+                            length = v
+                            setScale()
+                        },
+                        startMeasure(){
+                            let measure = viewer.measuringTool.startInsertion(
+                                {measureType: "Distance", unit: "metric"},
+                                () => {
+                                    //done:
+                                    bus.emit('end', ret) //完成
+                                    setScale()
+                                },
+                                () => {
+                                    //cancel
+                                    bus.emit('quit', ret) //删除
+                                }
+                            ) 
+                        }
+                    } 
+                },
 
+                leaveScaleSet(){
+                    
+                },
+
+                
                 
                 destroy(){
                     model && MergeEditor.removeModel(model) 
@@ -577,16 +744,21 @@ export const enter = (dom, isLocal) => {
         }, 
         
         
-        addTag(){//加热点
+        //测量线的点都附着于各个模型,当模型变化时,点跟着变化。
+        
+        
+        
+        
+        
+        addTag(info){//加热点
             let bus = mitt()  
-             
-            viewer.tagTool.startInsertion().done(tag=>{
-                bus.emit('added')
-                
-                
-            })
-            
-             
+            if(!info.position){
+                viewer.tagTool.startInsertion().done(tag=>{
+                    bus.emit('added')
+                    
+                    
+                }) 
+            }