瀏覽代碼

index更新

bill 1 年之前
父節點
當前提交
d1f171dbcf
共有 2 個文件被更改,包括 42 次插入15 次删除
  1. 1 1
      src/model/platform.ts
  2. 41 14
      src/sdk/cover/index.js

+ 1 - 1
src/model/platform.ts

@@ -20,7 +20,7 @@ export async function modelSDKFactory (
   });
   if (type === fuseModel) {
     if (!fuseInitialed) {
-      await initialSDK({ layout: dom, scenes: scenes.value, lonlat: [center.x, center.y] })
+      await initialSDK({ layout: dom, scenes: scenes.value, lonlat: [center.y, center.y] })
     }
     return exposeFactory(fuseModel)
   } else {

+ 41 - 14
src/sdk/cover/index.js

@@ -34,6 +34,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
     let { THREE } = Potree.mergeEditStart(dom, mapDom)
     let MergeEditor = viewer.modules.MergeEditor
     Potree.settings.unableNavigate = false
+    Potree.settings.canWalkThroughModel = true
     Potree.settings.showCesium = true
     if (Potree.settings.showCesium) {
 
@@ -74,8 +75,19 @@ 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 => {
         var camera = e.viewport.camera
@@ -230,7 +242,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
     window.THREE = THREE
     //isLocal = false 
-    let autoLoads = window.autoLoads = []
+    let autoLoads = /* window.autoLoads = */ []
     let readyToAddModel
     let maxLoadingCount = /* isLocal ? 1 :  */2; //正在加载模型的最大数目
 
@@ -346,6 +358,20 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
     let sdk = {
         sceneBus, mapBus,
+        
+        
+        canTurnToPanoMode(pos) { 
+            pos = pos ? new THREE.Vector3().copy(pos) : viewer.images360.position
+
+            let pano = viewer.images360.findNearestPano(pos)
+            if (pano && pano.position.distanceTo(pos) < Potree.config.panoFieldRadius) {
+                return {model:pano.pointcloud.result_}
+            }
+            //poschange后会调用这个,如果返回false会变为点云模式,且不会自动变回原先的模式
+        },
+        
+        
+        
         getPositionByScreen(pos2d, hopeModelId) {//通过屏幕坐标获取真实坐标 . hopeModelId: 如果指定了模型,优先返回hopeModelId上的intersect
             //console.log('getPositionByScreen',hopeModelId)
             hopeModelId = null
@@ -667,6 +693,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
             let model
             let done = (model_) => {
                 model = model_
+                model.result_ = result
                 if (!props.isFirstLoad) {
                     model.visible = false//先不显示,防止卡顿
                 }
@@ -751,23 +778,24 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                 supportPano() {  //是否支持全景图
                     return model.panos && model.panos.length > 0
                 },
-                flyInPano() {//  飞入全景图
+                flyInPano(pano, {dontFly}={}) {//  飞入全景图
                     requestInPano = model
-                    let pano = viewer.images360.findNearestPano(null, model.panos)
+                    pano = pano || viewer.images360.findNearestPano(null, model.panos)
                     if (pano) {
                         viewer.removeEventListener('camera_changed', camera_changed)
-                        viewer.images360.panos.forEach(pano => {
+                        Potree.settings.canWalkThroughModel || viewer.images360.panos.forEach(pano => {
                             pano.setEnable(pano.pointcloud == model)
                         })
                         viewer.setControls(viewer.fpControls)
-                        MergeEditor.transformControls.detach(model)
+                        //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) {
@@ -776,10 +804,9 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                             }
                         }, { once: true })
 
-                        viewer.images360.flyToPano({ pano, canCancelLast: true })
-                        Potree.settings.displayMode = 'showPanos'
-
-
+                        dontFly || viewer.images360.flyToPano({ pano, canCancelLast: true })
+                        Potree.settings.displayMode = 'showPanos' 
+                     
 
                     }
                 },
@@ -791,10 +818,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                         Potree.Utils.updateVisible(object, 'showPanos', true)
                     }
                     viewer.objs.children.forEach(changeVisi)
-                    viewer.images360.panos.forEach(pano => {
+                    Potree.settings.canWalkThroughModel || viewer.images360.panos.forEach(pano => {
                         pano.setEnable(true)
                     })
-
+                    Potree.Utils.updateVisible(MergeEditor.transformControls, 'showPanos', true)
                     setTimeout(() => {//在下一帧再变,因为3dtiles需要更新一下才会显示tiles 
                         if (!requestInPano) {
                             Potree.settings.displayMode = 'showPointCloud'