Browse Source

fix: 修复多数据集时点位绑定个错误的bug, 改善移动、pan的速度, 修复俯视旋转不受控制的bug。

xzw 11 months ago
parent
commit
20e7e3b3a3
2 changed files with 23 additions and 20 deletions
  1. 4 2
      src/components/header/index.vue
  2. 19 18
      src/utils/ConvertViews.js

+ 4 - 2
src/components/header/index.vue

@@ -127,7 +127,7 @@ const getCurPosInfo = () => {
     let pos1, id
     if (app.sceneType == 'laser') {
         pos1 = app.viewer.images360.position
-        id = app.viewer.images360.currentPano?.id
+        id = app.viewer.images360.currentPano?.sid
     } else {
         pos1 = app.app.core.get('Player').currentPano.position
         id = app.app.core.get('Player').currentPano.id
@@ -225,6 +225,7 @@ const onCancel = () => {
 }
 const onSubmit = () => {
     showLoading.value = true
+    console.log('---save--:', points.value)
     http.post(`smart-site/project/updatePanos`, {
         projectId: props.project.projectId,
         panos: JSON.stringify(points.value),
@@ -234,7 +235,7 @@ const onSubmit = () => {
             if (response.success) {
                 showTips.value = 'BIM' + t('common.syncSuccess')
                 setTimeout(() => {
-                    window.location.href = window.location.href.replace('&adjust', '&split')
+                    //window.location.href = window.location.href.replace('&adjust', '&split')
                 }, 4000)
             } else if (response.code == 4008) {
                 showLogin.value = true
@@ -253,6 +254,7 @@ watchEffect(() => {
         if (props.project && props.project.panos) {
             points.value.p1 = props.project.panos.p1
             points.value.p2 = props.project.panos.p2
+            console.log('------load---------',points.value)
         }
     }
 })

+ 19 - 18
src/utils/ConvertViews.js

@@ -307,15 +307,13 @@ export default class ConvertViews extends THREE.EventDispatcher{
         this.sourceApp = sourceApp
         this.targetApp = targetApp
         
-        let modelSize = new THREE.Vector3
         bimViewer = this.bimViewer = targetApp.viewer 
+        let modelSize = new THREE.Vector3 
         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)
-        
-        
+        //bimViewer.setFlySpeedRate(THREE.MathUtils.clamp(  modelSize.length() / 10, 1, 6)) //会被限制
+        bimViewer.setFlySpeedRate(1.5) //方向键速度,保持较小匀速,方便细调。
         
         this.sourceDom = sourceApp.sceneType == 'laser' ? this.sourceApp.viewer.inputHandler.domElement : this.sourceApp.app.core.get('Player').domElement
        
@@ -416,10 +414,11 @@ export default class ConvertViews extends THREE.EventDispatcher{
             
             
             
+            
             //将第一人称control补充完:
              
             //scroll
-            let baseSpeed = THREE.MathUtils.clamp( Math.sqrt(modelSize.length()) / 5, 0.3, 8) //在modelBound中时的速度
+            let baseSpeed = THREE.MathUtils.clamp( Math.sqrt(modelSize.length()) / 5, 0.3, 3) //在modelBound中时的速度
             //console.log('baseSpeed',baseSpeed)
             let dom = bimViewer.getDomElement();
             dom.addEventListener('mousewheel', e => {   //原版滚轮不能缩放,自己加一个
@@ -441,7 +440,7 @@ export default class ConvertViews extends THREE.EventDispatcher{
                 }
             }) 
             dom.addEventListener('mousemove', e => {   
-                if(!dragging)return
+                if(!dragging)return 
                 let pointerEnd = new THREE.Vector2(e.clientX, e.clientY) 
                 pointerDelta.subVectors(pointerEnd, pointerStart) 
                 pointerStart.copy(pointerEnd)
@@ -678,10 +677,11 @@ export default class ConvertViews extends THREE.EventDispatcher{
         }else if(customer && customer.sceneType == 'kankan'){
             this.syncView(sourceApp, targetApp, convertInfo)
         }else{
+            let info = bimViewer.getCameraStatus()
             let msg = {
                 position,
                 target,
-                up: new THREE.Vector3(0,0,1),
+                up:info.up,  
                 //前三个缺一不可  
                 fov: data.fov ,      //fov 用setCameraStatus 无效
             }
@@ -722,10 +722,10 @@ export default class ConvertViews extends THREE.EventDispatcher{
             ]
             
             let getPano2 = (app)=>{
-                if(panoData.p1.id != void 0){//老数据用的id, 因为slam场景无漫游点所以改为用pos
+                if(panoData.p1.id != void 0){//老数据用的id, 因为slam场景无漫游点所以改为用pos 
                     return [
-                        app.fakeApp.panos.find(e=>e.id == panoData.p1.id), 
-                        app.fakeApp.panos.find(e=>e.id == panoData.p2.id)
+                        app.fakeApp.panos.find(e=>e.sid == panoData.p1.id || e.id == panoData.p1.id), 
+                        app.fakeApp.panos.find(e=>e.sid == panoData.p2.id || e.id == panoData.p2.id)
                     ] 
                 }else{
                     return [
@@ -744,8 +744,8 @@ export default class ConvertViews extends THREE.EventDispatcher{
             }
             
             if( !sourcePano[0] || !sourcePano[1] || !targetPano[0] || !targetPano[1] ){
-                console.error('场景绑定有误   !sourcePano[0] || !sourcePano[1] || !targetPano[0] || !targetPano[1]')
-            }
+                console.error('缺少绑定漫游点,请重新绑定', sourcePano, targetPano  )
+            }//可能原因:漫游点改变
             
             
             return {sourcePano, targetPano} 
@@ -827,8 +827,8 @@ export default class ConvertViews extends THREE.EventDispatcher{
                 
             }
             if(app.sceneType != 'bim'){
-                function getPanos(panos){ // only data
-                    return panos.map(e=>{return {id:e.id, position:e.position, quaternion:e.quaternion}})
+                function getPanos(panos){ // only data 
+                    return panos.map(e=>{return {id:e.id, sid:e.sid,  position:e.position, quaternion:e.quaternion}})
                 }   
                 fakeApp.panos = app.sceneType == 'laser' ? getPanos(app.viewer.images360.panos) : getPanos(app.app.core.get('Player').model.panos.list) 
             } 
@@ -973,7 +973,7 @@ export default class ConvertViews extends THREE.EventDispatcher{
         let info = bimViewer.getCameraStatus() 
         
         let vec = new THREE.Vector3().subVectors(info.target, info.position)
-        let radius = vec.length() //修改了target到position的距离会影响pan时的速度
+        let radius = 10//vec.length() //修改了target到position的距离会影响pan时的速度
         let dir = vec.clone().normalize()
         
         let position = data.position
@@ -991,7 +991,7 @@ export default class ConvertViews extends THREE.EventDispatcher{
         let msg = {//不能修改
             position,
             target,
-            up: new THREE.Vector3(0,0,1),
+            up: info.up, //   不能是Vector3(0,0,1),否则俯视时会不受控制打转
             //前三个缺一不可  
             
         } 
@@ -1005,8 +1005,9 @@ export default class ConvertViews extends THREE.EventDispatcher{
             if(app.viewer.images360.panos.length == 0){//slam
                 app.viewer.mainViewport.view.setView({position, duration:1000})
             }else{
+                
                 app.viewer.images360.flyToPano(Object.assign({},{ 
-                    pano: app.viewer.images360.getPano(panoId)
+                    pano: app.viewer.images360.getPano(panoId, (panoId+'').includes('|')?'sid':'id')
                 },o)) 
             } 
         }else{