瀏覽代碼

fix: speed

xzw 2 年之前
父節點
當前提交
2193f65303
共有 3 個文件被更改,包括 50 次插入18 次删除
  1. 1 1
      src/pages/Viewer.vue
  2. 46 6
      src/utils/ConvertViews.js
  3. 3 11
      src/utils/sync.js

+ 1 - 1
src/pages/Viewer.vue

@@ -36,7 +36,7 @@
                         <i class="iconfont" :class="[points.p1 ? 'icon-positioning01' : 'icon-positioning02']"></i>
                         <i class="iconfont" :class="[points.p1 ? 'icon-positioning01' : 'icon-positioning02']"></i>
                         <span>P1</span>
                         <span>P1</span>
                     </div>
                     </div>
-                    <div :class="{ active: points.p2 }" @click="onP1Click('right')">
+                    <div :class="{ active: points.p2 }" @click="onP2Click('right')">
                         <i class="iconfont" :class="[points.p2 ? 'icon-positioning01' : 'icon-positioning02']"></i>
                         <i class="iconfont" :class="[points.p2 ? 'icon-positioning01' : 'icon-positioning02']"></i>
                         <span>P2</span>
                         <span>P2</span>
                     </div>
                     </div>

+ 46 - 6
src/utils/ConvertViews.js

@@ -227,12 +227,14 @@ export default class ConvertViews extends THREE.EventDispatcher{
         this.sourceApp = sourceApp
         this.sourceApp = sourceApp
         this.targetApp = targetApp
         this.targetApp = targetApp
         let data = this.getCameraData(sourceApp)
         let data = this.getCameraData(sourceApp)
-       
+        let modelSize = new THREE.Vector3
         bimViewer = this.bimViewer = targetApp.viewer 
         bimViewer = this.bimViewer = targetApp.viewer 
-        bimViewer.setNavigationMode(targetApp.Glodon.Bimface.Viewer.NavigationMode3D.Walk)
-        //bimViewer.setFlySpeedRate(3)
-       
-       
+        let modelBound = bimViewer.getViewer().modelManager.boundingBox
+        modelBound.getSize(modelSize)
+        bimViewer.setNavigationMode(targetApp.Glodon.Bimface.Viewer.NavigationMode3D.Walk) 
+        bimViewer.setFlySpeedRate(THREE.MathUtils.clamp(  modelSize.length() / 10, 1, 6)) //会被限制
+        //bimViewer.getViewer().setWalkSpeedRate(2)
+        
         let camera = bimViewer.getViewer().camera
         let camera = bimViewer.getViewer().camera
         if(camera.fov != data.fov){
         if(camera.fov != data.fov){
             camera.fov = data.fov
             camera.fov = data.fov
@@ -301,6 +303,23 @@ export default class ConvertViews extends THREE.EventDispatcher{
             needBindEvent && this.bindCamEvent() 
             needBindEvent && this.bindCamEvent() 
             this.loaded = true
             this.loaded = true
             this.receive(data)
             this.receive(data)
+        }else{
+             
+            bimViewer.getViewer().animator.setDuration(60)//滚轮缩放时长,原先:1000
+          
+            let baseSpeed = THREE.MathUtils.clamp( modelSize.length() / 10, 1, 10)
+            
+            let dom = bimViewer.getDomElement();
+            dom.addEventListener('mousewheel', e => { 
+                if(e.wheelDelta == 0)return //mac
+                let info = bimViewer.getCameraStatus()  
+                let dis = modelBound.distanceToPoint(info.position)
+                let speed = baseSpeed + dis / 10
+                console.log('speed', speed)
+               
+                this.bimFlyTo({forwardDis: e.wheelDelta > 0 ? speed : -speed})
+            })
+            
         }
         }
          
          
         
         
@@ -312,7 +331,28 @@ export default class ConvertViews extends THREE.EventDispatcher{
     leftCanChangePos(){
     leftCanChangePos(){
         return this.sourceApp.sceneType == 'laser' && this.sourceApp.Potree.settings.displayMode != 'showPanos'
         return this.sourceApp.sceneType == 'laser' && this.sourceApp.Potree.settings.displayMode != 'showPanos'
     }
     }
-
+    
+    
+    bimFlyTo(data){
+        let info = bimViewer.getCameraStatus() 
+        let dir = new THREE.Vector3().subVectors(info.target, info.position).normalize()
+        let position = data.position
+        if(!position){
+            position = new THREE.Vector3().addVectors(info.position, dir.clone().multiplyScalar(data.forwardDis))//forwardDis:前进距离
+       
+        }
+        
+        let target = new THREE.Vector3().addVectors(position, dir)
+        let msg = {
+            position,
+            target,
+            up: new THREE.Vector3(0,0,1),
+            //前三个缺一不可  
+            
+        } 
+        bimViewer.setCameraStatus(msg)
+        
+    }
  
  
     bindCamEvent(){//传递到另一边的dom 
     bindCamEvent(){//传递到另一边的dom 
         this.lockCamera(true)
         this.lockCamera(true)

+ 3 - 11
src/utils/sync.js

@@ -21,6 +21,7 @@ export function setPanoWithBim(data){
 }
 }
 
 
 export function flyToP1P2(data){
 export function flyToP1P2(data){
+    //left
     if(sourceApp.sceneType == 'laser'){
     if(sourceApp.sceneType == 'laser'){
         sourceApp.viewer.images360.flyToPano({pano:sourceApp.viewer.images360.getPano(data.id)}) 
         sourceApp.viewer.images360.flyToPano({pano:sourceApp.viewer.images360.getPano(data.id)}) 
     }else{
     }else{
@@ -28,17 +29,8 @@ export function flyToP1P2(data){
         player.flyToPano({pano:model.panos.index[data.id]})  
         player.flyToPano({pano:model.panos.index[data.id]})  
     }
     }
     
     
-    {
-        let bimViewer = targetApp.viewer
-        let info = bimViewer.getCameraStatus() 
-        let msg = {
-            position:data.position,
-            target:info.target,
-            up: new THREE.Vector3(0,0,1),
-            //前三个缺一不可  
-            
-        } 
-        bimViewer.setCameraStatus(msg)
+    {//right
+        views.bimFlyTo({position:data.position})
     }
     }
 }
 }