xzw 16 годин тому
батько
коміт
af7a1f5f51
4 змінених файлів з 1138 додано та 822 видалено
  1. 1101 808
      pnpm-lock.yaml
  2. 23 6
      public/lib/potree/potree.js
  3. 1 1
      public/lib/potree/potree.js.map
  4. 13 7
      src/sdk/cover/index.js

Різницю між файлами не показано, бо вона завелика
+ 1101 - 808
pnpm-lock.yaml


+ 23 - 6
public/lib/potree/potree.js

@@ -4631,6 +4631,22 @@
 	      return str.replace(reg, e);        //str.split(f).join(e); */
 	    }
 	  },
+	  cleanUrl(url) {
+	    //斜杠处理   协议aaa://保留双斜杠,其余单斜杠
+	    //分离协议和路径部分
+	    var protocolMatch = url.match(/^(\w+:)\/{2,}/);
+	    if (protocolMatch) {
+	      var protocol = protocolMatch[1];
+	      var path = url.slice(protocolMatch[0].length);
+	      return protocol + '//' + path.replace(/\/+/g, '/');
+	    } else {
+	      return url.replace(/\/+/g, '/');
+	    }
+	  },
+	  joinUrl() {
+	    //拼接地址。总是出现前后多个/造成双斜杠或者缺斜杠的问题,处理一下
+	    return this.cleanUrl(Array.from(arguments).join('/'));
+	  },
 	  dealURL() {
 	    var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
 	    var urlNew = this.replaceAll(url, "+", "%2B"); //this.replaceAll(url, "\\+", "%2B");// 浏览器似乎不支持访问带+的地址
@@ -23038,7 +23054,7 @@
 	          Potree.settings.cloudAddMapping && (prefix2 += '/' + originDataset.mapping);
 	          var timeStamp = originDataset.updateTime ? originDataset.updateTime.replace(/[^0-9]/ig, '') : ''; //每重算一次后缀随updateTime更新一次 
 	          //let cloudPath = `${Potree.settings.urls.prefix1}/${Potree.settings.webSite}/${sceneCode}/data/${sceneCode}/webcloud/cloud.js` 
-	          var cloudPath = "".concat(prefix2, "/").concat(originDataset.webBin); //webBin添加原因:每次裁剪之类的操作会换路径,因为oss文件缓存太严重,更新慢
+	          var cloudPath = Potree.Common.joinUrl(prefix2, originDataset.webBin); //`${prefix2}/${originDataset.webBin}`  //webBin添加原因:每次裁剪之类的操作会换路径,因为oss文件缓存太严重,更新慢
 	          dataset = originDataset;
 	          loadCloud({
 	            cloudPath,
@@ -23700,7 +23716,8 @@
 	        var prop = (_ref = object.props || object) === null || _ref === void 0 ? void 0 : _ref.raw;
 	        return prop && prop[name];
 	      };
-	      prefix = this[name] || getFromModel() || this['prefix' + num];
+	      //prefix = this[name] || getFromModel() || this['prefix'+num] //2025.10改了顺序,本来是整个场景的优先级最高,改为模型的,为了江门版本,旧的不管了
+	      prefix = getFromModel() || this[name] || this['prefix' + num];
 	      return prefix;
 	    },
 	    templates: {}
@@ -89727,10 +89744,10 @@
 	        });
 	      }
 	      var v = true;
