xzw 2 years ago
parent
commit
df84bb4d6b

+ 18 - 6
src/custom/modules/panoEdit/panoEditor.js

@@ -831,7 +831,7 @@ class PanoEditor extends THREE.EventDispatcher{
             
             line.addEventListener('mouseover', ()=>{
                 if(this.clickToZoomInEnabled)return
-                if(this.activeViewName == 'mainView')return                
+                //if(this.activeViewName == 'mainView')return                
                 if(this.selectedLine != line)line.material = lineMats.hovered 
                 viewer.dispatchEvent({
                     type : "CursorChange", action : "add",  name:"hoverLine"
@@ -847,7 +847,7 @@ class PanoEditor extends THREE.EventDispatcher{
             }); 
             line.addEventListener('click', (e)=>{
                 if(this.clickToZoomInEnabled)return
-                if(this.activeViewName == 'mainView')return
+                //if(this.activeViewName == 'mainView')return
                 if(this.operation == 'removeLink'){
                     if(this.selectedLine == line) this.selectLine(null)
                     return this.linkChange(pano0, pano1, 'remove')
@@ -951,7 +951,11 @@ class PanoEditor extends THREE.EventDispatcher{
             pano.addEventListener('rePos', setPos.bind(this,circle))
                
             let drag = ()=>{
-                if(this.tranMode != 'translate' || this.activeViewName == 'mainView' )return
+                if(this.activeViewName == 'mainView' && this.tranMode == 'translate'){
+                    this.transformControls.dispatchEvent('dragging')
+                    return
+                }
+                if(this.tranMode != 'translate')return
                 this.selectPano(circle.pano)                    //为了方便拖拽点云,拖动circle就直接选中
               
                 viewer.inputHandler.drag.object = null  //取消拖拽状态,否则不触发点云拖动
@@ -1119,9 +1123,11 @@ class PanoEditor extends THREE.EventDispatcher{
             let maxCount = 70, minCount = 1,  minPer = 0.3, maxPer = 1
             percent = maxPer - ( maxPer - minPer) * THREE.Math.clamp((visiCount - minCount)  / (maxCount - minCount),0,1) //dis2d越大,角度要越小  
             //pointcloud.changePointSize()
-            console.log('updatePointLevels', percent, visiCount) 
+            //console.log('updatePointLevels', percent, visiCount) 
         
-        } 
+        }else{
+            percent = null
+        }
         
         
         Potree.settings.UserDensityPercent = percent 
@@ -1140,8 +1146,14 @@ class PanoEditor extends THREE.EventDispatcher{
     }
     
     updateSelectGroup(){//更新选中的组
-        this.selectedGroup = this.panoGroup.find(e=>e.includes(this.selectedPano)) 
+        this.selectedGroup = this.panoGroup.find(e=>e.includes(this.selectedPano))  
+        if(this.selectedGroup){
+            this.selectedGroup = [this.selectedPano, ...this.selectedGroup.filter(e=>e != this.selectedPano)];//将选中的放第一个,便于旋转时绕其旋转。
+        }
+        
         this.selectedClouds = this.selectedPano ? (this.selectedGroup || [this.selectedPano]).map(e=>e.pointcloud) : []
+    
+        
     }
                 
     

+ 5 - 3
src/custom/objects/tool/TransformControls.js

@@ -129,13 +129,15 @@ var TransformControls = function ( camera, domElement, options ) {
 		domElement.addEventListener( "touchcancel", onPointerUp, false );
 		domElement.addEventListener( "touchleave", onPointerUp, false );
 
-
-        viewer.addEventListener('global_drag',(e)=>{
+        let drag = ()=>{
             if(this.dragging){
                 this.pointerMove() 
                 return {stopContinue:true}
             }
-        },10)
+        }
+        this.addEventListener('dragging',drag,10)
+        viewer.addEventListener('global_drag',drag,10)
+        
 
 	}
     

+ 0 - 0
src/modules/全是旧的。新的在custom文件夹.txt


+ 11 - 6
src/navigation/FirstPersonControlsNew.js

@@ -69,7 +69,7 @@ export class FirstPersonControls extends THREE.EventDispatcher {
         //this.enableChangePos = true
         
         this.viewer.addEventListener('camera_changed',(e)=>{
-            this.setFPCMoveSpeed(e.viewport)
+            e.viewport && this.setFPCMoveSpeed(e.viewport)
         })
         
 
@@ -199,7 +199,7 @@ export class FirstPersonControls extends THREE.EventDispatcher {
                             if(!PanoEditor.selectedGroup || !PanoEditor.checkIfAllLinked({group:PanoEditor.selectedGroup}) ){
                                 if(handleState == 'translate' && ( e.drag.intersectStart.pointclouds && Common.getMixedSet(PanoEditor.selectedClouds, e.drag.intersectStart.pointclouds).length  || PanoEditor.selectedPano.hovered)//拖拽到点云上 或 circle
                                     || handleState == 'rotate' ) 
-                                {  
+                                {                                           
                                     pointclouds = PanoEditor.selectedClouds
                                 }  
                             }else{
@@ -227,6 +227,10 @@ export class FirstPersonControls extends THREE.EventDispatcher {
                     }
                       
                     if(pointclouds){
+                        if(handleState == 'translate' && viewport.alignment.translateVec){//只能沿某个方向移动
+                            moveVec.projectOnVector(viewport.alignment.translateVec)
+                        } 
+                        
                         this.dispatchEvent({
                             type : "transformPointcloud", 
                             intersect: e.intersect.orthoIntersect,   
@@ -292,7 +296,8 @@ export class FirstPersonControls extends THREE.EventDispatcher {
                             speed = FirstPersonControls.boundPlane.distanceToPoint(this.currentViewport.position)   
                             speed = Math.max(1 , speed) 
                         }  */
-                        let lastIntersect = viewport.lastIntersect ? (viewport.lastIntersect.location || viewport.lastIntersect) : viewer.bound.center  //该viewport的最近一次鼠标和点云的交点
+                        let lastIntersect = viewport.lastIntersect && (viewport.lastIntersect.location || viewport.lastIntersect)//该viewport的最近一次鼠标和点云的交点
+                        if(!lastIntersect || !(lastIntersect instanceof THREE.Vector3))lastIntersect = viewer.bound.center  
                         let speed = camera.position.distanceTo(lastIntersect)   
                         let fov = cameraLight.getHFOVForCamera(camera, true)
                         let ratio = speed  * Math.tan(fov/2) 
@@ -532,7 +537,7 @@ export class FirstPersonControls extends THREE.EventDispatcher {
             this.setFPCMoveSpeed(this.currentViewport)
         }
         
-        if(this.currentViewport && this.currentViewport.camera.type == 'OrthographicCamera'){
+        if(this.currentViewport.camera.type == 'OrthographicCamera'){
             this.lockElevationOri = true
             this.lockRotation = true
         }else{
@@ -743,9 +748,9 @@ export class FirstPersonControls extends THREE.EventDispatcher {
             this.yawDelta = 0
             this.pitchDelta = 0 
 		}
-        if(this.translationWorldDelta.length()>0) {
+        /* if(this.translationWorldDelta.length()>0) {
            // console.log('translationDelta')
-        }
+        } */
 
 		{ // apply translation
 			view.translate(