Parcourir la source

Merge remote-tracking branch 'origin/dev' into dev

bill il y a 2 ans
Parent
commit
c0a7f5d09f
3 fichiers modifiés avec 97 ajouts et 17 suppressions
  1. 64 14
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 32 2
      src/sdk/cover/index.js

+ 64 - 14
public/lib/potree/potree.js

@@ -53704,7 +53704,13 @@
 	        
 	    }, 
 	        
-	    
+	    getRootWindow(){
+	        let win = window;
+	        while(win.parent!=win){
+	            win = win.parent;
+	        }
+	        return win
+	    },
 	    
 	    
 	};  
@@ -90834,7 +90840,7 @@ void main()
 	        this.domElement.addEventListener('keydown', this.onKeyDown.bind(this));
 			window.addEventListener('keyup', this.onKeyUp.bind(this));
 	        
-	        //window.addEventListener('focus',()=>{
+	        
 	        window.addEventListener('blur',this.onKeyUp.bind(this)); //add
 	            
 	             
@@ -129676,14 +129682,18 @@ ENDSEC
 
 
 
-	function getGpuMemoryUsage(){//总的
+	function getGpuMemoryUsage(win = window){//总的
 	    let c = 0;
 	    viewer.objs.children.filter(e=>{
 	        if(e.fileType == '3dTiles'){
 	            let tileset3D = e.runtime.getTileset();
 	            c += tileset3D.gpuMemoryUsageInBytes;
 	        }
-	    });  
+	    });
+	    
+	    if(win.parent != win){//还有父级页面。 暂时只有子级需要考虑父级,假设父级在前台时子级已经销毁
+	        c += getGpuMemoryUsage(win.parent);
+	    } 
 	    return  c
 	}
 
@@ -138904,7 +138914,7 @@ ENDSEC
 	  }
 
 	  get isVisibleAndInRequestVolume() {
-	    return  /* this._visible &&  */this._inRequestVolume; //用_updateBoundingVolume这个算的在相机靠近时不准确,容易缺块
+	    return  /* this._visible &&  */this.tileset.visible && this._inRequestVolume; //用_updateBoundingVolume这个算的在相机靠近时不准确,容易缺块
 	  }
 
 	  get hasRenderContent() {
@@ -138977,8 +138987,7 @@ ENDSEC
 	    const rootScreenSpaceError = traverser.root ? traverser.root._screenSpaceError : 0.0;
 	    let v = Math.max(rootScreenSpaceError - screenSpaceError, 0);
 	    if(!this._visible){
-	        v = THREE.Math.clamp(v * 0.1,  -0.9, 100);//xzw add
-	        console.log('v',v);
+	        v = THREE.Math.clamp(v * 0.1,  -0.9, 100);//xzw add  因为this._visible我也令其显示所以这里降低这些的优先级
 	    }
 	    return v
 	  }
@@ -139569,6 +139578,10 @@ ENDSEC
 	    _defineProperty(this, "frameStateData", void 0);
 
 	    _defineProperty(this, "maximumMemoryUsage", void 0);
+	    
+	    
+	    _defineProperty(this, "visible", true);//add
+	    
 
 	    assert$7(json);
 	    this.options = { ...DEFAULT_PROPS,
@@ -147622,7 +147635,7 @@ ENDSEC
 	lastRootTransform  rootTransformInverse
 
 	tileset._loadTiles 依次加载tiles
-	request.priority = request.getPriority(request.handle);  加载优先级 
+	_getPriority 加载优先级 加了一句
 
 
 	笔记:
@@ -150501,11 +150514,19 @@ ENDSEC
 
 	let mapArea; 
 	let shelterHistory = []; 
-	Potree.isIframeChild = window.parent!=window;  //子页面
-
-
 
 
+	Potree.isIframeChild = window.parent!=window;  //子页面
+	if(Potree.isIframeChild){ 
+	    let rootWin = Common$1.getRootWindow(); 
+	    rootWin.viewer.dispatchEvent({type:'createIframe', window}); //给祖先页面发送信息
+	} 
+	window.addEventListener('focus',()=>{
+	    console.log('focus',window.winIndex);
+	});
+	window.addEventListener('blur',()=>{
+	    console.log('blur',window.winIndex);
+	});
 
 	class Viewer extends ViewerBase{
 		
@@ -151183,6 +151204,21 @@ ENDSEC
 	            
 	        } 
 	        
+	        
+	        if(!Potree.isIframeChild){
+	            window.winIndex = 0;
+	            let index = 1;
+	            this.addEventListener('createIframe',(e)=>{//创建了子页面
+	                let child = e.window;
+	                child.winIndex = index ++;
+	                
+	                
+	            }); 
+	            //不知道删除iframe时是否那些模型还在内存里,需要释放吗? 如果要需要加一个事件
+	        }
+	        
+	        
+	        
 	        /* {
 	            let setInteract = ()=>{
 	                this.interacted = true //标记这一帧用户有操作屏幕
@@ -155222,9 +155258,8 @@ ENDSEC
 	            });
 	            console.log(result);
 	            result.model.runtime = result.runtime;
-	            loadDone(result.model/* , null, fileInfo.url */);  
-	              
-
+	            loadDone(result.model/* , null, fileInfo.url */); 
+	 
 	               
 	            let loaded = false;
 	            let tileset = result.runtime.getTileset();
@@ -155238,6 +155273,21 @@ ENDSEC
 	                let opacity = result.model.opacity;
 	                MergeEditor.changeOpacity(e.tileContent,opacity); 
 	            });
+	            
+	            {
+	                let vi = true;
+	                Object.defineProperty( result.model, "visible", {
+	                    get: function() {
+	                        return vi
+	                    },
+	                    set: function(v) {
+	                        vi = v; 
+	                        tileset.visible = v;  //同步,使不加载
+	                    }
+	                });  
+	            }
+	            
+	            
 	        }
 	        
 	         

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


+ 32 - 2
src/sdk/cover/index.js

@@ -14,8 +14,7 @@ export const enter = (dom, isLocal) => {
         Potree.settings.webSite = 'datav1' 
     }
     
-    
-    
+     
     
     const tagLimitDis = 8;
 
@@ -38,6 +37,37 @@ export const enter = (dom, isLocal) => {
         sceneBus.emit('webglError', { msg: e.msg })
     })
     
+    
+    
+    if(!Potree.isIframeChild){
+        
+        viewer.addEventListener('createIframe',(e)=>{//创建了子页面
+            let child = e.window;
+            //案件里视图提取页面子页面覆盖了父级页面,父级的模型可以隐藏
+            console.log('createIframe', child.winIndex)
+            viewer.objs.children.forEach(e=>{
+                if(e.fileType == '3dTiles'){
+                    let tileset = e.runtime.getTileset()
+                    Potree.Utils.updateVisible(e, 'createIframe', false)
+                    tileset._cache.trim(); //使下一次update时dispose所有不可见的tiles
+                    e.runtime.update(16, viewer.renderer, viewer.mainViewport.camera, true)
+                    viewer.dispatchEvent('content_changed')
+                }
+            })
+            
+        }) 
+        //不知道删除iframe时是否那些模型还在内存里,需要释放吗? 如果要需要加一个事件
+    }else{
+        window.beforeDestroy = function(){
+            console.log('window.beforeDestroy', window.winIndex)
+           /*  Common.getRootWindow().
+            Potree.Utils.updateVisible(e, 'createIframe', false)
+                      
+                      viewer.dispatchEvent('content_changed') */
+        }
+    }
+    
+    
     window.THREE = THREE
     //isLocal = false 
     let autoLoads = []