|
@@ -20,8 +20,9 @@ export default class ConvertViews extends THREE.EventDispatcher{
|
|
|
if(!o.dontClearTarget){
|
|
|
this.targetApp = null
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
this.dispatchEvent({type:'clearBind-sameType'})
|
|
|
+ window.Log('clear done')
|
|
|
}
|
|
|
/*
|
|
|
laser暂时做成这样: 全景模式时不跟踪pos,跟踪pano变化。点云模式时也跟踪pano变化,但移动时完全跟踪位置变化 ,所以会有左边marker在脚下,右边marker不在脚下的情况。
|
|
@@ -46,9 +47,9 @@ export default class ConvertViews extends THREE.EventDispatcher{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- bindWithSameType(sourceApp,targetApp){
|
|
|
- let lastSourceApp = this.sourceApp
|
|
|
- let lastTargetApp = this.targetApp
|
|
|
+ bindWithSameType(sourceApp,targetApp, isSwitchScene){
|
|
|
+
|
|
|
+
|
|
|
this.sourceApp = sourceApp
|
|
|
this.targetApp = targetApp
|
|
|
|
|
@@ -56,15 +57,23 @@ export default class ConvertViews extends THREE.EventDispatcher{
|
|
|
this.diffQuaternion = new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 1, 0), this.diffLon)
|
|
|
this.diffQuaternionInvert = this.diffQuaternion.clone().invert()
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+ sourceApp.sceneName = 'sourceApp'
|
|
|
+ targetApp.sceneName = 'targetApp'
|
|
|
|
|
|
if(sourceApp.sceneType == 'laser'){
|
|
|
this.computeShift()
|
|
|
-
|
|
|
- sourceApp.viewer.images360.addEventListener('endChangeMode',e=>{//只监听左边
|
|
|
+ //只监听左边
|
|
|
+ let displayMode = (e)=>{
|
|
|
targetApp.Potree.settings.displayMode = e.mode
|
|
|
- })
|
|
|
+ }
|
|
|
+ sourceApp.viewer.images360.addEventListener('endChangeMode', displayMode)
|
|
|
+
|
|
|
+ let dispose = ()=>{
|
|
|
+ if(!sourceApp.viewer || !sourceApp.viewer.images360)return
|
|
|
+ sourceApp.viewer.images360.removeEventListener('endChangeMode', displayMode)
|
|
|
+ this.removeEventListener('clearBind-sameType',dispose)
|
|
|
+ }
|
|
|
+ this.addEventListener('clearBind-sameType',dispose)
|
|
|
}
|
|
|
|
|
|
let bind = (master, customer)=>{ //相互都能带动对方
|
|
@@ -81,8 +90,8 @@ export default class ConvertViews extends THREE.EventDispatcher{
|
|
|
|
|
|
|
|
|
var cameraMove = (e)=>{
|
|
|
- if(master != this.masterApp )return
|
|
|
-
|
|
|
+ if(master != this.masterApp || !customer.viewer )return
|
|
|
+ //console.log('cameraMove')
|
|
|
if(master.viewer.images360.isAtPano() || master.Potree.settings.displayMode == 'showPanos'){ //转换朝向
|
|
|
if(e.changeInfo && e.changeInfo.quaternionChanged){
|
|
|
let data = this.getCameraData(master)
|
|
@@ -90,7 +99,7 @@ export default class ConvertViews extends THREE.EventDispatcher{
|
|
|
let quaternion = data.quaternion.premultiply(diffQua)
|
|
|
let rotation = new THREE.Euler().setFromQuaternion(quaternion)
|
|
|
customer.viewer.mainViewport.view.rotation = rotation
|
|
|
- console.log('cameraMove',customer == this.targetApp)
|
|
|
+ //console.log('cameraMove',customer == this.targetApp)
|
|
|
}
|
|
|
if(master.Potree.settings.displayMode == 'showPanos' ){
|
|
|
if(customer.viewer.mainViewport.camera.fov != master.viewer.mainViewport.camera.fov){
|
|
@@ -159,11 +168,11 @@ export default class ConvertViews extends THREE.EventDispatcher{
|
|
|
|
|
|
|
|
|
let dispose = ()=>{
|
|
|
- if(sourceApp.sceneType == 'laser'){
|
|
|
- if(!master.viewer)return //master已被替换成别的类型的场景
|
|
|
+ if(master.sceneType == 'laser'){
|
|
|
+ if(!master.viewer )return //master已替换,不用处理
|
|
|
master.viewer.images360.removeEventListener('flyToPano',flyToPano)
|
|
|
master.viewer.removeEventListener('camera_changed',cameraMove)
|
|
|
- }else if(sourceApp.sceneType == 'kankan'){
|
|
|
+ }else if(master.sceneType == 'kankan'){
|
|
|
player1.off("flying.started",flyToPano)
|
|
|
player1.off("update",cameraMove)
|
|
|
}
|
|
@@ -182,23 +191,31 @@ 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})
|
|
|
+ //切换其中一个场景后同步初始漫游点
|
|
|
+ if(isSwitchScene){
|
|
|
+
|
|
|
+ setTimeout(()=>{
|
|
|
+ let master = isSwitchScene == 'target' ? sourceApp : targetApp
|
|
|
+ let customer = isSwitchScene == 'target' ? targetApp : sourceApp
|
|
|
+ this.masterApp = master
|
|
|
+ customer.Potree.settings.displayMode = master.Potree.settings.displayMode
|
|
|
+ if(master.sceneType == 'laser'){
|
|
|
+ let pano = master.viewer.images360.nextPano || master.viewer.images360.currentPano
|
|
|
+ let pano2 = pano && customer.viewer.images360.panos[pano.id]
|
|
|
+ pano2 && customer.viewer.images360.flyToPano({pano : pano2, duration: 0 })
|
|
|
+ master.viewer.dispatchEvent({type:'camera_changed',changeInfo:{quaternionChanged:true},viewport:master.viewer.mainViewport }) //朝向位置同步
|
|
|
+ }else{
|
|
|
+ master.app.core.get('Player').emit("update")//朝向同步
|
|
|
+ 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]
|
|
|
+ pano2 && customer.app.core.get('Player').flyToPano({pano: pano2})
|
|
|
+ }
|
|
|
+ },1)//要延迟,否则角度和pano都不成功
|
|
|
}
|
|
|
|
|
|
-
|
|
|
this.loaded = true
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
@@ -241,11 +258,22 @@ export default class ConvertViews extends THREE.EventDispatcher{
|
|
|
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 })
|
|
|
+ } */
|
|
|
+
|
|
|
+
|
|
|
}else if(sourceApp.sceneType == 'kankan'){
|
|
|
let player = this.sourceApp.app.core.get('Player')
|
|
|
this.sourceDom = player.domElement
|
|
|
var cameraMove = (e)=>{//暂时只有漫游模式
|
|
|
- if(!e.hasChanged.cameraChanged)return
|
|
|
+ if(!e.hasChanged.cameraChanged2)return
|
|
|
this.receive(this.getCameraData(sourceApp))
|
|
|
}
|
|
|
player.on("update",cameraMove)
|