xzw 3 роки тому
батько
коміт
6285c50356
3 змінених файлів з 110 додано та 35 видалено
  1. 79 27
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 30 7
      src/sdk/cover/index.js

+ 79 - 27
public/lib/potree/potree.js

@@ -63666,7 +63666,7 @@ void main() {
         viewer.setFOV(config$1.view.fov); 
         viewer.loadSettingsFromURL(); 
         { 
-            viewer.mainViewport.view.position.set(100,100,200);
+            viewer.mainViewport.view.position.set(30,30,30);
             viewer.mainViewport.view.lookAt(0,0,0);
             
             viewer.updateModelBound();//init
@@ -63788,11 +63788,11 @@ void main() {
         
         let modelType,  modelEditing, MergeEditor = viewer.modules.MergeEditor;
         Potree.addModel = function(prop, done, onProgress, onError){ //加载模型
-            let isFirstLoad = prop.bottom == void 0;//在编辑时用户添加的
+             
         
             let loadDone = (model)=>{ 
                  
-                if(isFirstLoad){
+                if(prop.isFirstLoad){
                     modelEditing = model;
                     MergeEditor.setModelBtmHeight(model, 0); //默认离地高度为0
                     viewer.addEventListener('global_mousemove', moveModel); 
@@ -84035,6 +84035,7 @@ void main() {
                                         pointclouds = PanoEditor.selectedClouds;
                                     }  
                                 }else {
+                                    PanoEditor.dispatchEvent('needToDisConnect');
                                     console.warn('选中的漫游点连通了整个数据集,不允许移动');
                                 } 
                             }
@@ -84510,7 +84511,7 @@ void main() {
                     }
                 }
             
-                if(this.canMovePos(this.currentViewport) ){
+                if(this.canMovePos(this.currentViewport) && !this.lockKey){
                     if(this.lockElevation){
                         let dir = view.direction;
                         dir.z = 0;
@@ -115154,7 +115155,7 @@ ENDSEC
                     else this.selectModel(this.selected, false, ifFocus, by2d);
                 }
                 this.selected = model;
-                ifFocus && MergeEditor.focusOnSelect(model);     //通过在场景里点击模型的话,不focus
+                ifFocus && MergeEditor.focusOn(model);     //通过在场景里点击模型的话,不focus
                 viewer.outlinePass.selectedObjects = [model];
                 
                 if(model.isPointcloud){
@@ -115179,7 +115180,7 @@ ENDSEC
         },
         
         
-        /* focusOnSelect(object, duration = 400){  
+        /* focusOn(object, duration = 400){  
             let boundingBox = object.boundingBox.clone().applyMatrix4(object.matrixWorld)
             let center = boundingBox.getCenter(new THREE.Vector3)
             let size = boundingBox.getSize(new THREE.Vector3) 
@@ -115199,8 +115200,14 @@ ENDSEC
             })  //setView can cancel bump
              
         }, */
-        focusOnSelect(object, duration = 400){  
-            let boundingBox = object.boundingBox.clone().applyMatrix4(object.matrixWorld);
+        focusOn(objects, duration = 400){  
+            if(!(objects instanceof Array)){
+                objects = [objects];
+            }
+            let boundingBox = new Box3;
+            objects.forEach(object=>{
+                boundingBox.union(object.boundingBox.clone().applyMatrix4(object.matrixWorld));
+            }); 
             viewer.focusOnObject({boundingBox}, 'boundingBox', duration  );  
              
         },
@@ -119034,7 +119041,7 @@ ENDSEC
             
             
             
-            if(name == 'mainView'){
+            if(name == 'mainView'){ 
                 viewer.mainViewport.alignment =  null;
                 viewer.scene.pointclouds.forEach(e=>{
                     e.material.activeAttributeName = 'rgba'; 
@@ -119066,6 +119073,9 @@ ENDSEC
                     }
                     
                 }
+                
+                viewer.fpControls.lockKey = false;
+                
             }else {
                 if(prop.openCount == 0){//只需执行一次
                     this.viewportFitBound(name,  boundSize, center);
@@ -119092,7 +119102,8 @@ ENDSEC
                 if(name == 'right'){
                     viewer.mainViewport.alignment = {translate:true, rotateSide:true}; 
                 }
-                
+                viewer.fpControls.lockKey = true;
+                 
             } 
             
             this.setZoomInState(false); //取消放大模式
@@ -119385,9 +119396,16 @@ ENDSEC
             
             let old = this.operation;
             this.operation = state ? name : null;
-            if(this.selectedLine){
-                this.selectedLine.dispatchEvent('click');//删除 
-            } 
+            
+            if(this.operation == 'removeLink'){
+                if(this.selectedLine){
+                    this.selectedLine.dispatchEvent('click');//删除 
+                } 
+                if(this.selectedPano){
+                    this.selectedPano.circle.dispatchEvent('click');//删除 
+                }
+            }
+            
             if(this.operation != 'addLink'){
                 this.linkGuideLine.visible = false;
             }
@@ -119430,25 +119448,30 @@ ENDSEC
          
         
          
-        groupChange(pano0, pano1, type){//修改group
+        groupChange(pano0, pano1, type){//修改group (type == 'remove'时,pano1可以为空)
             if(type == 'add'){
                 Common.pushToGroupAuto([pano0, pano1], this.panoGroup  );
             }else { 
-                let atGroup = this.panoGroup.find(e=>e.includes(pano0) && e.includes(pano1));//所在组
+                let atGroup = this.panoGroup.find(e=>e.includes(pano0) && (e.includes(pano1) || !pano1));//所在组
                 
                 if(!atGroup){
-                    return console.log('这两个pano原本就不在一个组', pano0.id, pano1.id)
+                    if(pano1){
+                        console.log('这两个pano原本就不在一个组', pano0.id, pano1.id);
+                    }else {
+                        console.log('pano0不在任何组', pano0);
+                    }
+                    return 
                 }
                 
                 //断开连接时,因为组内没有其他成员的连接信息,所以需要清除整组,并将剩余的一个个重新连接
                 this.panoGroup.splice(this.panoGroup.indexOf(atGroup),1); //删除
                 
                 
-                atGroup.forEach(pano=>{//然后再重新生成这两个和组的关系,各分组
+                atGroup.forEach(pano=>{//然后再重新生成这两个和组的关系,各分组
                     if(pano == pano0 || pano == pano1)return
-                    for(let i in this.panoLink[pano.id]){
-                        if(this.panoLink[pano.id][i]){
-                            let pano_ = images360.getPano(i);
+                    for(let id in this.panoLink[pano.id]){
+                        if(this.panoLink[pano.id][id]){
+                            let pano_ = images360.getPano(id);
                             Common.pushToGroupAuto([pano, pano_], this.panoGroup  );
                         } 
                     } 
@@ -119459,16 +119482,38 @@ ENDSEC
             }
         } 
         
-        linkChange(pano0, pano1, type){//修改link
+        linkChange(pano0, pano1, type){//修改link  (type == 'remove'时,pano1可以为空)
+            
         
+            let temp = [];
+            
             if(type == 'add'){
+                if(!pano1)return console.error('不支持add时pano1为空')
                 this.panoLink[pano0.id][pano1.id] = this.panoLink[pano0.id][pano1.id] || {};
                 this.panoLink[pano1.id][pano0.id] = this.panoLink[pano1.id][pano0.id] || {};
+            }else {  
+                if(!pano1){
+                    for(let id in this.panoLink[pano0.id]){
+                        if(this.panoLink[pano0.id][id]){
+                            this.panoLink[id][pano0.id] = false;
+                            temp.push(id);
+                        }
+                    }
+                    this.panoLink[pano0.id] = {}; //全部断连
+                }else {
+                    this.panoLink[pano0.id][pano1.id] = false;
+                    this.panoLink[pano1.id][pano0.id] = false; 
+                }
+            }
+            
+            if(!pano1){ //全部断连
+                temp.forEach(id=>{
+                    this.lineChange(pano0, images360.getPano(id) , type);
+                }); 
             }else {
-                this.panoLink[pano0.id][pano1.id] = false;
-                this.panoLink[pano1.id][pano0.id] = false; 
+                this.lineChange(pano0, pano1, type);  
             }
-            this.lineChange(pano0, pano1, type); 
+            
             this.groupChange(pano0, pano1, type);
             
             //this.updateSelectGroup()
@@ -119614,7 +119659,12 @@ ENDSEC
                     this.hoverPano(pano,false); 
                 });
                 circle.addEventListener('click', ()=>{ 
-                    if(this.activeViewName == 'mainView')return
+                    //if(this.activeViewName == 'mainView')return
+                    
+                    if(this.operation == 'removeLink'){ 
+                        this.linkChange(pano, null, 'remove');  //删除所有连接
+                    } 
+                    
                     if(this.selectedPano == circle.pano) return this.selectPano(null)
                     if(this.operation == 'addLink' && this.selectedPano){
                         this.linkChange(this.selectedPano, circle.pano, 'add');
@@ -119625,7 +119675,9 @@ ENDSEC
                     //    this.linkChange(this.selectedPano, circle.pano, 'remove')
                     //    //this.setLinkOperateState('removeLink',false)
                     //    return
-                    // }  
+                    // } 
+                    
+                    
                     this.selectPano(circle.pano);
                 });
                 
@@ -119646,7 +119698,7 @@ ENDSEC
                 pano.hovered = true;  
                 
                  
-                if(this.activeViewName == 'mainView' || Alignment$1.handleState && this.selectedPano && this.selectedPano == pano)return
+                if(/* this.activeViewName == 'mainView' ||  */Alignment$1.handleState && this.selectedPano && this.selectedPano == pano)return
                   
                 if(this.operation != 'addLink' || !this.selectedPano || this.selectedPano == pano){ // this.selectedPano == pano?
                     viewer.dispatchEvent({

Різницю між файлами не показано, бо вона завелика
+ 1 - 1
public/lib/potree/potree.js.map


+ 30 - 7
src/sdk/cover/index.js

@@ -24,7 +24,10 @@ export const enter = (dom) => {
     
     window.THREE = THREE
      
-  
+    let autoLoads = [] 
+    let autoLoads2 = []
+    
+    
     let sdk = {
         sceneBus,
         getPositionByScreen(pos2d, mustModelId ){//通过屏幕坐标获取真实坐标 . mustModelId: 如果指定了模型,modelId必须为mustModelId才有效
@@ -318,8 +321,27 @@ export const enter = (dom) => {
         addModel(props){ 
             let bus = mitt()  
             console.log('addModel',props)
+            props.isFirstLoad = props.bottom == void 0 //在编辑时用户添加的
             if(props.opacity == void 0)  props.opacity = 1
             
+            
+            if(!props.isFirstLoad){
+                autoLoads.push(props) 
+            }
+            let spliceFromArr = (model,loaded)=>{
+                let index = autoLoads.indexOf(props)
+                if(index>-1){
+                    autoLoads.splice(index,1)
+                    if(loaded){
+                        autoLoads2.push(model)
+                    }
+                      
+                    if(autoLoads.length == 0){//设置相机位置:当自动开始加载第一个模型时(其余的也跟着自动加载),等这批加载完后;  
+                        MergeEditor.focusOn(autoLoads2, 1000)
+                    }
+                } 
+            }
+            
             let model
             let done = (model_)=>{
                 model = model_
@@ -335,10 +357,10 @@ export const enter = (dom) => {
                         rotation: model.rotation.clone(),
                         bottom: model.btmHeight
                     })
-                })
-                
-                
+                }) 
+                spliceFromArr(model,true)
                 bus.emit('loadDone')
+                
                 //console.log('loadDone' )
             }
             let progressFun = (progress)=>{
@@ -347,16 +369,17 @@ export const enter = (dom) => {
             
             let onError = function ( xhr ) {
                 bus.emit('loadError', xhr)
-                console.log('loadError!!!!!!!!!',  props.url)
+                spliceFromArr(model,false)
+                console.log('loadError!!!!!!!!!',  props.url) 
             }
             
             if(props.type == "glb"){////////////////////////////test
                 if(props.url.includes('coffeemat')){
-                    //props.url = '/lib/potree/resources/models/glb/coffeemat.glb' 
+                    props.url = '/lib/potree/resources/models/glb/coffeemat.glb' 
                                      
                 }
                 
-                props.url = 'http://localhost:5173/api/profile/datav1/1537680519838306304/data/glb/cloud_glb_24.glb'   
+                //props.url = 'http://localhost:5173/api/profile/datav1/1537680519838306304/data/glb/cloud_glb_24.glb'   
             }