xzw 4 ay önce
ebeveyn
işleme
1bcb5fe9fd
1 değiştirilmiş dosya ile 46 ekleme ve 45 silme
  1. 46 45
      src/sdk/cover/index.js

+ 46 - 45
src/sdk/cover/index.js

@@ -647,26 +647,25 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
 
             return deferred.promise()
         },
-        getPose(modelId) {//获取当前点位和朝向
+        getPose({modelId,isFlyToTag}={}) {//获取当前点位和朝向
             
             const camera = viewer.scene.getActiveCamera()
             const target = viewer.scene.view.getPivot().clone()
             const position = viewer.scene.view.position.clone()
             const pose = { position, target,  displayMode:Potree.settings.displayMode }
+            
+            
             if(Potree.settings.displayMode == 'showPanos'){
                 let model = viewer.images360.currentPano.pointcloud
-                pose.panoId = viewer.images360.currentPano.originID 
-                pose.model = model.result_
-                 
-                pose.posInModel = Potree.Utils.datasetPosTransform({ toDataset: true, position: camera.position.clone(), object:model })
-                pose.rotInModel = Potree.Utils.datasetRotTransform({ toDataset: true, quaternion: camera.quaternion.clone(), getQuaternion: true, pointcloud:model }).toArray() //拿第一个数据集
- 
-            }
-            
-            if(modelId){
-                pose.modelId2 = modelId
-                pose.posInModel2 = Potree.Utils.datasetPosTransform({ toDataset: true, position: camera.position.clone(), datasetId: modelId  })
-                pose.rotInModel2 = Potree.Utils.datasetRotTransform({ toDataset: true, quaternion: camera.quaternion.clone(), getQuaternion: true, datasetId: modelId }).toArray() //拿第一个数据集
+                if(!isFlyToTag || model.dataset_id == modelId){ //保存编辑热点时的视角,如果在全景模式,只有点位在所加模型上时才保存
+                    pose.panoId = viewer.images360.currentPano.originID 
+                    //pose.model = model.result_  //无法被json化,好像没用到所以注释 
+                    pose.posInModel = Potree.Utils.datasetPosTransform({ toDataset: true, position: camera.position.clone(), object:model })
+                    pose.rotInModel = Potree.Utils.datasetRotTransform({ toDataset: true, quaternion: camera.quaternion.clone(), getQuaternion: true, pointcloud:model }).toArray() //拿第一个数据集
+                }
+            }else if(isFlyToTag){
+                position.copy(Potree.Utils.datasetPosTransform({ toDataset: true, position: camera.position.clone(), datasetId: modelId,  }))
+                target.copy(Potree.Utils.datasetPosTransform({ toDataset: true, position: target.clone(), datasetId: modelId,  }))
             }
             
             //console.log('getPose',position, target)
@@ -679,41 +678,38 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             //飞到某个点  
             
             let deferred = $.Deferred()
-            
-            if (o.modelId2 != void 0) {//飞到热点
-                ['position', 'target'].forEach(e => { 
-                    if (o[e]) {
-                        o[e] = Potree.Utils.datasetPosTransform({ fromDataset: true, datasetId: o.modelId2, position: o[e] })
+            let fly = ()=>{
+                
+                if(o.panoId != void 0){
+                    let model = o.model.model
+                    let pano = model.panos.find(a=>a.originID == o.panoId)
+                    if(pano){
+                        o.rotInModel = new THREE.Quaternion().fromArray(o.rotInModel)
+                        let quaternion = Potree.Utils.datasetRotTransform({ fromDataset: true, quaternion: o.rotInModel, getQuaternion: true, object:model})  
+
+                        o.model.flyInPano(pano, {quaternion, duration:0, callback(){
+                            o.callback && o.callback()
+                            deferred.resolve(true)
+                        }})
+                        return deferred.promise()
+                        
+                    }else{
+                        console.warn('没有找到漫游点',o)
+                    }
+                }/* else if(requestInPano){
+                    requestInPano.result_.flyOutPano()
+                } */else{
+                    if (o.modelId != void 0) {
+                        ['position', 'target'].forEach(e => { 
+                            if (o[e]) {
+                                o[e] = Potree.Utils.datasetPosTransform({ fromDataset: true, datasetId: o.modelId, position: o[e] })
+                            }
+                        })
                     }
-                })
-            }else if(o.panoId != void 0){
-                let model = o.model.model
-                let pano = model.panos.find(a=>a.originID == o.panoId)
-                if(pano){
-                    o.rotInModel = new THREE.Quaternion().fromArray(o.rotInModel)
-                    let quaternion = Potree.Utils.datasetRotTransform({ fromDataset: true, quaternion: o.rotInModel, getQuaternion: true, object:model})  
-
-                    o.model.flyInPano(pano, {quaternion, duration:0, callback(){
-                        o.callback && o.callback()
-                        deferred.resolve(true)
-                    }})
-                    return deferred.promise()
-                    
-                }else{
-                    console.warn('没有找到漫游点',o)
-                }
-            }/* else if(requestInPano){
-                requestInPano.result_.flyOutPano()
-            } */else{
-                if (o.modelId != void 0) {
-                    ['position', 'target'].forEach(e => { 
-                        if (o[e]) {
-                            o[e] = Potree.Utils.datasetPosTransform({ fromDataset: true, datasetId: o.modelId, position: o[e] })
-                        }
-                    })
                 }
+            
+                
             }
-        
            
             if (o.distance || o.maxDis) {
                 //o.isFlyToTag = true
@@ -724,6 +720,9 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                     if(r){
                         requestShowPano = true
                     }else{
+                        if(o.panoId != void 0 || o.modelId != void 0){ 
+                            return fly()    //使用保存的视角
+                        }
                         Potree.settings.displayMode = 'showPointCloud'  
                     }
                 }
@@ -736,6 +735,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                 })
                 return rusult.promise
                
+            }else{
+                fly()
             }