xzw 2 gadi atpakaļ
vecāks
revīzija
59c83f5ea7

+ 3 - 1
src/ExtendPointCloudOctree.js

@@ -122,6 +122,8 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
         
         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'
@@ -528,7 +530,7 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
             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

+ 29 - 15
src/custom/utils/Common.js

@@ -266,44 +266,58 @@ var Common = {
     
     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. 

+ 33 - 28
src/custom/viewer/ViewerNew.js

@@ -650,23 +650,29 @@ export class Viewer extends ViewerBase{
         
         {  
             let updated, zoomLevel
-            this.addEventListener('camera_changed', e => {
-                
-                if(e.viewport == this.mainViewport && (e.changeInfo.positionChanged || zoomLevel != this.images360.zoomLevel)){ 
-                    zoomLevel = this.images360.zoomLevel  //对updateMarkerVisibles有影响
+            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.intervalTool.isWaiting('updateMarkerVisibles', ()=>{  
+                        Common. 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()
@@ -900,28 +906,25 @@ export class Viewer extends ViewerBase{
     }
     
     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.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.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.intervalTool.isWaiting('atWhichDataset', fun , 300)  
         
@@ -1081,13 +1084,15 @@ export class Viewer extends ViewerBase{
      
     //促使点云加载出最高级别        
     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.intervalTool.isWaiting('testPointcloudsMaxLevel', ()=>{  
+            camera = e.camera || this.scene.getActiveCamera()
+            
+            Common.intervalTool.isWaiting('testPointcloudsMaxLevel', ()=>{   
                 if(!camera_changed && count>50 || Potree.settings.displayMode == 'showPanos'  )return //只有当camera_changed后才继续循环, 除了最开始几次需要连续加载下
+                  
                 camera_changed = false
                 count ++;
                 //console.log('testPointcloudsMaxLevel中',count)

+ 1 - 2
src/navigation/InputHandlerNew.js

@@ -818,8 +818,7 @@ export class InputHandler extends THREE.EventDispatcher {
                 
             );
             
-       console.log('intersectPoint', intersectPoint)     
-            
+        
             //恢复
             if(prop.pos3d){
                 viewport.view.applyToCamera(camera)

+ 8 - 2
src/viewer/NavigationCube.js

@@ -792,7 +792,7 @@ class NavCubeViewer extends ViewerBase{
                 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)
@@ -892,11 +892,17 @@ class NavCubeViewer extends ViewerBase{
         
         
         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)
         }