xzw hace 2 años
padre
commit
947b9e5b8c

+ 1 - 1
src/custom/materials/ModelTextureMaterial.js

@@ -280,7 +280,7 @@ let shader = {
                     }else{ */
                         gl_FragDepthEXT = mix(depth0.y,depth1.y,progress);
                     //}
-                    gl_FragDepthEXT = min(1.0, gl_FragDepthEXT);    //防止部分手机出现黑块。ios 16  。 因为我给的超远值超出范围
+                    gl_FragDepthEXT = clamp(gl_FragDepthEXT, 0.0, 1.0);     //防止部分手机出现黑块。ios 16  。 因为我给的超远值超出范围
                     
                     
 

+ 2 - 2
src/custom/objects/Sprite.js

@@ -65,7 +65,7 @@ export default class Sprite extends THREE.Mesh{
     
     realVisible(){
         
-        if(!this.visible && this.unvisibleReasons && this.unvisibleReasons.some(e=>e != 'unableCompute')){
+        if(!this.visible && this.unvisibleReasons && this.unvisibleReasons.some(e=>e.reason != 'unableCompute')){
             return false
         }
         
@@ -166,8 +166,8 @@ export default class Sprite extends THREE.Mesh{
                 if(!r2.trueSide){
                     return  Potree.Utils.updateVisible(this, 'unableCompute', false)//, console.log('  !r2.trueSide', )
                 }
-                //Potree.Utils.updateVisible(this, 'notTrueSide', true)
                  
+                Potree.Utils.updateVisible(this, 'unableCompute', true)
                 let p1 = r1.pos,  p2 = r2.pos
                 let vec = new THREE.Vector2().subVectors(p1,p2);
                 let angle = -vec.angle() //根据测量线在屏幕上的角度在旋转label,使之和屏幕上的二维线平行。

+ 5 - 1
src/custom/objects/tool/Measure.js

@@ -679,7 +679,11 @@ export class Measure extends ctrlPolygon{
     }
     
     focus(){  
-        viewer.focusOnObject(this, 'measure')
+    
+    
+        let dontChangeCamDir = viewer.mainViewport.camera.type == 'OrthographicCamera' && math.closeTo( viewer.mainViewport.view.pitch , -1.57079632)  //俯视图不改角度
+    
+        viewer.focusOnObject(this, 'measure', null, {dontChangeCamDir})
         
         if(this.clickSelected)return
         this.setSelected(true, 'focus')

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

@@ -445,6 +445,7 @@ export class MeasuringTool extends THREE.EventDispatcher{
 			this.viewer.removeEventListener('cancel_insertions', Exit);
             //pressExit && this.viewer.inputHandler.removeEventListener('keydown', pressExit);
             this.viewer.removeEventListener('global_click', click)
+            this.viewer.removeEventListener('global_touchstart', click ) 
             this.viewer.removeEventListener('global_mousemove', ifAtWrongPlace) 
             viewer.dispatchEvent({
                 type : "CursorChange", action : "remove",  name:"polygon_AtWrongPlace"

+ 8 - 0
src/custom/objects/tool/ctrlPolygon.js

@@ -129,6 +129,14 @@ export class ctrlPolygon extends THREE.Object3D {
                 } 
                 o.marker.addEventListener('mouseover', mouseover);
                 o.marker.addEventListener('mouseleave', mouseleave);
+                
+                o.marker.addEventListener('startDragging', (e)=>{//for mobile
+                    this.setMarkerSelected(o.marker, 'hover', 'single'); 
+                });
+                o.marker.addEventListener('drop', (e)=>{//for mobile
+                    this.setMarkerSelected(o.marker, 'unhover', 'single'); 
+                });
+                
                 o.marker.removeEventListener('addHoverEvent',addHoverEvent) 
             }
             o.marker.addEventListener('addHoverEvent',addHoverEvent)//当非isNew时才添加事件

+ 34 - 33
src/custom/viewer/ViewerNew.js

@@ -3553,40 +3553,40 @@ export class Viewer extends ViewerBase{
             target.copy(object.getCenter()) 
         
               
-            
-            //试试改变位置(方向),直视测量线。能避免倾斜角度造成的非常不居中、以及看不到面的情况 
-            if(object.points.length>2/*  && window.focusMeasureFaceToIt */){
-                
-                let facePlane = object.facePlane || new THREE.Plane().setFromCoplanarPoints(...object.points.slice(0,3) )
-                let normal = facePlane.normal.clone()                
-                let angle = this.scene.view.direction.angleTo(normal)
-                let minDiff = THREE.Math.degToRad(60) 
-                //console.log('angle',angle)
-                if(angle>minDiff && angle<Math.PI-minDiff){//当几乎正对时就不执行
-                    if(angle<Math.PI/2){ //在背面
-                        normal.negate()
-                    }
-                    let dir = new THREE.Vector3().subVectors(camera.position, target).normalize() 
-                    let newDir = new THREE.Vector3().addVectors(dir,normal)//两个角度的中间
-                    cameraPos.copy(target.clone().add(newDir))
-                }   
-            }else if(object.points.length == 2){ //线段
-                let lineDir = new THREE.Vector3().subVectors(object.points[0],object.points[1]).normalize()
-                let angle = this.scene.view.direction.angleTo(lineDir)
-                let maxDiff = Math.PI*0.25// 45度
-                if(angle<maxDiff || angle>Math.PI-maxDiff){//当几乎正对时就不执行
-                    if(angle>Math.PI/2){  //令dir和lineDir成钝角
-                        lineDir.negate()
+            if(!o.dontChangeCamDir){
+                //试试改变位置(方向),直视测量线。能避免倾斜角度造成的非常不居中、以及看不到面的情况 
+                if(object.points.length>2/*  && window.focusMeasureFaceToIt */){
+                    
+                    let facePlane = object.facePlane || new THREE.Plane().setFromCoplanarPoints(...object.points.slice(0,3) )
+                    let normal = facePlane.normal.clone()                
+                    let angle = this.scene.view.direction.angleTo(normal)
+                    let minDiff = THREE.Math.degToRad(60) 
+                    //console.log('angle',angle)
+                    if(angle>minDiff && angle<Math.PI-minDiff){//当几乎正对时就不执行
+                        if(angle<Math.PI/2){ //在背面
+                            normal.negate()
+                        }
+                        let dir = new THREE.Vector3().subVectors(camera.position, target).normalize() 
+                        let newDir = new THREE.Vector3().addVectors(dir,normal)//两个角度的中间
+                        cameraPos.copy(target.clone().add(newDir))
+                    }   
+                }else if(object.points.length == 2){ //线段
+                    let lineDir = new THREE.Vector3().subVectors(object.points[0],object.points[1]).normalize()
+                    let angle = this.scene.view.direction.angleTo(lineDir)
+                    let maxDiff = Math.PI*0.25// 45度
+                    if(angle<maxDiff || angle>Math.PI-maxDiff){//当几乎正对时就不执行
+                        if(angle>Math.PI/2){  //令dir和lineDir成钝角
+                            lineDir.negate()
+                        } 
+                        let dir = new THREE.Vector3().subVectors(camera.position, target).normalize() 
+                        let mid = new THREE.Vector3().addVectors(lineDir, dir).normalize() //中间法向量(如果刚好dir和lineDir反向,那得到的为零向量,就不移动了,但一般不会酱紫吧)
+                        let newDir = new THREE.Vector3().addVectors(dir, mid)
+                        cameraPos.copy(target.clone().add(newDir))
                     } 
-                    let dir = new THREE.Vector3().subVectors(camera.position, target).normalize() 
-                    let mid = new THREE.Vector3().addVectors(lineDir, dir).normalize() //中间法向量(如果刚好dir和lineDir反向,那得到的为零向量,就不移动了,但一般不会酱紫吧)
-                    let newDir = new THREE.Vector3().addVectors(dir, mid)
-                    cameraPos.copy(target.clone().add(newDir))
+                }else{
+                    console.error('measure 没有facePlane points点数还不为2?')
                 } 
-            }else{
-                console.error('measure 没有facePlane points点数还不为2?')
-            } 
-
+            }
              
             position = getPosWithFullBound(object.points, null, target, cameraPos  )
             
@@ -3821,7 +3821,8 @@ export class Viewer extends ViewerBase{
             }, duration)
          
         }else if(camera.type == "OrthographicCamera"){   
-            viewer.scene.view.moveOrthoCamera(this.mainViewport,  { endPosition:position, target ,
+            viewer.scene.view.moveOrthoCamera(this.mainViewport,  { endPosition:position, 
+                target: o.dontChangeCamDir?null:target,
                 boundSize, 
                 endYaw:o.endYaw,  endPitch:o.endPitch,
                 callback:()=>{

+ 10 - 6
src/viewer/NavigationCube.js

@@ -25,7 +25,7 @@ import {OrbitControls} from "../navigation/OrbitControlsNew.js";
 
 const Colors = {
     black : '#161A1A',
-    blue: '#00F',
+    blue: '#3290ff',
     gray: '#878585' ,
     white:'#ffffff'
 }
@@ -582,11 +582,15 @@ class NavigationCube{
                 
                 faceMesh.addEventListener('click', (e)=>{  
                     if(viewer.mainViewport.view.isFlying())return
+                    
+                    let dir = directions[name]
+                    if(name == 'top'){
+                        let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine && e.points.length == 2)  //使基准线在俯视图中水平
+                        let yaw = baseLine ? new THREE.Vector2().subVectors(baseLine.points[0], baseLine.points[1]).angle() : 0 
+                        dir = baseLine ? {dir: new THREE.Vector3(0,0,-1),yaw,pitch: -1.5707963267948966} : directions[name]
+                    }                        
                      
-                    let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine)  //使基准线在俯视图中水平
-                    let yaw = baseLine ? new THREE.Vector2().subVectors(baseLine.points[0], baseLine.points[1]).angle() : 0 
-                     
-                    navCubeViewer.switchView('ortho', baseLine ? {dir: new THREE.Vector3(0,0,-1),yaw,pitch: -1.5707963267948966} : directions[name] ,   ()=>{ 
+                    navCubeViewer.switchView('ortho', dir, ()=>{ 
                         faceMesh.material.uniforms.faceColor.value.set(Colors.black)
                     }) 
                     faceMesh.material.uniforms.faceColor.value.set(Colors.blue) 
@@ -719,7 +723,7 @@ class NavCubeViewer extends ViewerBase{
             
             //外部传消息,使进入俯视 
             this.addEventListener('enterTopView',()=>{  
-                let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine)  //使基准线在俯视图中水平
+                let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine && e.points.length == 2)  //使基准线在俯视图中水平
                 let yaw = baseLine ? new THREE.Vector2().subVectors(baseLine.points[0], baseLine.points[1]).angle() : 0 
                 this.switchView('ortho', {dir: new THREE.Vector3(0,0,-1),yaw,pitch: -1.5707963267948966}) 
             })