xzw 2 rokov pred
rodič
commit
23033c416b

+ 2 - 1
src/custom/modules/panos/Images360.js

@@ -245,7 +245,8 @@ export class Images360 extends THREE.EventDispatcher{
 
                     
                     if(mode != displayMode){ 
-                        
+                        this.dispatchEvent({type:'beginChangeMode',mode})
+                        if(mode == 'showPanos' && viewer.mainViewport.camera.type == 'OrthographicCamera')return //等待切换
                         
                         let camera = viewer.scene.getActiveCamera()
                         if(mode == 'showPanos' && viewer.mainViewport.view.isFlying()){//飞完才能切换全景 

+ 9 - 4
src/custom/objects/tool/MeasuringTool.js

@@ -373,6 +373,8 @@ export class MeasuringTool extends THREE.EventDispatcher{
                     measure.markers[length-1].visible = true;
                      
                     marker.isDragging = true 
+                    
+                    console.log('continueDrag' , marker.uuid)
                     measure.continueDrag(marker, e)    
                 } 
 				 
@@ -532,9 +534,8 @@ export class MeasuringTool extends THREE.EventDispatcher{
                 viewer.controls.setEnable(false)
             }
             
-            //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)
             if(!I){
                 return measure.dispatchEvent('intersectNoPointcloud') 
@@ -554,9 +555,13 @@ export class MeasuringTool extends THREE.EventDispatcher{
             e.drag.notPressMouse = !isMobile
             
             //if(!measure.dragMarker(e) || !measure.dropMarker(e))return
+            
+             
              
-            measure.dragMarker(e) 
+            measure.dragMarker(e)  
             measure.dropMarker(e)
+            this.viewer.inputHandler.drag = null //否则会继续拖拽
+            
             
             if(measure.maxMarkers > 1 ){
                 measure.markers[1].visible = false

+ 4 - 3
src/custom/objects/tool/ctrlPolygon.js

@@ -206,6 +206,7 @@ export class ctrlPolygon extends THREE.Object3D {
     
     
     dragChange(intersectPos, i, atMap){
+        
         let len = this.markers.length 
         let oldPoint = this.points[i]; 
         if(atMap){
@@ -213,6 +214,7 @@ export class ctrlPolygon extends THREE.Object3D {
         }
         let location = intersectPos.clone()
         
+       
         
         
         if(this.faceDirection && this.maxMarkers == 2 && len == 2){//add 固定方向的点不直接拖拽
@@ -406,7 +408,7 @@ export class ctrlPolygon extends THREE.Object3D {
     }
     
     dropMarker(e){
-        //console.log('dropMarker')
+         
         if (this.isNew && !browser.isMobile() && e.pressDistance>Potree.config.clickMaxDragDis){//拖拽的话返回
             return this.continueDrag(null,e)   
         } 
@@ -432,7 +434,6 @@ export class ctrlPolygon extends THREE.Object3D {
             
         }
          
-        
         if (e.button != THREE.MOUSE.RIGHT && (//右键click的话继续执行,因为会停止
                 this.isIntersectSelf == 'all' && this.isNew //有线相交了
                 || this.isAtWrongPlace && this.isNew
@@ -721,7 +722,7 @@ export class ctrlPolygon extends THREE.Object3D {
         this.editStateChange(true)
         var timer = setTimeout(()=>{//等 drag=null之后 //右键拖拽结束后需要重新得到drag 
             if(this.parent && object.isDragging){
-                //console.log('continueDrag')        
+                console.log('continueDrag', object.uuid)        
                 viewer.inputHandler.startDragging( object ,
                     {endDragFun: e.drag.endDragFun, notPressMouse:e.drag.notPressMouse, dragViewport:e.drag.dragViewport} 
                 )

+ 10 - 1
src/custom/potree.shim.js

@@ -25,6 +25,12 @@ import {Shaders} from "../../build/shaders/shaders.js";
   
 import {LineSegmentsGeometry} from '../../libs/three.js/lines/LineSegmentsGeometry.js'  
 import {LineGeometry} from '../../libs/three.js/lines/LineGeometry.js'  
+import {ExtendView} from '../viewer/ExtendView.js'
+import {ExtendScene} from '../viewer/ExtendScene.js'
+
+ 
+
+
 KeyCodes.BACKSPACE = 8
 
 
@@ -2078,4 +2084,7 @@ LineGeometry.prototype.setPositions = function( array  ) { //xzw改成类似Line
     LineSegmentsGeometry.prototype.setPositions.call(this, points ); 
     return this; 
 }  
- 
+ 
+ 
+Object.assign(ExtendView.prototype, THREE.EventDispatcher.prototype)
+Object.assign(ExtendScene.prototype, THREE.EventDispatcher.prototype );

+ 1 - 1
src/custom/viewer/ViewerNew.js

@@ -4083,7 +4083,7 @@ export class Viewer extends ViewerBase{
 		}
        
         performance.mark('loop-start') ;// 无论有没有reportTimings都要获取,因为getBestCound需要
-        
+        this.dispatchEvent('loopStart')
        
         this.shelterCount = {byTex:0, byCloud:0,   maxByTex: 100, maxByCloud:0   } //清空 因ifPointBlockedByIntersect可能在任何时候触发,所以需要一开始就定义这个,且每次计算最大可计算次数太麻烦了就定义一个吧。
         

+ 1 - 1
src/navigation/FirstPersonControlsNew.js

@@ -335,7 +335,7 @@ export class FirstPersonControls extends THREE.EventDispatcher {
                     }else{ */
                     direction = this.viewer.inputHandler.getMouseDirection().direction  //定点缩放
                      
-                    if(e.intersect){//和intersect的墙越接近,速度越慢,便于focus细节
+                    if(e.intersect && e.intersect.location){//和intersect的墙越接近,速度越慢,便于focus细节
                         let dis = camera.position.distanceTo(e.intersect.location);
                         
                         speed = THREE.Math.clamp(dis * 0.1,  0.3, speed) 

+ 10 - 2
src/navigation/InputHandlerNew.js

@@ -52,7 +52,7 @@ export class InputHandler extends THREE.EventDispatcher {
         this.lastPointerUpTime = 0
         
         this.touches = []
-
+        this.interactHistory = {move:0} //add       
 
         this.hoverViewport = viewer.viewports[0]
         
@@ -94,7 +94,9 @@ export class InputHandler extends THREE.EventDispatcher {
             }) 
         }
         
-        
+        window.viewer.addEventListener('loopStart',()=>{
+            this.interactHistory = {}  //清空
+        })
 	}
 
 	/* addInputListener (listener) {
@@ -947,6 +949,12 @@ export class InputHandler extends THREE.EventDispatcher {
     }
 
     dealPointerMove(e, isTouch){ 
+    
+        if(this.interactHistory.move) return  //一帧只触发一次
+        this.interactHistory.move = 1
+         
+    
+    
         if(isTouch){
             var  {  camera, viewport  } = this.updateTouchesInfo(e) 
         }else { 

+ 1 - 1
src/viewer/ExtendScene.js

@@ -231,7 +231,7 @@ class ExtendScene extends Scene{
 
 
 
-Object.assign( ExtendScene.prototype, THREE.EventDispatcher.prototype );
+//Object.assign( ExtendScene.prototype, THREE.EventDispatcher.prototype );
 
 
 

+ 1 - 1
src/viewer/ExtendView.js

@@ -465,6 +465,6 @@ class ExtendView extends View {
 
 };
 
-Object.assign(ExtendView.prototype, THREE.EventDispatcher.prototype)
+//Object.assign(ExtendView.prototype, THREE.EventDispatcher.prototype)
 
 export {ExtendView}

+ 37 - 24
src/viewer/NavigationCube.js

@@ -568,25 +568,24 @@ class NavigationCube{
                 
                 //不过平板无hover事件
                 faceMesh.addEventListener('mouseover', (e)=>{
-                    if(this.changingView)return
+                    if(navCubeViewer.changingView)return
                     faceMesh.material.uniforms.faceColor.value.set(Colors.blue)
                     //console.log('变', name)
                     navCubeViewer.dispatchEvent('content_changed')
                 });
                 faceMesh.addEventListener('mouseleave', (e)=>{
-                    if(this.changingView)return
+                    if(navCubeViewer.changingView)return
                     faceMesh.material.uniforms.faceColor.value.set(Colors.black)
                     //console.log('回', name)
                     navCubeViewer.dispatchEvent('content_changed')
                 });
                 
-                faceMesh.addEventListener('click', (e)=>{
-                    this.changingView = true 
-                    faceMesh.material.uniforms.faceColor.value.set(Colors.blue) 
-                    navCubeViewer.switchView('ortho', directions[name] ,   ()=>{
-                        this.changingView = false
+                faceMesh.addEventListener('click', (e)=>{  
+                    if(navCubeViewer.switchView('ortho', directions[name] ,   ()=>{ 
                         faceMesh.material.uniforms.faceColor.value.set(Colors.black)
-                    }) 
+                    }) ){
+                        faceMesh.material.uniforms.faceColor.value.set(Colors.blue) 
+                    }
                 }); 
                  
                 if(name == 'Top'){
@@ -718,9 +717,17 @@ class NavCubeViewer extends ViewerBase{
                 margin:{x:300, y:250} ,
             } ]
             this.splitScreen.splitStart(viewportProps)
+            
+            
+            viewer.images360.addEventListener('beginChangeMode',(e)=>{
+                if(e.mode == 'showPanos')this.switchView('perspective',{}, ()=>{
+                      Potree.settings.displayMode = viewer.images360.latestRequestMode
+                })
+                
+            }) 
         })
         
-        //this.addEventListener('resize',(e)=>{console.log('resize',e)})
+      
         
     }
    
@@ -811,6 +818,7 @@ class NavCubeViewer extends ViewerBase{
         }
     } */
     switchView(type, {yaw, pitch, dir}={}, done){
+        if(this.changingView)return
         let view = viewer.mainViewport.view
         this.lastView = view.clone()
         if(viewer.mainViewport.camera.type == 'OrthographicCamera'){
@@ -843,14 +851,16 @@ class NavCubeViewer extends ViewerBase{
                 viewer.scene.cameraO.updateProjectionMatrix();
                     
             }
-            
+            console.log('变成正交')
             viewer.focusOnObject(viewer.bound, 'boundingBox', 1000, {
                 endPitch: pitch, endYaw: yaw , dir,  startCamera, endCamera
             }).promise.done(()=>{  
-                viewer.dispatchEvent('reachTopView')
+                //viewer.dispatchEvent('reachTopView')
+                this.changingView = false
                 done && done()
                 navCubeViewer.dispatchEvent('content_changed')
             })
+            this.changingView = true
         }else{
             
             if(viewer.mainViewport.camera == viewer.scene.cameraO){
@@ -871,17 +881,19 @@ class NavCubeViewer extends ViewerBase{
                 let position = new THREE.Vector3().copy(viewer.mainViewport.shiftTarget).sub(view.direction.clone().multiplyScalar(dis)); 
                 //view.position.copy(viewer.mainViewport.shiftTarget).sub(view.direction.clone().multiplyScalar(dis)); 
                 this.controls.setEnable(true)
-                viewer.dispatchEvent('leaveTopView')
-
+                //viewer.dispatchEvent('leaveTopView')
+                console.log('变回透视')
                 view.tranCamera(viewer.mainViewport,  { position ,   
                     callback:()=>{ 
-                        
+                        done && done()
+                        this.changingView = false
                     }, startCamera:viewer.scene.cameraO, endCamera:viewer.scene.cameraP, midCamera:viewer.scene.cameraBasic
                 }, 500)
-
+                this.changingView = true
                 
             } 
         }
+        return this.changingView
     } 
     
     
@@ -889,22 +901,22 @@ class NavCubeViewer extends ViewerBase{
     
     
     switchView2(viewInfo){ //直接输入view改变
+        if(this.changingView)return
         let view = viewer.mainViewport.view
         let startCamera, endCamera 
-    
+        this.changingView = true
     
         if(viewInfo.isOrtho){
-            if(viewer.mainViewport.camera != viewer.scene.cameraO){
-                 
+            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:()=>{ 
-                        
+                        this.changingView = false
                     }, 
                 }, 500)
             }
@@ -913,11 +925,12 @@ class NavCubeViewer extends ViewerBase{
                 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:()=>{ 
-                        
+                        this.changingView = false
                     }, 
                 }, 500)
             }
@@ -925,12 +938,12 @@ class NavCubeViewer extends ViewerBase{
         }
         
         
-        if(startCamera){
+        if(startCamera){ 
             view.tranCamera(viewer.mainViewport,  { position:viewInfo.position,
                 endPitch: viewInfo.pitch, endYaw: viewInfo.yaw ,   
                 startCamera,   endCamera,   midCamera:viewer.scene.cameraBasic ,            
                 callback:()=>{ 
-                    
+                    this.changingView = false
                 }, 
             }, 500)
         }