xzw 2 years ago
parent
commit
1c54bdc0cd

+ 8 - 6
src/custom/objects/Sprite.js

@@ -25,7 +25,8 @@ export default class Sprite extends THREE.Mesh{
         
         
         let update = (e)=>{
-            this.update(e) 
+            //this.update(e)
+            this.needsUpdate = true
         }
         viewer.mapViewer && viewer.mapViewer.addEventListener("camera_changed",  update) 
         viewer.addEventListener("camera_changed",  update) 
@@ -35,7 +36,8 @@ export default class Sprite extends THREE.Mesh{
          
         
         let applyMatrix = (e)=>{
-            this.applyMatrix(e)
+            if(this.needsUpdate) this.update(e)
+            else this.applyMatrix(e)
         }
         viewer.addEventListener("raycaster", applyMatrix)        //before render
         viewer.addEventListener("render.begin", applyMatrix) //before render  //magnifier时要禁止吗
@@ -78,15 +80,15 @@ export default class Sprite extends THREE.Mesh{
             v = false
         }            
          
-        if(!this.latestRealVisi && v){//变为可见后先update 
+        /* if(!this.latestRealVisi && v){//变为可见后先update 
             this.latestRealVisi = true
             setTimeout(()=>{
-                this.update()
+                this.update()                           -----删掉是因为更新时返回false导致无法立即更新
             },1)//延迟 防止无限调用
             return false
-        }
+        } 
         
-        this.latestRealVisi = v
+        this.latestRealVisi = v*/
         return v;
     }
     

+ 1 - 1
src/custom/objects/tool/MeasuringTool.js

@@ -535,7 +535,7 @@ export class MeasuringTool extends THREE.EventDispatcher{
             //console.log('measure clicked33', !!e.intersectPoint)
              
             //var I = e.intersectPoint && (e.intersectPoint.orthoIntersect || e.intersectPoint.location)
-            var I = e.intersect && (e.intersect.orthoIntersect || e.intersect.location)
+            var I = e.intersect && (/* e.intersect.orthoIntersect ||  */e.intersect.location)
             if(!I){
                 return measure.dispatchEvent('intersectNoPointcloud') 
             }

+ 1 - 1
src/custom/objects/tool/ctrlPolygon.js

@@ -173,7 +173,7 @@ export class ctrlPolygon extends THREE.Object3D {
         e.drag.object.isDragging = true 
         
         
-        I = e.intersect && (e.intersect.orthoIntersect || e.intersect.location)
+        I = e.intersect && (/* e.intersect.orthoIntersect || */ e.intersect.location)
         
         //记录数据集
         

+ 82 - 1
src/viewer/NavigationCube.js

@@ -586,10 +586,22 @@ class NavigationCube{
                     navCubeViewer.switchView('ortho', directions[name] ,   ()=>{
                         this.changingView = false
                         faceMesh.material.uniforms.faceColor.value.set(Colors.black)
+                    }) 
+                }); 
+                 
+                if(name == 'Top'){
+                    navCubeViewer.addEventListener('enterTopView',()=>{ 
+                        faceMesh.dispatchEvent('click')  
+                        
+                    }) 
+                    navCubeViewer.addEventListener('leaveTopView',()=>{ 
+                        if(navCubeViewer.lastView){
+                            navCubeViewer.switchView2(navCubeViewer.lastView) 
+                        }
                     })
                     
                     
-                }); 
+                }
                  
             })
         }  
@@ -800,6 +812,15 @@ class NavCubeViewer extends ViewerBase{
     } */
     switchView(type, {yaw, pitch, dir}={}, done){
         let view = viewer.mainViewport.view
+        this.lastView = view.clone()
+        if(viewer.mainViewport.camera.type == 'OrthographicCamera'){
+            this.lastView.isOrtho = true;
+            this.lastView.zoom = viewer.mainViewport.camera.zoom
+            
+        }
+        
+        
+        
         if(type == 'ortho'){
             let startCamera, endCamera
             if(viewer.mainViewport.camera != viewer.scene.cameraO){
@@ -862,6 +883,66 @@ class NavCubeViewer extends ViewerBase{
             } 
         }
     } 
+    
+    
+    
+    
+    
+    switchView2(viewInfo){ //直接输入view改变
+        let view = viewer.mainViewport.view
+        let startCamera, endCamera 
+    
+    
+        if(viewInfo.isOrtho){
+            if(viewer.mainViewport.camera != viewer.scene.cameraO){
+                 
+                startCamera = viewer.scene.cameraP
+                endCamera = viewer.scene.cameraO
+                
+                
+            }else{
+                view.moveOrthoCamera(viewer.mainViewport,  {endPosition:viewInfo.position,
+                    endPitch: viewInfo.pitch, endYaw: viewInfo.yaw ,  zoom: viewInfo.zoom, 
+                    callback:()=>{ 
+                        
+                    }, 
+                }, 500)
+            }
+        }else{
+            if(viewer.mainViewport.camera == viewer.scene.cameraO){
+                startCamera = viewer.scene.cameraO
+                endCamera = viewer.scene.cameraP 
+            }else{
+                view.setView(viewer.mainViewport,  { position:view.position,
+                    endPitch: viewInfo.pitch, endYaw: viewInfo.yaw ,   
+                    startCamera,  endCamera,            
+                    callback:()=>{ 
+                        
+                    }, 
+                }, 500)
+            }
+            
+        }
+        
+        
+        if(startCamera){
+            view.tranCamera(viewer.mainViewport,  { position:viewInfo.position,
+                endPitch: viewInfo.pitch, endYaw: viewInfo.yaw ,   
+                startCamera,   endCamera,   midCamera:viewer.scene.cameraBasic ,            
+                callback:()=>{ 
+                    
+                }, 
+            }, 500)
+        } 
+        
+    }
+    
+    
+    
+    
+    
+    
+    
     rotateSideCamera(angle){
         this.splitScreen.rotateSideCamera(viewer.mainViewport,angle)
     }