-	      result.model.visiChangeCallback = () => {
+	      result.model.visiChangeCallback = force => {
 	        var visi = result.model.realVisible();
 	        tileset.visible = visi; //同步,使不加载 
-	        if (v != visi) {
+	        if (force || v != visi) {
 	          tileset.nextForceUpdate = true;
 	          v = visi;
 	        }
@@ -91528,9 +91545,9 @@
 
 	    //path = `${prefix}/swkk/${sceneCode}/wwwroot/scene_view_data/${sceneCode}/images/vision.txt`
 	    if (Potree.settings.urls.templates.vision) {
-	      path = prefix + Potree.Common.replaceAll(Potree.settings.urls.templates.vision, '{sceneCode}', sceneCode);
+	      path = Potree.Common.joinUrl(prefix, Potree.Common.replaceAll(Potree.settings.urls.templates.vision, '{sceneCode}', sceneCode));
 	    } else {
-	      path = "".concat(prefix, "/scene_view_data/").concat(sceneCode, "/images/vision.txt");
+	      path = Potree.Common.joinUrl(prefix, "/scene_view_data/".concat(sceneCode, "/images/vision.txt"));
 	    }
 	  }
 	  model.sceneCode = sceneCode;

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


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

@@ -301,7 +301,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             viewer.removeEventListener('camera_changed', camera_changed)  
         }
     }
-    let requestInPano = false
+    let requestPanoModel = false
     //-------------------------------------
     /* viewer.inputHandler.addEventListener('keydown', (e)=>{
         if(e.event.key == "e" ){ 
@@ -730,8 +730,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     }else{
                         console.warn('没有找到漫游点',o)
                     }
-                }/* else if(requestInPano){
-                    requestInPano.result_.flyOutPano()
+                }/* else if(requestPanoModel){
+                    requestPanoModel.result_.flyOutPano()
                 } */else{
                     Potree.settings.displayMode = 'showPointCloud'  
                     
@@ -788,6 +788,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             
         },
         comeToByLatLng(lonlat){//飞到指定经纬度 
+            requestPanoModel?.result_?.flyOutPano() 
+        
             let pos = viewer.transform.lonlatToLocal.forward(lonlat)
             let location = viewer.mainViewport.view.position.clone().setX(pos[0]).setY(pos[1])
             viewer.scene.view.setView({position:location, duration:500});
@@ -1161,7 +1163,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     return model?.panos?.length > 0
                 },
                 flyInPano(pano, {dontFly, quaternion, duration}={}) {//  飞入全景图
-                    requestInPano = model
+                    requestPanoModel = model
                     pano = pano || viewer.images360.findNearestPano(null, model.panos)
                     if (pano) {  
                         dontFly || viewer.images360.flyToPano({ pano, canCancelLast: true, quaternion, duration})
@@ -1171,10 +1173,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     }
                 },
                 flyOutPano() {//  飞出全景图(就是切换到正常融合视角)
-                    requestInPano = false
+                    requestPanoModel = false
                     Potree.settings.displayMode = 'showPointCloud'
                     /* setTimeout(() => {//在下一帧再变,因为3dtiles需要更新一下才会显示tiles 
-                        if (!requestInPano) {
+                        if (!requestPanoModel) {
                             Potree.settings.displayMode = 'showPointCloud'
                             Potree.Utils.updateVisible(MergeEditor.boxHelper, 'showPanos', true)
                         }
@@ -1199,13 +1201,17 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     model.position.z += model.boundSize.z / 2 
                     model.dispatchEvent({type:"position_changed", byControl:true}) //compute bound and emit
                     MergeEditor.history.afterChange(model)
+                    viewer.dispatchEvent('content_changed')
+                    model.visiChangeCallback && model.visiChangeCallback(true)  //3dtiles再更新下可见性
                 },
 
-                putInFrontOfCam(){//首次加载放在面前,高度和相机一致。(但不保证会不会被遮挡) 
+                putInFrontOfCam(){//首次加载放在面前,高度和相机一致。(但不保证会不会被遮挡)
+         
                     let size = Math.max(1, new THREE.Vector2().copy(model.boundSize).length() * 0.7 ) 
                     let vec = viewer.mainViewport.view.direction.clone().setZ(0).multiplyScalar(size)
                     let pos = new THREE.Vector3().addVectors(viewer.mainViewport.view.position, vec)
                     MergeEditor.moveBoundCenterTo(model, pos)   
+                    console.log('putInFrontOfCam', pos)       
                     model.dispatchEvent({type:"position_changed", byControl:true}) 
                 },