xzw 2 gadi atpakaļ
vecāks
revīzija
ab37fb8c39

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 851 - 417
public/static/lib/potree/potree.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
public/static/lib/potree/potree.js.map


+ 1 - 1
src/pages/Viewer.vue

@@ -334,7 +334,7 @@ const onDbsChecked = () => {
         }
     } else {
         target.value = null
-        targetApp = null
+        //targetApp = null
         views.clear()
     }
 }

+ 58 - 30
src/utils/ConvertViews.js

@@ -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)

+ 33 - 18
src/utils/sync.js

@@ -1,21 +1,20 @@
 import ConvertViews from '@/utils/ConvertViews'
+import browser from '@/utils/browser'
 
 const views = new ConvertViews()
-
+window.views = views
 let sourceApp = null,
     targetApp = null 
   
+const isEdit = browser.urlHasValue('adjust')
 
-/* const getView = () => {
-    let camera = sourceApp.viewer.mainViewport.camera
-    return {
-        position: camera.position,
-        quaternion: camera.quaternion,
-        fov: camera.fov,
-    }
-} */
 
-const initConvertView = noNeedBindEvent => { 
+/* let targetPano = isEdit ? [//targetPano
+                        {position: new THREE.Vector3( -5.313605730801787,  -4.889868407960505,  1.237447893355817),},
+                        {position: new THREE.Vector3( -5.337403524084278,  -2.5012228235167737, 1.2808838933558175),} 
+                    ] : */
+
+const initConvertView = (isSwitchScene) => { 
 
     
 
@@ -53,7 +52,7 @@ const initConvertView = noNeedBindEvent => {
             }
         }else if(sourceApp.sceneType == targetApp.sceneType){
             
-            views.bindWithSameType(sourceApp,targetApp)
+            views.bindWithSameType(sourceApp,targetApp, isSwitchScene)
              
         }
             
@@ -64,7 +63,9 @@ const initConvertView = noNeedBindEvent => {
  * @param {String} type kankan|laser
  */
 export function loadSourceScene(sourceFrame,type) {
+    let isSwitchScene 
     if (views.loaded ) {
+        isSwitchScene = true
         views.clear({ dontClearTarget: targetApp.sceneType == 'bim' })
     }
     
@@ -76,7 +77,7 @@ export function loadSourceScene(sourceFrame,type) {
     
     let loaded = ()=>{ 
         sourceApp = window.app1 = win
-        initConvertView()  
+        initConvertView(isSwitchScene && 'source')  
     }
     
     
@@ -98,9 +99,12 @@ export function loadSourceScene(sourceFrame,type) {
  * @param {String} type kankan|laser|bim
  * @param {mode} mode 0|1
  */
-export function loadTargetScene(targetFrame, type, mode) {
+export function loadTargetScene(targetFrame, type, mode) { 
+    
     Log('loadTargetScene, ' + type)
+     
     if (views.loaded ) {
+        
         views.clear( )
     }
     targetApp = window.app2 = null 
@@ -113,7 +117,7 @@ export function loadTargetScene(targetFrame, type, mode) {
         targetApp = window.app2 = win
          
        
-        initConvertView()
+        initConvertView( 'target')
     }
     
     
@@ -159,9 +163,10 @@ window.Log = function(value, color, fontSize){
 }
   
 function laserLoaded(app){
-    window.addEventListener('mouseup',(e)=>{
-        app.viewer.inputHandler.onMouseUp(e) //iframe的window的mouseup 在拖拽出窗口外居然不执行,只好用全局的通知它们
-    })
+    if(!app.viewer){
+        return console.error('!app.viewer', app.viewer)
+    }
+    
     
     app.viewer.mainViewport.view.minPitch += 0.01 //防止bim垂直视角上的闪烁(似乎是因 up 要乘以某矩阵导致微小偏差所致)
     app.viewer.mainViewport.view.minPitch -= 0.01
@@ -169,9 +174,19 @@ function laserLoaded(app){
         app.viewer.updateVisible(pano.label2, 'notDisplay', true)
         pano.dispatchEvent({type:'changeMarkerTex',name:'ring'})
     }) 
-
+    //app.Potree.settings.pointDensity = 'high'
+    app.Potree.settings.UserDensityPercent = 1 ; //因为nodeMaxLevel不同,感觉只有最高质量能看起来一样
+    app.viewer.setPointLevels()
     app.Potree.settings.rotAroundPoint = false   //去除原因:比较好同步,尤其当左边在当前点位,右边同步后却离开当前点位的话拖拽就会绕点旋转了
 }
+
+
+window.addEventListener('mouseup',(e)=>{
+    //iframe的window的mouseup 在拖拽出窗口外居然不执行,只好用全局的通知它们
+    targetApp && targetApp.sceneType == 'laser' && targetApp.viewer && targetApp.viewer.inputHandler.onMouseUp(e) 
+    sourceApp && sourceApp.sceneType == 'laser' && sourceApp.viewer && sourceApp.viewer.inputHandler.onMouseUp(e)  
+})
+
   
 export default {
     get sourceInst() {