xzw 2 年之前
父節點
當前提交
f03ce70354
共有 4 個文件被更改,包括 45 次插入19 次删除
  1. 13 4
      src/custom/objects/Magnifier.js
  2. 13 0
      src/custom/utils/Common.js
  3. 13 6
      src/custom/viewer/ViewerNew.js
  4. 6 9
      src/viewer/NavigationCube.js

File diff suppressed because it is too large
+ 13 - 4
src/custom/objects/Magnifier.js


+ 13 - 0
src/custom/utils/Common.js

@@ -437,6 +437,19 @@ var Common = {
     }, 
     }, 
         
         
     
     
+    watch: function(object, propName, initialValue){ //监听某个属性的变化
+        let v = initialValue
+        Object.defineProperty(object, propName, {
+            get: function() {
+                return v
+            },
+            set: function(e) {
+                 console.warn('watch:',propName, e)
+                 v = e 
+            }
+        }) 
+    },
+      
     
     
     
     
 }  
 }  

+ 13 - 6
src/custom/viewer/ViewerNew.js

@@ -70,9 +70,6 @@ import {OrbitControls} from "../../navigation/OrbitControlsNew.js";
 import { ClassificationScheme } from "../../materials/ClassificationScheme.js";
 import { ClassificationScheme } from "../../materials/ClassificationScheme.js";
 import { VRButton } from '../../../libs/three.js/extra/VRButton.js';
 import { VRButton } from '../../../libs/three.js/extra/VRButton.js';
 
 
-
- 
- 
  
  
  
  
  
  
@@ -122,7 +119,8 @@ export class Viewer extends ViewerBase{
         }
         }
          
          
   
   
-        
+        this.splitScreen = new SplitScreen()
+         
         this.navigateMode = 'free' // 'panorama'; 'free'自由模式是只显示点云或者未进入到漫游点, 
         this.navigateMode = 'free' // 'panorama'; 'free'自由模式是只显示点云或者未进入到漫游点, 
         this.isEdit = true
         this.isEdit = true
         this.waitQueue = []  
         this.waitQueue = []  
