xzw 1 месяц назад
Родитель
Сommit
d2662700e7

+ 18 - 7
src/custom/modules/clipModel/Clip.js

@@ -552,11 +552,10 @@ var Clip = {
     
     
     
-    
     getRulerBound(){//坐标尺边界 米
         let camera = viewer.mainViewport.camera
         if(!camera.isOrthographicCamera)return
-        let w = camera.right / camera.zoom //half
+        let w = camera.right / camera.zoom //half  视图宽度的一半
         let h = camera.top / camera.zoom
         
        
@@ -568,7 +567,7 @@ var Clip = {
             let p1 = p.clone().applyMatrix4(camera.matrixWorldInverse);
             boundAtCamera.expandByPoint(p1)
         }) 
-        //需要找出clipbox的bound的左上角,它在标尺中是原点
+        /* //需要找出clipbox的bound的左下角,它在标尺中是原点
         let ClipBoxLeftTop = new THREE.Vector2(boundAtCamera.min.x, boundAtCamera.max.y) //相对于相机的位置
         let camPos = new THREE.Vector2(-ClipBoxLeftTop.x, ClipBoxLeftTop.y)//由于ClipBoxLeftTop要变换到原点,所以相机位置就成了ClipBoxLeftTop的相反数, 但因是从上到下所以y再乘-1
          
@@ -579,7 +578,18 @@ var Clip = {
             right: camPos.x + w,
             bottom: camPos.y + h,       //注意从上到下增大
             top: camPos.y - h,
-        }
+        } */
+        
+        
+        let ClipBoxLeftBtm = new THREE.Vector2(boundAtCamera.min.x, boundAtCamera.min.y) //相对于相机的位置
+        let bound_ = {
+            left: -ClipBoxLeftBtm.x - w,
+            right: -ClipBoxLeftBtm.x + w,
+            bottom: -ClipBoxLeftBtm.y - h,       
+            top: -ClipBoxLeftBtm.y + h,
+        } 
+        //假想标尺中心在画面中心,那么标尺范围就是 -w到w, 现在降中心偏移到box的左边,即范围平移-x, 范围变成 -x-w到-x+w
+        
         //console.log(bound)
         //标尺里又改为左下角原点了
         return bound_ 
@@ -766,8 +776,8 @@ var Clip = {
                         
                         rulerBound.left -= marginSelf.left * meterPerPixel  //标尺范围内的宽度(米)
                         rulerBound.right += marginSelf.right * meterPerPixel 
-                        rulerBound.top -= marginSelf.top * meterPerPixel 
-                        rulerBound.bottom += marginSelf.bottom * meterPerPixel 
+                        rulerBound.top += marginSelf.top * meterPerPixel 
+                        rulerBound.bottom -= marginSelf.bottom * meterPerPixel 
                          
                         let width = img.width + marginSelf.left + marginSelf.right  //标尺范围内的像素宽度
                         let height = img.height + marginSelf.top + marginSelf.bottom
@@ -777,7 +787,8 @@ var Clip = {
                          
                         let result = await rulerToolFactory(//绘制标尺
                             [rulerBound.left, rulerBound.right],    //xRang.value,
-                            [rulerBound.top, rulerBound.bottom],    //yRang.value,
+                            //[rulerBound.top, rulerBound.bottom],    //yRang.value,
+                            [rulerBound.bottom, rulerBound.top],
                             xNumTicks,  yNumTicks,  width,  height,  '#000000' 
                         ); 
                         

+ 5 - 5
src/custom/modules/datasetAlignment/Alignment.js

@@ -353,22 +353,22 @@ var Alignment = {
     },
     
     
-    rotateAround(center, pointcloud, angle, axis){//绕center点水平转动
+    rotateAround(center, pointcloud, angle, axis=new THREE.Vector3(0,0,1)){//绕center点水平转动
         
         let vec1 = new THREE.Vector3().subVectors(pointcloud.translateUser, center);
         let rotMatrix = typeof(angle) == 'number' ? 
-                        new THREE.Matrix4().makeRotationAxis(new THREE.Vector3(0,0,1), angle) :  
+                        new THREE.Matrix4().makeRotationAxis(axis, angle) :  
                         new THREE.Matrix4().makeRotationFromQuaternion(angle)
          
         let vec2 = vec1.clone().applyMatrix4(rotMatrix) //将到旋转中心的偏差也转动
         let vec3 = new THREE.Vector3().subVectors(vec2,vec1); //这个就是多出来的一步translateUser
-        this.rotate(pointcloud, null, angle) 
+        this.rotate(pointcloud, null, angle, axis) 
         this.translate(pointcloud, vec3)
         //绕点转动就是比普通转动多一步移动到相对center的某个位置。 1 初始点云移动到自己的position; 2 移动一个vec1  3绕原点旋转 4再移动一个原本的translateUser。 绘制出来后发现移动量就是第二步vec旋转后的偏移
     },
     
     
-    rotate:function(pointcloud, deg, angle, axis){//绕各自中心水平转动(各自的position)   假设点云位移position后0,0,0就是它的中心了(根据navvis观察这样做是绕同一个点旋转的)
+    rotate:function(pointcloud, deg, angle, axis=new THREE.Vector3(0,0,1)){//绕各自中心水平转动(各自的position)   假设点云位移position后0,0,0就是它的中心了(根据navvis观察这样做是绕同一个点旋转的)
         let qua 
         
         if(deg || typeof(angle) == 'number'){
@@ -385,7 +385,7 @@ var Alignment = {
         } 
         
         if(!qua){
-            qua = new THREE.Quaternion().setFromAxisAngle(axis || new THREE.Vector3(0,0,1), angle)     
+            qua = new THREE.Quaternion().setFromAxisAngle(axis , angle)     
         } 
         pointcloud.orientationUser.premultiply(qua)