xzw 3 years ago
parent
commit
77418f1826
4 changed files with 86 additions and 76 deletions
  1. 10 25
      pnpm-lock.yaml
  2. 48 35
      public/lib/potree/potree.js
  3. 1 1
      public/lib/potree/potree.js.map
  4. 27 15
      src/sdk/cover/index.js

+ 10 - 25
pnpm-lock.yaml

@@ -1,4 +1,4 @@
-lockfileVersion: 5.3
+lockfileVersion: 5.4
 
 specifiers:
   '@simaq/core': ^1.1.0
@@ -218,7 +218,6 @@ packages:
     dependencies:
       '@vue/reactivity': 3.2.37
       '@vue/shared': 3.2.37
-    dev: false
 
   /@vue/runtime-dom/3.2.37:
     resolution: {integrity: sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==}
@@ -226,7 +225,6 @@ packages:
       '@vue/runtime-core': 3.2.37
       '@vue/shared': 3.2.37
       csstype: 2.6.20
-    dev: false
 
   /@vue/server-renderer/3.2.37_vue@3.2.37:
     resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==}
@@ -236,7 +234,6 @@ packages:
       '@vue/compiler-ssr': 3.2.37
       '@vue/shared': 3.2.37
       vue: 3.2.37
-    dev: false
 
   /@vue/shared/3.2.37:
     resolution: {integrity: sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==}
@@ -338,7 +335,6 @@ packages:
     resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
     dependencies:
       is-what: 3.14.1
-    dev: false
 
   /core-js/3.24.1:
     resolution: {integrity: sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg==}
@@ -347,7 +343,6 @@ packages:
 
   /csstype/2.6.20:
     resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==}
-    dev: false
 
   /dayjs/1.11.5:
     resolution: {integrity: sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==}
@@ -355,9 +350,13 @@ packages:
 
   /debug/3.2.7:
     resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
     dependencies:
       ms: 2.1.3
-    dev: false
     optional: true
 
   /delayed-stream/1.0.0:
@@ -379,7 +378,6 @@ packages:
     requiresBuild: true
     dependencies:
       prr: 1.0.1
-    dev: false
     optional: true
 
   /esbuild-android-64/0.14.54:
@@ -646,7 +644,6 @@ packages:
   /graceful-fs/4.2.10:
     resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
     requiresBuild: true
-    dev: false
     optional: true
 
   /has/1.0.3:
@@ -661,7 +658,6 @@ packages:
     engines: {node: '>=0.10.0'}
     dependencies:
       safer-buffer: 2.1.2
-    dev: false
     optional: true
 
   /image-size/0.5.5:
@@ -669,7 +665,6 @@ packages:
     engines: {node: '>=0.10.0'}
     hasBin: true
     requiresBuild: true
-    dev: false
     optional: true
 
   /immutable/4.1.0:
@@ -713,7 +708,6 @@ packages:
 
   /is-what/3.14.1:
     resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
-    dev: false
 
   /js-tokens/4.0.0:
     resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -735,7 +729,8 @@ packages:
       mime: 1.6.0
       needle: 3.1.0
       source-map: 0.6.1
-    dev: false
+    transitivePeerDependencies:
+      - supports-color
 
   /lodash-es/4.17.21:
     resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
@@ -764,7 +759,6 @@ packages:
     dependencies:
       pify: 4.0.1
       semver: 5.7.1
-    dev: false
     optional: true
 
   /mime-db/1.52.0:
@@ -784,7 +778,6 @@ packages:
     engines: {node: '>=4'}
     hasBin: true
     requiresBuild: true
-    dev: false
     optional: true
 
   /mitt/3.0.0:
@@ -793,7 +786,6 @@ packages:
 
   /ms/2.1.3:
     resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-    dev: false
     optional: true
 
   /nanoid/3.3.4:
@@ -814,7 +806,8 @@ packages:
       debug: 3.2.7
       iconv-lite: 0.6.3
       sax: 1.2.4
-    dev: false
+    transitivePeerDependencies:
+      - supports-color
     optional: true
 
   /normalize-path/3.0.0:
@@ -825,7 +818,6 @@ packages:
   /parse-node-version/1.0.1:
     resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
     engines: {node: '>= 0.10'}
-    dev: false
 
   /path-parse/1.0.7:
     resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
@@ -842,7 +834,6 @@ packages:
   /pify/4.0.1:
     resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
     engines: {node: '>=6'}
-    dev: false
     optional: true
 
   /postcss/8.4.16:
@@ -855,7 +846,6 @@ packages:
 
   /prr/1.0.1:
     resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
-    dev: false
     optional: true
 
   /readdirp/3.6.0:
@@ -898,7 +888,6 @@ packages:
 
   /safer-buffer/2.1.2:
     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-    dev: false
     optional: true
 
   /sass/1.54.3:
