Parcourir la source

fix: 加速加载、 cube转不动的bug

xzw il y a 2 ans
Parent
commit
421b27d161
2 fichiers modifiés avec 74 ajouts et 47 suppressions
  1. 73 46
      public/static/lib/potree/potree.js
  2. 1 1
      public/static/lib/potree/potree.js.map

+ 73 - 46
public/static/lib/potree/potree.js

@@ -53538,44 +53538,58 @@
 	    
 	    intervalTool:{  //延时update,防止卡顿
 	        list:[],
-	        
-	        /* isWaiting:function(name, func, delayTime){
-	            if(!this.list.includes(name)){  //如果没有该项, 则开始判断
-	                var needWait = func(); //触发了改变,则等待一段时间后再自动判断
-	                if(needWait){
-	                    this.list.push(name);
-	                    setTimeout(()=>{
-	                        var a = this.list.indexOf(name);
+	         
+	        /* isWaiting:function(name, func, delayTime ){   
+	            let item = this.list.find(e=>e.name == name)
+	            if(!item){  //如果没有该项, 则加入循环
+	                let ifContinue = func() 
+	                item = {name} 
+	                this.list.push(item);
+	                    setTimeout(()=>{ 
+	                        var a = this.list.indexOf(item);
 	                        this.list.splice(a,1);
-	                        this.isWaiting(name, func, delayTime) //循环
+	                        if(item.requestUpdate || ifContinue )  this.isWaiting(name, func, delayTime) //循环
 	                    },delayTime)
-	                } 
+	                 
+	            }else{//如果有该项,说明现在请求下一次继续更新
+	                //if(delayTime == 0){//想立刻更新一次
+	                //    func()
+	                //}else{  
+	                    item.requestUpdate = true
+	                //}
+	                
 	            }
 	        }, */
 	        
 	        
-	        
 	        isWaiting:function(name, func, delayTime/* , autoCycle */){   
 	            let item = this.list.find(e=>e.name == name);
 	            if(!item){  //如果没有该项, 则加入循环
 	                let ifContinue = func(); 
-	                item = {name}; 
+	                item = {name, func, delayTime}; 
 	                this.list.push(item);
 	                    setTimeout(()=>{ 
 	                        var a = this.list.indexOf(item);
 	                        this.list.splice(a,1);
+	                        let {func, delayTime} = item; 
 	                        if(item.requestUpdate || ifContinue )  this.isWaiting(name, func, delayTime); //循环
 	                    },delayTime);
 	                 
 	            }else {//如果有该项,说明现在请求下一次继续更新
-	                /* if(delayTime == 0){//想立刻更新一次
-	                    func()
-	                }else{ */
+	                //if(delayTime == 0){//想立刻更新一次
+	                //    func()
+	                //}else{ 
+	                    //更新属性  
+	                    item.func = func;
+	                    item.delayTime = delayTime;
 	                    item.requestUpdate = true;
+	                     
+	                     
 	                //}
 	                
 	            }
 	        },
+	        
 	    }
 	    ,
 	    pushToGroupAuto : function(items, groups, recognizeFunction){//自动分组。 items是将分到一起的组合。items.length = 1 or 2. 
@@ -76056,6 +76070,8 @@ void main()
 	        
 	        this.testMaxNodeCount ++;
 	        viewer.testMaxNodeCount ++;
+	        //console.log('testMaxNodeCount', this.testMaxNodeCount) 
+	        
 	        if(this.testMaxNodeCount > 100){
 	            console.log('testMaxNodeLevel次数超出,强制结束:',this.dataset_id,  this.nodeMaxLevel,  this.nodeMaxLevelPredict.min); 
 	            this.testMaxNodeLevelDone = 'moreThanMaxCount';
@@ -76462,7 +76478,7 @@ void main()
 	            num_ = Math.pow(num_, 1.05) * 6; 
 	             
 	            
-	            nodeMaxLevel = viewer.testMaxNodeCount > Potree.config.testNodeCount1 ? this.nodeMaxLevel : this.nodeMaxLevelPredict.max; //防止刚开始因nodeMaxLevel没涨完,导致过大的点云突然出现
+	            nodeMaxLevel = this.testMaxNodeCount > Potree.config.testNodeCount1 ? this.nodeMaxLevel : this.nodeMaxLevelPredict.max; //防止刚开始因nodeMaxLevel没涨完,导致过大的点云突然出现
 	            
 	            if(sizeFitToLevel || Potree.settings.sizeFitToLevel){//按照点云质量来调整的版本:    近似将pointSizeType换成ADAPTIVE
 	                let str = this.temp.pointSize+':'+this.maxLevel+':'+ nodeMaxLevel;
@@ -91820,7 +91836,7 @@ void main()
 	                viewer.mainViewport.camera = viewer.scene.cameraO; //先设置为cameraO, 才能计算top
 	                viewer.setCameraMode(CameraMode.ORTHOGRAPHIC); //updateScreenSize set cameraO.top
 	                
-	                navCubeViewer.controls.setEnable(false);
+	                this.controls.setEnable(false);
 	                 
 	                //假设保持到目前中心的视角范围不变
 	                this.splitScreen.setShiftTarget(viewer.mainViewport, viewer.bound.center);
@@ -91920,11 +91936,17 @@ void main()
 	        
 	        
 	        if(startCamera){ 
+	            if(endCamera == viewer.scene.cameraO){
+	                this.controls.setEnable(false);
+	            }
+	            this.controls.setEnable(false);
 	            view.tranCamera(viewer.mainViewport,  { position:viewInfo.position,
 	                endPitch: viewInfo.pitch, endYaw: viewInfo.yaw ,   
 	                startCamera,   endCamera,   midCamera:viewer.scene.cameraBasic ,            
 	                callback:()=>{ 
-	                   
+	                    if(endCamera != viewer.scene.cameraO){
+	                        this.controls.setEnable(true);
+	                    }
 	                }, 
 	            }, 500);
 	        } 
@@ -136456,23 +136478,29 @@ ENDSEC
 	        
 	        {  
 	            let updated, zoomLevel;
-	            this.addEventListener('camera_changed', e => {
-	                
-	                if(e.viewport == this.mainViewport && (e.changeInfo.positionChanged || zoomLevel != this.images360.zoomLevel)){ 
+	            let update = (e)=>{ 
+	                if(e.type == 'updateModelBound' || e.viewport == this.mainViewport && (e.changeInfo.positionChanged || zoomLevel != this.images360.zoomLevel)){ 
 	                    zoomLevel = this.images360.zoomLevel;  //对updateMarkerVisibles有影响
 	                    //e.changeInfo.positionChanged && shelterHistory.clear() //清空
-	                    e.changeInfo.positionChanged && this.updateDatasetAt();  //更新所在数据集  
+	                    (e.type == 'updateModelBound' || e.changeInfo.positionChanged) && this.updateDatasetAt();  //更新所在数据集  
 	                    
 	                    if(Potree.settings.ifShowMarker && Potree.settings.editType != 'merge'){
 	                       
-	                        Common$1.intervalTool.isWaiting('updateMarkerVisibles', ()=>{  
+	                        Common$1. intervalTool.isWaiting('updateMarkerVisibles', ()=>{  
 	                            if(!this.mainViewport.view.isFlying() ){ 
 	                                this.updateMarkerVisibles();  
 	                            }    
 	                        },500);
 	                    }
 	                }
-	            });
+	                
+	            };
+	            this.addEventListener('camera_changed', update); 
+	            this.addEventListener('updateModelBound', update);
+	            
+	            
+	            
+	            
 	            this.addEventListener('showMarkerChanged',()=>{
 	                this.updatePanosVisibles(this.modules.SiteModel.currentFloor);
 	                this.updateMarkerVisibles();
@@ -136706,28 +136734,25 @@ ENDSEC
 	    }
 	    
 	    updateDatasetAt(force){//更新所在数据集
-	    
+	        
 	        let fun = ()=>{   
 	            let currPos = viewer.mainViewport.view.position;
-	         
-	            //if(force || !currPos.equals(this.lastPos)){
-	                //this.lastPos.copy(currPos)
-	                
-	                var at = this.scene.pointclouds.filter(e=>
-	                    (e.visible || e.unvisibleReasons && e.unvisibleReasons.length == 1 && e.unvisibleReasons[0].reason == 'displayMode')
-	                    && e.ifContainsPoint(currPos)
-	                ); 
-	                
-	                if(Common$1.getDifferenceSet(at, this.atDatasets).length){
-	                    //console.log('atDatasets', at) 
-	                    this.atDatasets = at;
-	                     
-	                    this.dispatchEvent({type:'pointcloudAtChange',pointclouds:at}); 
-	                }
-	                force = false; 
+	          
+	            var at = this.scene.pointclouds.filter(e=>
+	                (e.visible || e.unvisibleReasons && e.unvisibleReasons.length == 1 && e.unvisibleReasons[0].reason == 'displayMode')
+	                && e.ifContainsPoint(currPos)
+	            );  
+	            
+	            if(Common$1.getDifferenceSet(at, this.atDatasets).length){
+	                //console.log('atDatasets', at) 
+	                this.atDatasets = at;
 	                 
-	            };
-	        //}            
+	                this.dispatchEvent({type:'pointcloudAtChange',pointclouds:at}); 
+	            }
+	            force = false; 
+	             
+	        };
+	                   
 	        if(force)fun();
 	        else Common$1.intervalTool.isWaiting('atWhichDataset', fun , 300);  
 	        
@@ -136887,13 +136912,15 @@ ENDSEC
 	     
 	    //促使点云加载出最高级别        
 	    testPointcloudsMaxLevel(){ //所有点云都无需testMaxNodeLevel 就停止
-	        let camera_changed,  count = 0;
+	        let camera_changed,  count = 0, camera;
 	        let test = (e={})=>{
 	            camera_changed = true;
-	            let camera = e.camera || this.scene.getActiveCamera();
 	            
-	            Common$1.intervalTool.isWaiting('testPointcloudsMaxLevel', ()=>{  
+	            camera = e.camera || this.scene.getActiveCamera();
+	            
+	            Common$1.intervalTool.isWaiting('testPointcloudsMaxLevel', ()=>{   
 	                if(!camera_changed && count>50 || Potree.settings.displayMode == 'showPanos'  )return //只有当camera_changed后才继续循环, 除了最开始几次需要连续加载下
+	                  
 	                camera_changed = false;
 	                count ++;
 	                //console.log('testPointcloudsMaxLevel中',count)

Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
public/static/lib/potree/potree.js.map