xzw 11 months ago
parent
commit
a7dc23f187
3 changed files with 82 additions and 103 deletions
  1. 17 44
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 64 58
      src/sdk/cover/index.js

+ 17 - 44
public/lib/potree/potree.js

@@ -23443,7 +23443,7 @@
 	        'en': ["en-US"],
 	        //范围大所以不指定地理位置 。
 	        'ja': ["ja-JP", "JP"],
-	        'ko': ["ko-KR", "KR"]
+	        'kr': ["ko-KR", "KR"]
 	      }[Potree.settings.language] || [];
 	      this.baseUrl = "https://mt2.google.com/vt/lyrs=" + (style == 'satellite' ? "y" : "m") + "@159000000" + (lang ? "&hl=" + lang : '') + (glPos ? "&gl=" + glPos : '') + "&x=${x}&y=${y}&z=${z}&s=mt1";
 	      this.maxDepth = 22;
@@ -30376,43 +30376,8 @@
 	        this.cube.material.defines.depth_background = ''; //skybox的深度改得向后一些, 避免盖住chunk,造成坑坑洼洼
 
 	        this.addEventListener('endChangeMode', e => {
-	          var _this$currentPano;
-	          /* if( this.currentPano?.pointcloud?.is4dkkModel){
-	              let model = this.currentPano.pointcloud
-	              if(model.fileType == '3dTiles'){ 
-	                  viewer.setAllTilesets(model, (child)=>{
-	                      child.runtime.limit2lowestDepth(e.mode == 'showPanos')
-	                      child.runtime.getTileset().tiles.forEach(e=>{ 
-	                          this.judgeModelMat(e.tileContent)  
-	                      }) 
-	                  }) 
-	              }else{
-	                  this.judgeModelMat(model)
-	              }
-	          } */
-	          if ((_this$currentPano = this.currentPano) !== null && _this$currentPano !== void 0 && (_this$currentPano = _this$currentPano.pointcloud) !== null && _this$currentPano !== void 0 && _this$currentPano.is4dkkModel) {
-	            this.changeModelMat(this.currentPano.pointcloud);
-	          }
+	          viewer.objs.children.forEach(e => this.changeModelMat(e)); //干脆全部换,就不容易错
 	        });
-	        if (Potree.settings.canWalkThroughModel) {
-	          var lastModel;
-	          this.addEventListener('flyToPano', e => {
-	            //漫游到另一个模型就要选中这个模型
-	            var model = e.toPano.pano.pointcloud;
-	            if (model != lastModel) {
-	              this.changeModelMat(model, true); //目标模型
-	            }
-	          });
-	          this.addEventListener('flyToPanoDone', e => {
-	            //漫游到另一个模型就要选中这个模型
-	            if (!e.makeIt) return;
-	            var model = this.currentPano.pointcloud;
-	            if (model != lastModel) {
-	              this.changeModelMat(lastModel);
-	            }
-	            lastModel = model;
-	          });
-	        }
 	      }
 	    }
 	    if (Potree.settings.testCube) {
@@ -30832,28 +30797,29 @@
 	      }
 	    });
 	  }
-	  changeModelMat(model, isCurModel) {
+	  changeModelMat(model /* , isCurModel */) {
 	    if (model !== null && model !== void 0 && model.is4dkkModel) {
 	      if (model.fileType == '3dTiles') {
 	        viewer.setAllTilesets(model, child => {
 	          child.runtime.limit2lowestDepth(Potree.settings.displayMode == 'showPanos');
 	          child.runtime.getTileset().tiles.forEach(e => {
-	            this.judgeModelMat(e.tileContent, isCurModel);
+	            this.judgeModelMat(e.tileContent /* , isCurModel */);
 	          });
 	        });
 	      } else {
-	        this.judgeModelMat(model, isCurModel);
+	        this.judgeModelMat(model /* , isCurModel */);
 	      }
 	    }
 	  }
-	  judgeModelMat(object, isCurModel) {
+	  judgeModelMat(object /* , isCurModel */) {
 	    if (!(Potree.settings.mergeType2 && Potree.settings.modelSkybox)) return;
 	    object.traverse(mesh => {
 	      if (mesh.material) {
 	        if (!mesh.materialOutside) {
 	          mesh.materialOutside = mesh.material;
 	        }
-	        mesh.material = Potree.settings.displayMode == 'showPanos' && (this.currentPano.pointcloud == object || isCurModel) ? this.materialInside : mesh.materialOutside;
+	        //mesh.material = Potree.settings.displayMode == 'showPanos' && (this.nextPano?.pointcloud == object || this.currentPano.pointcloud == object || isCurModel) ? this.materialInside : mesh.materialOutside 
+	        mesh.material = Potree.settings.displayMode == 'showPanos' ? this.materialInside : mesh.materialOutside;
 	        Potree.Utils.setObjectLayers(mesh, Potree.settings.displayMode == 'showPanos' ? 'skybox' : 'model'); //为了渲染到rtEDL
 	      }
 	    });
@@ -80019,17 +79985,24 @@
 	              quaternion,
 	              duration,
 	              callback: () => {
+	                var next = () => {
+	                  var stayTime = (!sections[index - 1] || sections[index + 1] instanceof CameraAnimation$1) && sections[index + 1] && sections[index + 1] instanceof CameraAnimation$1 ? 1000 : 300; //前后都是点云模式的话停留久一点。最好在页面上能设置
+	                  setTimeout(() => {
+	                    currentPlay != void 0 && playNext(index + 1);
+	                  }, stayTime); //稍作停留,不然点云-全景-点云的话根本看不到全景
+	                };
 	                if ( /* ani.displayMode == 'showPanos' &&  */Potree.settings.displayMode != 'showPanos') {
 	                  //刚加载完就飞走吗?
 	                  Potree.settings.displayMode = 'showPanos';
 	                  viewer.images360.addEventListener('endChangeMode', () => {
-	                    currentPlay != void 0 && playNext(index + 1);
+	                    next();
 	                  }, {
 	                    once: true
 	                  });
 	                } else {
-	                  currentPlay != void 0 && playNext(index + 1);
+	                  next();
 	                }
+	                //
 	              }
 	            });
 	          }

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