@@ -913,7 +902,6 @@ packages:
 
   /sax/1.2.4:
     resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
-    dev: false
     optional: true
 
   /scroll-into-view-if-needed/2.2.29:
@@ -925,7 +913,6 @@ packages:
   /semver/5.7.1:
     resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
     hasBin: true
-    dev: false
     optional: true
 
   /shallow-equal/1.2.1:
@@ -965,7 +952,6 @@ packages:
 
   /tslib/2.4.0:
     resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
-    dev: false
 
   /typescript/4.7.4:
     resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==}
@@ -1043,7 +1029,6 @@ packages:
       '@vue/runtime-dom': 3.2.37
       '@vue/server-renderer': 3.2.37_vue@3.2.37
       '@vue/shared': 3.2.37
-    dev: false
 
   /vuedraggable/4.1.0_vue@3.2.37:
     resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==}

+ 48 - 35
public/lib/potree/potree.js

@@ -61007,7 +61007,7 @@ void main() {
         
         
         setSelected(state, hoverObject){//add
-            
+            console.log('setSelected',state, hoverObject);
             hoverObject && (this.selectStates[hoverObject] = state);
             let absoluteState = false;
             for(var i in this.selectStates){
@@ -117793,7 +117793,7 @@ ENDSEC
             });
              
             if(fitBound){
-                viewer.focusOnObject({boundingBox}, 'boundingBox', duration, {dontLookUp}); 
+                viewer.focusOnObject({boundingBox}, 'boundingBox', duration, {dontLookUp, dontChangeCamDir:true}); 
             }else { 
             
                 /* 
@@ -129184,49 +129184,37 @@ ENDSEC
             
             let getPosWithFullBound = (points, boundingBox, target, cameraPos  )=>{//使boundingBox差不多占满屏幕时的相机到target的距离
                 // points 和 boundingBox 至少有一个
-                 
-                var cameraTemp = camera.clone();
-                cameraTemp.position.copy(cameraPos);  
-                cameraTemp.lookAt(target);
-                cameraTemp.updateMatrix();
-                cameraTemp.updateMatrixWorld();
-                //对镜头的bound
-                var inv = cameraTemp.matrixWorldInverse;
+                
+                let scale; 
+                
+                if(o.dontChangeCamDir){
+                    var inv = camera.matrixWorldInverse;
+                }else {
+                    var cameraTemp = camera.clone();
+                    cameraTemp.position.copy(cameraPos);  
+                    cameraTemp.lookAt(target);
+                    cameraTemp.updateMatrix();
+                    cameraTemp.updateMatrixWorld();
+                    //对镜头的bound
+                    var inv = cameraTemp.matrixWorldInverse;
+                } 
                 var bound = new Box3();  
                 if(points){//使用points得到的bound更小  //如果points和boundingbox的差别较大,尤其使target和points中心不一致,那么points不一定会刚好在boundingbox内
                     points.forEach(e=>{
                         var p = e.clone().applyMatrix4(inv);
                         bound.expandByPoint(p);
-                    }); 
-                }else {
+                    });
+                    scale = 1.3;                
+                }else { 
                     bound = boundingBox.applyMatrix4(inv);
+                    scale = 0.9; 
                 }
                 let boundSize = bound.getSize(new Vector3);
                 
-                
-                
-                 
-                
-                if(!this.boundBox){//调试
-                    this.boundBox = new Mesh(new BoxGeometry(1,1,1,1));
-                    this.boundBox.material.wireframe = true;
-                    this.boundBox.up.set(0,0,1);
-                    viewer.updateVisible(this.boundBox, 'hidden', false);//打开以检查box 
-                    this.setObjectLayers(this.boundBox,'sceneObjects');
-                    this.scene.scene.add(this.boundBox); 
-                }
                  
-               
-                this.boundBox.position.copy(target);
-                this.boundBox.scale.copy(boundSize);
-                this.boundBox.lookAt(cameraPos);
-                
-                
                 {
-                    let scale = 1.1; //稍微放大一些,不然会靠到屏幕边缘
-                    boundSize.x *= scale; 
-                    boundSize.y *= scale; 
-                    
+                    boundSize.x *= scale; //稍微放大一些,不然会靠到屏幕边缘
+                    boundSize.y *= scale;  
                 }
                 
                 let aspect = boundSize.x / boundSize.y;
@@ -129241,11 +129229,32 @@ ENDSEC
                 //三个顶点以上的由于measure的中心不等于bound的中心,所以点会超出bound外。 且由于视椎近大远小,即使是两个点的,bound居中后线看上去仍旧不居中.
                  
                 //获得相机最佳位置
-                let dir = new Vector3().subVectors(cameraPos, target).normalize();
+                let dir; 
+                if(o.dontChangeCamDir){
+                    dir = viewer.mainViewport.view.direction.negate();
+                }else {
+                    dir = new Vector3().subVectors(cameraPos, target).normalize();  
+                }
                 if(o.dontLookUp && dir.z < 0){
                      dir.negate();
                 }
                 position.copy(target).add(dir.multiplyScalar(dis)); 
+                
+                
+                if(false){//打开以检查box 
+                    if(!this.boundBox){//调试
+                        this.boundBox = new Mesh(new BoxGeometry(1,1,1,1));
+                        this.boundBox.material.wireframe = true;
+                        this.boundBox.up.set(0,0,1);
+                        //viewer.updateVisible(this.boundBox, 'hidden', true)//打开以检查box 
+                        this.setObjectLayers(this.boundBox,'sceneObjects');
+                        this.scene.scene.add(this.boundBox); 
+                    } 
+                    this.boundBox.position.copy(target);
+                    this.boundBox.scale.copy(boundSize);
+                    this.boundBox.lookAt(position); 
+                }
+                
                 return position
             }; 
             
@@ -129465,6 +129474,10 @@ ENDSEC
                     }
                     return {promise:deferred.promise() }
                     //出现过到达位置后测量线标签闪烁的情况
+                }else {
+                   /*  if(o.dontChangeCamDir){
+                    target = null
+    } */
                 }
                 
             }

