Browse Source

Merge branch 'dev' of http://192.168.0.115:3000/4dkankan/4dkankan_bim into dev

rindy 2 years ago
parent
commit
1f3546f987
3 changed files with 89 additions and 66 deletions
  1. 5 1
      src/pages/Viewer.vue
  2. 68 55
      src/utils/ConvertViews.js
  3. 16 10
      src/utils/sync.js

+ 5 - 1
src/pages/Viewer.vue

@@ -71,7 +71,7 @@ import browser from '@/utils/browser'
 import Toast from '@/components/dialog/Toast'
 import AppHeader from '@/components/header'
 import Calendar from '@/components/calendar'
-import sync, { loadSourceScene, loadTargetScene } from '@/utils/sync'
+import sync, { loadSourceScene, loadTargetScene, setPanoWithBim} from '@/utils/sync'
 
 // 是否BIM模式
 const showBim = ref(browser.urlHasValue('bim'))
@@ -407,9 +407,13 @@ onMounted(() => {
                             response.data.panos = JSON.parse(response.data.panos)
                             points.value.p1 = true
                             points.value.p2 = true
+  
+                            setPanoWithBim(response.data.panos)
+                        
                         } catch (error) {
                             console.error(error)
                         }
+ 
                     }
                     project.value = response.data
                     if (project.value.sceneList.length) {

+ 68 - 55
src/utils/ConvertViews.js

@@ -226,71 +226,84 @@ export default class ConvertViews extends THREE.EventDispatcher{
         let needBindEvent = !this.targetApp // 若targetApp存在表明targetApp的dom未换掉,事件还存在
         this.sourceApp = sourceApp
         this.targetApp = targetApp
-        
+        let data = this.getCameraData(sourceApp)
        
         bimViewer = this.bimViewer = targetApp.viewer 
-        
-        this.needConvertAxis = sourceApp.sceneType == 'kankan' && targetApp.sceneType == 'bim'// Y朝上需要转换
-        
-        this.lastCamStatus = bimViewer.getCameraStatus()
-        targetPano && this.computeShift(sourcePano, targetPano)
-        
         bimViewer.setNavigationMode(targetApp.Glodon.Bimface.Viewer.NavigationMode3D.Walk)
-        bimViewer.setFlySpeedRate(5)
+        bimViewer.setFlySpeedRate(3)
         bimViewer.getViewer().setTransitionAnimationState(false) //setCameraStatus瞬间变化相机 ,or setCameraAnimation?
-         
-        bimViewer.addEventListener('Rendered', (e)=>{//反向改变左侧相机
-             
-            let info = bimViewer.getCameraStatus() 
-            let poseChanged = !math.closeTo(this.lastCamStatus.position, info.position)
-                || !math.closeTo(this.lastCamStatus.target, info.target)
-                || !math.closeTo(this.lastCamStatus.fov, info.fov)
-            
-            if(poseChanged){ 
-                if(this.leftCanChangePos()){
-                    this.send(info)
-                    this.lastCamStatus = info 
-                }  
-            } 
+       
+       
+        let camera = bimViewer.getViewer().camera
+        if(camera.fov != data.fov){
+            camera.fov = data.fov
+            camera.updateProjectionMatrix()
+        }
+       
+       
+        if(targetPano){
+            this.needConvertAxis = sourceApp.sceneType == 'kankan' && targetApp.sceneType == 'bim'// Y朝上需要转换
             
-        })  
-        if(sourceApp.sceneType == 'laser'){
-            this.sourceDom = this.sourceApp.viewer.inputHandler.domElement  
-            sourceApp.viewer.addEventListener('camera_changed', e => {
-                targetApp && this.receive(this.getCameraData(sourceApp))
-            })
-            //master.viewer.images360.isAtPano() || master.Potree.settings.displayMode == 'showPanos'
-            /* if(this.lastBimStatus){
-                this.lastBimStatus
-                let pano 
-                if(this.lastBimStatus.panoId != void 0) pano = this.sourceApp.viewer.images360.panos[this.lastBimStatus.panoId]
-                this.sourceApp.viewer.dispatchEvent({type:'camera_changed',changeInfo:{quaternionChanged:true},viewport:this.sourceApp.viewer.mainViewport }) //朝向位置同步
+            this.lastCamStatus = bimViewer.getCameraStatus()
+            this.computeShift(sourcePano, targetPano)
+            bimViewer.addEventListener('Rendered', (e)=>{//反向改变左侧相机
+                 
+                let info = bimViewer.getCameraStatus() 
+                let poseChanged = !math.closeTo(this.lastCamStatus.position, info.position)
+                    || !math.closeTo(this.lastCamStatus.target, info.target)
+                    || !math.closeTo(this.lastCamStatus.fov, info.fov)
+                
+                if(poseChanged){ 
+                    if(this.leftCanChangePos()){
+                        this.send(info)
+                        this.lastCamStatus = info 
+                    }  
+                } 
+                
+            })  
+            if(sourceApp.sceneType == 'laser'){
+                this.sourceDom = this.sourceApp.viewer.inputHandler.domElement  
+                sourceApp.viewer.addEventListener('camera_changed', e => {
+                    targetApp && this.receive(this.getCameraData(sourceApp))
+                })
+                //master.viewer.images360.isAtPano() || master.Potree.settings.displayMode == 'showPanos'
+                /* if(this.lastBimStatus){
+                    this.lastBimStatus
+                    let pano 
+                    if(this.lastBimStatus.panoId != void 0) pano = this.sourceApp.viewer.images360.panos[this.lastBimStatus.panoId]
+                    this.sourceApp.viewer.dispatchEvent({type:'camera_changed',changeInfo:{quaternionChanged:true},viewport:this.sourceApp.viewer.mainViewport }) //朝向位置同步
+                    
+                    pano && customer.viewer.images360.flyToPano({pano, duration: 0 }) 
+                } */
+                
                 
-                pano && customer.viewer.images360.flyToPano({pano, duration: 0 }) 
-            } */
+            }else if(sourceApp.sceneType == 'kankan'){
+                let player = this.sourceApp.app.core.get('Player')
+                this.sourceDom = player.domElement 
+                var cameraMove = (e)=>{//暂时只有漫游模式
+                    if(!e.hasChanged.cameraChanged2)return
+                    this.receive(this.getCameraData(sourceApp)) 
+                }
+                player.on("update",cameraMove)
+            }
             
+            /* bimViewer.addEventListener(targetApp.Glodon.Bimface.Viewer.Viewer3DEvent.ViewAdded,
+                ()=>{
+                    this.loaded = true
+                    if(this.firstData){
+                        this.receive(this.firstData)
+                    }
+                }
+            ) */
             
-        }else if(sourceApp.sceneType == 'kankan'){
-            let player = this.sourceApp.app.core.get('Player')
-            this.sourceDom = player.domElement 
-            var cameraMove = (e)=>{//暂时只有漫游模式
-                if(!e.hasChanged.cameraChanged2)return
-                this.receive(this.getCameraData(sourceApp)) 
-            }
-            player.on("update",cameraMove)
+            needBindEvent && this.bindCamEvent() 
+            this.loaded = true
+            this.receive(data)
         }
+         
+        
+        
         
-        /* bimViewer.addEventListener(targetApp.Glodon.Bimface.Viewer.Viewer3DEvent.ViewAdded,
-            ()=>{
-                this.loaded = true
-                if(this.firstData){
-                    this.receive(this.firstData)
-                }
-            }
-        ) */
-        this.loaded = true
-        this.receive(this.getCameraData(sourceApp))
-        needBindEvent && this.bindCamEvent() 
           
     }
     