@@ -3529,7 +3527,13 @@ export class Viewer extends ViewerBase{
                 boundSize.y = Math.max(min, boundSize.y)
                 boundSize.y = Math.max(min, boundSize.y)
             }
             }
             if(camera.type == 'OrthographicCamera'){
             if(camera.type == 'OrthographicCamera'){
-                dis = boundSize.length()  
+                //dis = boundSize.length()   
+                o.dontChangeCamDir = true //强制不改方向
+                //必须在模型外部
+                this.mainViewport.targetPlane.setFromNormalAndCoplanarPoint(this.mainViewport.view.direction, this.bound.center ) 
+                this.mainViewport.targetPlane.projectPoint(target,  this.mainViewport.shiftTarget ) //得到target在中心面的投影
+                let pos = this.splitScreen.getPosOutOfModel(this.mainViewport, this.bound.size)  //得到观察位置(shiftTarget投影到模型外部)
+                dis = pos.distanceTo(target)   
             }else{
             }else{
                 let aspect = boundSize.x / boundSize.y
                 let aspect = boundSize.x / boundSize.y
                 if(camera.aspect > aspect){//视野更宽则用bound的纵向来决定
                 if(camera.aspect > aspect){//视野更宽则用bound的纵向来决定
@@ -3546,8 +3550,11 @@ export class Viewer extends ViewerBase{
             //三个顶点以上的由于measure的中心不等于bound的中心,所以点会超出bound外。 且由于视椎近大远小,即使是两个点的,bound居中后线看上去仍旧不居中.
             //三个顶点以上的由于measure的中心不等于bound的中心,所以点会超出bound外。 且由于视椎近大远小,即使是两个点的,bound居中后线看上去仍旧不居中.
              
              
             //获得相机最佳位置
             //获得相机最佳位置
+            
+           
+            
             let dir 
             let dir 
-            if(o.dontChangeCamDir){
+            if(o.dontChangeCamDir){ 
                 dir = viewer.mainViewport.view.direction.negate()
                 dir = viewer.mainViewport.view.direction.negate()
             }else{
             }else{
                 dir = new THREE.Vector3().subVectors(cameraPos, target).normalize()  
                 dir = new THREE.Vector3().subVectors(cameraPos, target).normalize()  

+ 6 - 9
src/viewer/NavigationCube.js

@@ -9,7 +9,7 @@ import {InputHandler} from "../navigation/InputHandlerNew.js";
 
 
 import {CameraMode  } from "../defines.js"
 import {CameraMode  } from "../defines.js"
 
 
-import SplitScreen from "../custom/utils/SplitScreen.js";
+
  
  
  
  
 //import {FirstPersonControls} from '../navigation/FirstPersonControlsNew.js'
 //import {FirstPersonControls} from '../navigation/FirstPersonControlsNew.js'
@@ -675,8 +675,7 @@ class NavCubeViewer extends ViewerBase{
         }) ]
         }) ]
         
         
         this.cube = new NavigationCube(this.scene,  w/2 )
         this.cube = new NavigationCube(this.scene,  w/2 )
-        this.splitScreen = new SplitScreen()
-         
+        
         
         
         viewer.addEventListener('camera_changed', e => {
         viewer.addEventListener('camera_changed', e => {
             if (e.viewport == listenViewport && (/* e.changeInfo.positionChanged ||  */e.changeInfo.quaternionChanged)) {
             if (e.viewport == listenViewport && (/* e.changeInfo.positionChanged ||  */e.changeInfo.quaternionChanged)) {
@@ -711,7 +710,7 @@ class NavCubeViewer extends ViewerBase{
                 viewContainsPoints:[new THREE.Vector3(0,0,0)],
                 viewContainsPoints:[new THREE.Vector3(0,0,0)],
                 margin:{x:300, y:250} ,
                 margin:{x:300, y:250} ,
             } ]
             } ]
-            this.splitScreen.splitStart(viewportProps)
+            viewer.splitScreen.splitStart(viewportProps)
             
             
             
             
             viewer.images360.addEventListener('beginChangeMode',(e)=>{
             viewer.images360.addEventListener('beginChangeMode',(e)=>{
@@ -803,7 +802,7 @@ class NavCubeViewer extends ViewerBase{
                 this.controls.setEnable(false)
                 this.controls.setEnable(false)
                  
                  
                 //假设保持到目前中心的视角范围不变
                 //假设保持到目前中心的视角范围不变
-                this.splitScreen.setShiftTarget(viewer.mainViewport, viewer.bound.center)
+                viewer.splitScreen.setShiftTarget(viewer.mainViewport, viewer.bound.center)
                 let dis = new THREE.Vector3().subVectors(viewer.mainViewport.shiftTarget,  viewer.scene.cameraO.position).length() ;   //-nearestPano[0].score
                 let dis = new THREE.Vector3().subVectors(viewer.mainViewport.shiftTarget,  viewer.scene.cameraO.position).length() ;   //-nearestPano[0].score
 	                    
 	                    
                 //根据2d->3d的式子逆求zoom
                 //根据2d->3d的式子逆求zoom
@@ -840,9 +839,7 @@ class NavCubeViewer extends ViewerBase{
                 
                 
                 //假设保持到目前中心的视角范围不变
                 //假设保持到目前中心的视角范围不变
                 
                 
-                this.splitScreen.setShiftTarget(viewer.mainViewport, viewer.bound.center)
-                viewer.mainViewport.targetPlane.setFromNormalAndCoplanarPoint( view.direction.clone(), viewer.bound.center )  
-                viewer.mainViewport.targetPlane.projectPoint(view.position, viewer.mainViewport.shiftTarget )  
+                viewer.splitScreen.setShiftTarget(viewer.mainViewport, viewer.bound.center)
                  
                  
                 let halfHeight = viewer.scene.cameraO.top/viewer.scene.cameraO.zoom 
                 let halfHeight = viewer.scene.cameraO.top/viewer.scene.cameraO.zoom 
                 let dis = halfHeight / Math.tan( THREE.Math.degToRad(viewer.scene.cameraP.fov/2)) 
                 let dis = halfHeight / Math.tan( THREE.Math.degToRad(viewer.scene.cameraP.fov/2)) 
@@ -946,7 +943,7 @@ class NavCubeViewer extends ViewerBase{
     
     
     
     
     rotateSideCamera(angle){
     rotateSideCamera(angle){
-        this.splitScreen.rotateSideCamera(viewer.mainViewport,angle)
+        viewer.splitScreen.rotateSideCamera(viewer.mainViewport,angle)
     }
     }
     
     
 } 
 }