File diff suppressed because it is too large
+ 1 - 1
public/lib/potree/potree.js.map


+ 27 - 15
src/sdk/cover/index.js

@@ -61,6 +61,7 @@ export const enter = (dom, isLocal) => {
     let getMeasureFunction = function (measure, bus) {
           
         measure.addEventListener('highlight',(e)=>{
+            console.log('3d->2d highlight',e.state)
             bus.emit('highlight', e.state)
         })
         measure.addEventListener('marker_dropped',(e)=>{//拖拽结束后发送changeCallBack
@@ -137,6 +138,7 @@ export const enter = (dom, isLocal) => {
             
              
             changeSelect(isHight){
+                console.log('2d->3d isHight ',isHight)
                 measure.setSelected(isHight, 'byList')
             },
 
@@ -651,21 +653,19 @@ export const enter = (dom, isLocal) => {
                     model.dispatchEvent('transformChanged') //改了position
                 },
                 changePosition(pos){//校准取消时执行
-                    if(MergeEditor.selected == model){
-                        console.log('pos',pos.x, pos.y, pos.z)
-                    }
-                    
+                    //if(MergeEditor.selected == model){
+                        //console.log('pos',pos.x, pos.y, pos.z)
+                    //} 
                     model && model.position.copy(pos)
-                    model.dispatchEvent({type:'transformChanged'}) 
+                    model.dispatchEvent({type:'position_changed'}) 
                 }, 
-                changeRotation(rot){//校准取消时执行
-                
-                    if(MergeEditor.selected == model){
-                        console.log('rot', rot.x, rot.y, rot.z)
-                    }
-                
-                    model && model.rotation.setFromVector3(rot)
-                    model.dispatchEvent({type:'transformChanged'}) //通知measure
+                changeRotation(rot){//校准取消时执行 
+                    //if(MergeEditor.selected == model){
+                        //console.log('rot', rot.x, rot.y, rot.z)
+                    //}
+                 
+                    model && model.rotation.setFromVector3(rot) 
+                    model.dispatchEvent({type:'rotation_changed'})  
                 },
                 
                 enterRotateMode(){
@@ -701,7 +701,7 @@ export const enter = (dom, isLocal) => {
                 enterAlignment(){//开始校准
                     MergeEditor.enterSplit()
                     result.leaveTransform()
-                    console.log('enterAlignment',model.position, model.rotation)
+                    //console.log('enterAlignment',model.position, model.rotation)
                     let bus = new mitt()
                     
                     return { 
@@ -709,7 +709,7 @@ export const enter = (dom, isLocal) => {
                     } 
                 },
                 leaveAlignment(){
-                    console.log('leaveAlignment',model.position, model.rotation)
+                    //console.log('leaveAlignment',model.position, model.rotation)
                     MergeEditor.leaveSplit() 
                 },
                 
@@ -890,6 +890,18 @@ export const enter = (dom, isLocal) => {
             
             let result = {
                 bus,
+                setPositions(dataset_points, points_datasets){//用于恢复measure的点,不会修改点的个数
+                    measure.dataset_points = dataset_points.map(e=>{
+                        return e && new THREE.Vector3().copy(e) 
+                    })
+                    measure.points_datasets = points_datasets
+                    measure.points = measure.dataset_points.map((p,i)=>{
+                        return Potree.Utils.datasetPosTransform({fromDataset:true, datasetId:measure.points_datasets[i], position: p})
+                    })
+                    measure.getPoint2dInfo(measure.points)
+                    measure.update({ifUpdateMarkers:true}) 
+                    measure.setSelected(false)//隐藏edgelabel    
+                },
                 ...getMeasureFunction(measure, bus),
             }
             return result