xzw 2 年之前
父节点
当前提交
ce4e01412e
共有 2 个文件被更改,包括 67 次插入28 次删除
  1. 28 9
      src/utils/ConvertViews.js
  2. 39 19
      src/utils/sync.js

+ 28 - 9
src/utils/ConvertViews.js

@@ -47,6 +47,8 @@ export default class ConvertViews extends THREE.EventDispatcher{
     }
     
     bindWithSameType(sourceApp,targetApp){ 
+        let lastSourceApp = this.sourceApp
+        let lastTargetApp = this.targetApp
         this.sourceApp = sourceApp
         this.targetApp = targetApp
         
@@ -70,7 +72,9 @@ export default class ConvertViews extends THREE.EventDispatcher{
                 
                 var flyToPano = (e)=>{//同步点位
                     if(master != this.masterApp )return
-                    customer.viewer.images360.flyToPano({pano: customer.viewer.images360.panos[e.toPano.pano.id]} )
+                    let pano = customer.viewer.images360.panos[e.toPano.pano.id]
+                    if(!pano)return console.error('找不到该e.panoId', e.toPano.pano.id)
+                    customer.viewer.images360.flyToPano({pano} )
                 }
                 master.viewer.images360.addEventListener('flyToPano',flyToPano)
              
@@ -115,9 +119,12 @@ export default class ConvertViews extends THREE.EventDispatcher{
                 
                 var player1 = master.app.core.get('Player')
                 var player2 = customer.app.core.get('Player')
+                let this_ = this
                 var flyToPano = (e)=>{//同步点位
-                    if(master != this.masterApp )return
-                    player2.flyToPano({pano: player2.model.panos.index[e.panoId]} )
+                    if(master != this_.masterApp )return
+                    let pano = player2.model.panos.index[e.panoId]
+                    if(!pano)return console.error('找不到该e.panoId',e.panoId)
+                    player2.flyToPano({pano} )
                 }
                 player1.on("flying.started",flyToPano)
                 
@@ -146,11 +153,11 @@ export default class ConvertViews extends THREE.EventDispatcher{
             let changeMaster = ()=>{
                 this.masterApp = master  //主控方。只有主控方能控制被控方。鼠标操作过mousedown mousewheel等才能认定为主控方
             }
-            //let dom = sourceApp.sceneType == 'laser' ? master.viewer.inputHandler.domElement : player1.domElement
-            master.addEventListener('mousedown',changeMaster)
-            master.addEventListener('mousewheel',changeMaster)
-            
+            let dom = sourceApp.sceneType == 'laser' ? master.viewer.inputHandler.domElement : master.app.core.get('Player').domElement
+            dom.addEventListener('pointerdown',changeMaster )
+            dom.addEventListener('mousewheel',changeMaster )
             
+           
             let dispose = ()=>{
                 if(sourceApp.sceneType == 'laser'){
                     if(!master.viewer)return //master已被替换成别的类型的场景
@@ -175,8 +182,20 @@ export default class ConvertViews extends THREE.EventDispatcher{
         bind(targetApp, sourceApp) 
         
         
-        
-         
+        //同步初始漫游点 
+        let master = lastSourceApp == this.sourceApp ? sourceApp : targetApp
+        let customer = lastSourceApp == this.sourceApp ? targetApp : sourceApp
+        if(master.sceneType == 'laser'){  
+            let pano = master.viewer.images360.nextPano || master.viewer.images360.currentPano
+            let pano2 = pano && customer.viewer.images360.panos[pano.id]
+            master.viewer.dispatchEvent('camera_changed') //朝向同步
+            pano2 && customer.viewer.images360.flyToPano({pano : pano2 })
+        }else{ 
+            let pano = master.app.core.get('Player').nextPano || master.app.core.get('Player').currentPano
+            let pano2 = pano && customer.app.core.get('Player').model.panos.index[pano.id]
+            master.app.core.get('Player').emit("update")//朝向同步
+            pano2 && customer.app.core.get('Player').flyToPano({pano: pano2})
+        }
         
         
         this.loaded = true

+ 39 - 19
src/utils/sync.js

@@ -69,25 +69,25 @@ export function loadSourceScene(sourceFrame,type) {
     }
     
     Log('loadSourceScene, ' + type)
-    sourceApp = sourceFrame.value.contentWindow
-    sourceApp.sceneType = type
-    window.app1 = sourceApp
+    sourceApp = window.app1 = null 
+    let win = sourceFrame.value.contentWindow  
+    win.sceneType = type
+    
+    
     let loaded = ()=>{ 
+        sourceApp = window.app1 = win
         initConvertView()  
     }
     
     
     if(type == 'laser'){
-        sourceApp.loaded.then(sdk => {
-             
-            let viewer = sourceApp.viewer 
-             
-            laserLoaded(sourceApp)
+        win.loaded.then(sdk => { 
+            laserLoaded(win)
             loaded()
         })  
     }else if(type == 'kankan'){  
-        sourceApp.app.Scene.on('loaded', (e) => {
-            let player = sourceApp.app.core.get('Player')
+        win.app.Scene.on('loaded', (e) => {
+            
             loaded()
         })
     }
@@ -103,28 +103,30 @@ export function loadTargetScene(targetFrame, type, mode) {
     if (views.loaded ) {
         views.clear( )
     }
+    targetApp = window.app2 = null 
+    
+    
+    let win = targetFrame.value.contentWindow   //其实只用赋值一次
+    win.sceneType = type
     
-    targetApp = targetFrame.value.contentWindow   //其实只用赋值一次
-    targetApp.sceneType = type
-    window.app2 = targetApp
     let loaded = ()=>{
-        
+        targetApp = window.app2 = win
+         
+       
         initConvertView()
     }
     
     
     
     if(type == 'kankan'){  
-        targetApp.app.Scene.on('loaded', () => {
-            let player = targetApp.app.core.get('Player')
-            
+        win.app.Scene.on('loaded', () => { 
             loaded()
         })
     }else{
-        targetApp.loaded.then(sdk => {
+        win.loaded.then(sdk => {
             //targetApp.viewer.scene.changeMode(mode)  
             if(type == 'laser'){
-                laserLoaded(targetApp)
+                laserLoaded(win)
             }else if(type == 'bim'){
             } 
           
@@ -179,3 +181,21 @@ export default {
         return targetApp
     },
 }
+
+/* 
+
+
+matchPanos:[
+    {
+        id: 0,
+        position : {x: 1, y: 1, z: 1}
+
+    },
+    {
+        id: 3
+        position : {x: 2, y: 1, z: 2}
+
+    }
+]
+
+ */