Sfoglia il codice sorgente

fix: measure label

xzw 2 anni fa
parent
commit
ca3c99b4b7
2 ha cambiato i file con 52 aggiunte e 13 eliminazioni
  1. 51 12
      public/static/lib/potree/potree.js
  2. 1 1
      public/static/lib/potree/potree.js.map

+ 51 - 12
public/static/lib/potree/potree.js

@@ -72495,7 +72495,7 @@ void main()
 	            //transformPointcloud(pointcloud,dataset)
 	            scene.addPointCloud(pointcloud);
 	            
-	             
+	              
 	             
 	             
 	        
@@ -75461,21 +75461,56 @@ void main()
 	            let orient2d;
 	        
 	            if(this.lineDir){
-	                /* let r1 = Potree.Utils.getPos2d(new THREE.Vector3, camera, viewer.renderArea, e.viewport);
-	                let r2 = Potree.Utils.getPos2d(this.lineDir, camera, viewer.renderArea, e.viewport); */
+	                this.root.updateMatrix();//先更新,getWorldPosition才能得到正确的
+	                this.root.updateMatrixWorld(true);
+	                let center = this.root.getWorldPosition(new Vector3());
+	                //由于两个端点容易在屏幕外,所以使用center和center加dir
+	                let lineDir = this.lineDir.clone();
 	                
-	                let r1 = Potree.Utils.getPos2d(this.lineDir[0], camera, viewer.renderArea, e.viewport);
-	                let r2 = Potree.Utils.getPos2d(this.lineDir[1], camera, viewer.renderArea, e.viewport);
 	                
-	                if(!r1.trueSide || !r2.trueSide){
-	                    return console.log('!r1.trueSide || !r2.trueSide', )
+	                let r1 = Potree.Utils.getPos2d(center, camera, viewer.renderArea, e.viewport); 
+	                if(!r1.trueSide)return Potree.Utils.updateVisible(this, 'notTrueSide', false); //console.error('!r1.trueSide') //中心点如果在背面直接不渲染了
+	                    
+	                let r2, point2;
+	                
+	                let p2State = '', len=1,  p2StateHistory = [];
+	                while(p2State != 'got' && p2StateHistory.length<10){ 
+	                    point2 = center.clone().add(lineDir.multiplyScalar(len));
+	                     
+	                    r2 = Potree.Utils.getPos2d(point2, camera, viewer.renderArea, e.viewport);  
+	                    if(!r2.trueSide){ //很少遇到点2在背面的
+	                        if(!p2StateHistory.includes('tooLong-reverse')){
+	                            p2State = 'tooLong-reverse';  //先尝试反向
+	                            len = -len;
+	                        }else {
+	                            p2State = 'tooLong';
+	                            len = len / 2;
+	                        }
+	                    }else {
+	                        let dis = r2.pos.distanceTo(r1.pos);
+	                        if(dis<10 && !p2StateHistory.includes('tooLong')){//和r1的屏幕距离太近,要加长,否则精度过低
+	                            p2State = 'tooShort';
+	                            len = 100/dis * len;  
+	                        }else { 
+	                            p2State = 'got'; break;
+	                        }
+	                    } 
+	                    p2StateHistory.push(p2State); 
+	                }
+	                //console.log(p2StateHistory,len)
+	                
+	                if(!r2.trueSide){
+	                    return Potree.Utils.updateVisible(this, 'notTrueSide', false), console.log('  !r2.trueSide', )
 	                }
+	                Potree.Utils.updateVisible(this, 'notTrueSide', true);
+	                 
 	                let p1 = r1.pos,  p2 = r2.pos;
 	                let vec = new Vector2().subVectors(p1,p2);
-	                let angle = vec.angle(); 
-	                let axis = p1.x < p2.x ? 1 : -1; 
-	                orient2d = new Quaternion().setFromAxisAngle(new Vector3(0,0,1), axis*angle);
-	                console.log(this.parent.text, MathUtils$1.radToDeg(angle), axis );
+	                let angle = -vec.angle(); //根据测量线在屏幕上的角度在旋转label,使之和屏幕上的二维线平行。
+	                if(p1.x < p2.x) angle += Math.PI;  //避免字是倒着的情况
+	                 
+	                orient2d = new Quaternion().setFromAxisAngle(new Vector3(0,0,1),  angle);
+	                //console.log(this.parent.text, THREE.Math.radToDeg(angle), p1.x < p2.x   )
 	            }
 	        
 	            let parentQua = this.root.parent.getWorldQuaternion(new Quaternion);
@@ -75545,6 +75580,10 @@ void main()
 	        //console.log(this.root.name + e.viewport.name + " : "+this.root.matrixWorld.elements)
 	    }
 	    
+	    
+	     
+	    
+	    
 	    setUniforms(name,value){
 	        this.material.setUniforms(name,value); 
 	    }
@@ -81075,7 +81114,7 @@ void main()
 	                if(edgeLabel.visible){
 	                    setEdgeLabel(edgeLabel,point,nextPoint,distance);
 	                }  
-	                edgeLabel.sprite.lineDir = [point,nextPoint];//new THREE.Vector3().subVectors(point,nextPoint)
+	                edgeLabel.sprite.lineDir = new Vector3().subVectors(point,nextPoint).normalize(); //[point,nextPoint]
 	            }
 	        } 
 

File diff suppressed because it is too large
+ 1 - 1
public/static/lib/potree/potree.js.map