xzw 2 年之前
父节点
当前提交
8e9aa835b0
共有 3 个文件被更改,包括 56 次插入23 次删除
  1. 14 16
      src/pages/SViewer.vue
  2. 39 6
      src/utils/ConvertViews.js
  3. 3 1
      src/utils/sync.js

+ 14 - 16
src/pages/SViewer.vue

@@ -74,12 +74,7 @@ const sourceURL = computed(() => {
     } else {
         // 深时场景
         return `smart-kankan.html?m=${source.value.num}`//`smart-laser.html?m=${source.value.num}&dev`
-    }*/
-    
-    if (sourceFrame.value && sourceFrame.value.contentWindow){ 
-        lastFakeApp = sync.views.createTempApp(sourceFrame.value.contentWindow, true);
-    }
-
+    }*/ 
     if(source.value.type < 2) {
         return `smart-kankan.html?m=${source.value.num}`
     } else {
@@ -90,26 +85,29 @@ const sourceURL = computed(() => {
 const onLoadSource = () => { 
     let win = sourceFrame.value.contentWindow 
         window.app = win
+        
+    let loaded = ()=>{
+        if (lastFakeApp) {
+            if(sdk){
+                sync.views.bindWithSameFakeType(lastFakeApp,win)  
+            }
+        }
+         
+        lastFakeApp = sync.views.createTempApp(sourceFrame.value.contentWindow, true); 
+    
+    }    
     if (source.value.type < 2) {
         win.sceneType = 'kankan'
         let sdk = win.app 
         sdk.Scene.on('loaded', () => {
-            if (lastFakeApp) {
-                if(sdk){
-                    sync.views.bindWithSameFakeType(lastFakeApp,win)  
-                }
-            }
+            loaded() 
         }) 
     }else{ 
         debugger
         win.sceneType = 'laser' 
         win.loaded.then(sdk => {
             debugger
-            if (lastFakeApp) {
-                 
-                    sync.views.bindWithSameFakeType(lastFakeApp,win)  
-                 
-            }
+            loaded() 
         }) 
     }
      

+ 39 - 6
src/utils/ConvertViews.js

@@ -371,7 +371,8 @@ export default class ConvertViews extends THREE.EventDispatcher{
             camera.fov = data.fov
             camera.updateProjectionMatrix()
         }
-       
+        
+        this.sourceDom = sourceApp.sceneType == 'laser' ? this.sourceApp.viewer.inputHandler.domElement : this.sourceApp.app.core.get('Player').domElement
        
         if(targetPano){
             bimViewer.getViewer().setTransitionAnimationState(false) //setCameraStatus瞬间变化相机 ,or setCameraAnimation?
@@ -397,7 +398,7 @@ export default class ConvertViews extends THREE.EventDispatcher{
                 
             })  
             if(sourceApp.sceneType == 'laser'){
-                this.sourceDom = this.sourceApp.viewer.inputHandler.domElement  
+                
                 sourceApp.viewer.addEventListener('camera_changed', e => {
                     targetApp && this.receive(this.getCameraData(sourceApp))
                 })
@@ -414,7 +415,7 @@ export default class ConvertViews extends THREE.EventDispatcher{
                 
             }else if(sourceApp.sceneType == 'kankan'){
                 let player = this.sourceApp.app.core.get('Player')
-                this.sourceDom = player.domElement 
+                //this.sourceDom = player.domElement 
                 var cameraMove = (e)=>{//暂时只有漫游模式
                     if(!e.hasChanged.cameraChanged2)return
                     this.receive(this.getCameraData(sourceApp)) 
@@ -435,7 +436,8 @@ export default class ConvertViews extends THREE.EventDispatcher{
             this.loaded = true
             this.receive(data)
         }else{
-             
+            //补充control
+            
             bimViewer.getViewer().animator.setDuration(60)//滚轮缩放时长,原先:1000
           
             let baseSpeed = THREE.MathUtils.clamp( modelSize.length() / 10, 1, 10)
@@ -446,10 +448,41 @@ export default class ConvertViews extends THREE.EventDispatcher{
                 let info = bimViewer.getCameraStatus()  
                 let dis = modelBound.distanceToPoint(info.position)
                 let speed = baseSpeed + dis / 8
-                console.log('speed', speed)
+                //console.log('speed', speed)
                
                 this.bimFlyTo({forwardDis: e.wheelDelta > 0 ? speed : -speed})
-            })
+            }) 
+            
+            //右键pan
+            let dragging , pointerDelta = new THREE.Vector2, pointerStart = new THREE.Vector2
+            dom.addEventListener('mousedown', e => {  
+                if(e.button == 2){//右键
+                    dragging = true
+                    pointerStart.set(e.clientX, e.clientY)
+                }
+            }) 
+            dom.addEventListener('mousemove', e => {   
+                if(!dragging)return
+                let pointerEnd = new THREE.Vector2(e.clientX, e.clientY) 
+                pointerDelta.subVectors(pointerEnd, pointerStart)
+                //pointerDelta.multiplyScalar(0.07)
+                pointerStart.copy(pointerEnd)
+                
+                bimViewer.getViewer().cameraControl.pan(pointerDelta.x,pointerDelta.y)
+            }) 
+            targetApp.addEventListener('mouseup', e => {   
+                dragging = false
+            }) 
+            this.sourceDom.addEventListener('mouseup', e => {   
+                dragging = false 
+            }) 
+            this.addEventListener('globalMouseUp', e => {   
+                dragging = false
+            }) 
+            
+            targetApp.CLOUD.GlobalData.WalkRotationSpeed = -0.2 //反向一下
+             
+            //bimViewer.viewer.getViewer().editorManager.userInputEditor.enable = true//这句近似将control切换成orbit
             
         }
          

+ 3 - 1
src/utils/sync.js

@@ -197,8 +197,10 @@ function laserLoaded(app){
 
 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)  
+    targetApp && targetApp.sceneType == 'laser' && targetApp.viewer && targetApp.viewer.inputHandler.onMouseUp(e) 
+    views.dispatchEvent({type:'globalMouseUp'})
+
 })