+ 16 - 10
src/utils/sync.js

@@ -8,25 +8,31 @@ let sourceApp = null,
   
 const isEdit = browser.urlHasValue('adjust')
 
-
-let targetPano = isEdit ? null : [//targetPano
+let panoData = {p1:{id:0},p2:{id:1}}//默认
+let targetPano /* = isEdit ? null : [//targetPano
                         {position: new THREE.Vector3( -5.313605730801787,  -4.889868407960505,  1.237447893355817),},
                         {position: new THREE.Vector3( -5.337403524084278,  -2.5012228235167737, 1.2808838933558175),} 
-                    ]   
+                    ]    */
+export function setPanoWithBim(data){
+    if(!isEdit){
+        panoData = data 
+        targetPano = [{position:new THREE.Vector3().copy(data.p1.position)},{position:new THREE.Vector3().copy(data.p2.position)}]
+    }  
+}
 
-const initConvertView = (isSwitchScene) => { 
 
-    
+
+const initConvertView = (isSwitchScene) => {  
 
     if (sourceApp && targetApp) {
         if(targetApp.sceneType == 'bim'){
-            if(isEdit)return
-        
+              
             if(sourceApp.sceneType == 'laser'){ 
                 views.bindWithBim(
                     sourceApp,
-                    targetApp,
-                    sourceApp.viewer.images360.panos.slice(0, 2),
+                    targetApp, 
+                    [sourceApp.viewer.images360.panos[panoData.p1.id], sourceApp.viewer.images360.panos[panoData.p2.id]], //sourceApp.viewer.images360.panos.slice(0, 2),
+                    
                     targetPano
                      
                 )
@@ -37,7 +43,7 @@ const initConvertView = (isSwitchScene) => {
                 views.bindWithBim(
                     sourceApp,
                     targetApp,
-                    sourceApp.app.core.get('Player').model.panos.list.slice(0, 2), 
+                    [sourceApp.app.core.get('Player').model.panos.index[panoData.p1.id], sourceApp.app.core.get('Player').model.panos.index[panoData.p2.id]],//sourceApp.app.core.get('Player').model.panos.list.slice(0, 2), 
                     targetPano,
                      
                 )