+ 64 - 58
src/sdk/cover/index.js

@@ -77,18 +77,6 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
         //lonlat = [113.595236803415,22.3665168584444]//[113.600356,22.364093]
         Potree.setLonlat(lonlat[0], lonlat[1])
     }
-    if(Potree.settings.canWalkThroughModel){
-        let lastPano 
-        viewer.images360.addEventListener('flyToPano',(e)=>{//漫游到另一个模型就要选中这个模型
-            let model = e.toPano.pano.pointcloud
-            if(lastPano?.pointcloud != model && model != MergeEditor.selected){ 
-                MergeEditor.selectModel(model)
-                model.result_.flyInPano(e.toPano.pano, {dontFly:true})   //切换模型显示,因为flyInPano有事件怕乱所以统一用这个函数            
-            }
-            lastPano = e.toPano.pano
-        })
-        
-    }
     
 
     viewer.addEventListener('camera_changed', e => {
@@ -149,11 +137,67 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
         }
     })
     
+     
+    //-------------------------------------
+    let changeMeshVisi = (object, show) => {
+        if(show == void 0) show = Potree.settings.displayMode == 'showPointCloud' || object == viewer.images360.currentPano.pointcloud && Potree.settings.modelSkybox || object.showInPano  //showInPano: 装饰物,一直显示
+        Potree.Utils.updateVisible(object, 'showPanos', show)
+    }
+    
+    if(Potree.settings.canWalkThroughModel){
+        let lastModel 
+        viewer.images360.addEventListener('flyToPano',(e)=>{//开始漫游     漫游到另一个模型就要选中这个模型?
+            let model = e.toPano.pano.pointcloud
+            if(lastModel != model){  
+                changeMeshVisi(model, true)
+                //MergeEditor.selectModel(model)
+                //model.result_.flyInPano(e.toPano.pano, {dontFly:true})   //切换模型显示,因为flyInPano有事件怕乱所以统一用这个函数            
+            }
+            
+        })
+        viewer.images360.addEventListener('flyToPanoDone',(e)=>{
+            if(!e.makeIt)return
+            let model = viewer.images360.currentPano.pointcloud
+            if(lastModel != model){ 
+                lastModel?.isModel && changeMeshVisi(lastModel, false)
+            }
+            lastModel = model
+        })
+    }
+    
+    
+    
     viewer.images360.addEventListener('endChangeMode',(e)=>{
         sceneBus.emit('modeChange', e.mode == 'showPanos' ? 'pano' : 'fuse')
-    }) 
+         
+        Potree.Utils.updateVisible(MergeEditor.transformControls, 'showPanos', e.mode == 'showPointCloud')
+        Potree.Utils.updateVisible(MergeEditor.boxHelper, 'showPanos', e.mode == 'showPointCloud')
+         
+        if(e.mode == 'showPanos'){
+            viewer.setControls( viewer.fpControls )
+            viewer.removeEventListener('camera_changed', camera_changed)
+        }else{ 
+            viewer.addEventListener('camera_changed', camera_changed)
+        }
+         
+        viewer.objs.children.forEach((e)=>{changeMeshVisi(e)})
+        
+        Potree.settings.canWalkThroughModel || viewer.images360.panos.forEach(pano => {
+            pano.setEnable(e.mode == 'showPanos' ? pano.pointcloud == viewer.images360.currentPano.model : true)
+        })
+    })
     
     
+    let camera_changed = (e) => {
+        if (e.viewport.name == 'MainView' && e.changeInfo.positionChanged) {
+            //viewer.mainViewport.camera.position
+            viewer.mainViewport.view.radius = 0.1 //使pivot在面前一丢丢距离
+            viewer.setControls(viewer.orbitControls)
+            viewer.removeEventListener('camera_changed', camera_changed)
+        }
+    }
+    let requestInPano = false
+    //-------------------------------------
     /* viewer.inputHandler.addEventListener('keydown', (e)=>{
         if(e.event.key == "e" ){ 
            MergeEditor.transformControls.mode = 'rotate'
@@ -351,15 +395,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
         }
     }
 
-    let camera_changed = (e) => {
-        if (e.viewport.name == 'MainView' && e.changeInfo.positionChanged) {
-            //viewer.mainViewport.camera.position
-            viewer.mainViewport.view.radius = 0.1 //使pivot在面前一丢丢距离
-            viewer.setControls(viewer.orbitControls)
-            viewer.removeEventListener('camera_changed', camera_changed)
-        }
-    }
-    let requestInPano = false
+    
 
 
 
@@ -736,6 +772,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
             let done = (model_) => {
                 model = model_
                 model.result_ = result
+                model.props = props
                 result.model = model
                 if (!props.isFirstLoad) {
                     model.visible = false//先不显示,防止卡顿
@@ -825,29 +862,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                 flyInPano(pano, {dontFly, quaternion, duration}={}) {//  飞入全景图
                     requestInPano = model
                     pano = pano || viewer.images360.findNearestPano(null, model.panos)
-                    if (pano) {
-                        viewer.removeEventListener('camera_changed', camera_changed)
-                        Potree.settings.canWalkThroughModel || viewer.images360.panos.forEach(pano => {
-                            pano.setEnable(pano.pointcloud == model)
-                        })
-                        viewer.setControls(viewer.fpControls)
-                        //MergeEditor.transformControls.detach(model)
-                        Potree.Utils.updateVisible(MergeEditor.transformControls, 'showPanos', false)
-                        Potree.Utils.updateVisible(MergeEditor.boxHelper, 'showPanos', false)
-
-                        let changeVisi = (object) => {
-                            Potree.Utils.updateVisible(object, 'showPanos', object == model && Potree.settings.modelSkybox || object.showInPano)
-                        }
-
-                        
-                        let eventName = Potree.settings.displayMode != 'showPanos' ? 'endChangeMode' : 'flyToPanoDone'
-                        viewer.images360.addEventListener(eventName, (e) => {
-                            if (Potree.settings.displayMode == 'showPanos' && requestInPano == model) {
-                                //Potree.Utils.updateVisible(viewer.objs, 'showPanos', false) 
-                                viewer.objs.children.forEach(changeVisi)
-                            }
-                        }, { once: true })
-
+                    if (pano) {  
                         dontFly || viewer.images360.flyToPano({ pano, canCancelLast: true, quaternion, duration})
                         Potree.settings.displayMode = 'showPanos' 
                      
@@ -856,24 +871,15 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                 },
                 flyOutPano() {//  飞出全景图(就是切换到正常融合视角)
                     requestInPano = false
-                    let panoPos = viewer.images360.position.clone()
-                    //Potree.Utils.updateVisible(viewer.objs, 'showPanos', true)
-                    let changeVisi = (object) => {
-                        Potree.Utils.updateVisible(object, 'showPanos', true)
-                    }
-                    viewer.objs.children.forEach(changeVisi)
-                    Potree.settings.canWalkThroughModel || viewer.images360.panos.forEach(pano => {
-                        pano.setEnable(true)
-                    })
-                    Potree.Utils.updateVisible(MergeEditor.transformControls, 'showPanos', true)
-                    setTimeout(() => {//在下一帧再变,因为3dtiles需要更新一下才会显示tiles 
+                    Potree.settings.displayMode = 'showPointCloud'
+                    /* setTimeout(() => {//在下一帧再变,因为3dtiles需要更新一下才会显示tiles 
                         if (!requestInPano) {
                             Potree.settings.displayMode = 'showPointCloud'
                             Potree.Utils.updateVisible(MergeEditor.boxHelper, 'showPanos', true)
                         }
-                    }, 50)
+                    }, 50) */
 
-                    viewer.addEventListener('camera_changed', camera_changed)
+                    
                 },