xzw 3 年之前
父節點
當前提交
332cd99815
共有 2 個文件被更改,包括 134 次插入89 次删除
  1. 133 88
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map

+ 133 - 88
public/lib/potree/potree.js

@@ -56754,28 +56754,30 @@ void main() {
             if(useDepth) this.useDepth_ = true;
             
             
-            let setSize = (e)=>{//如果出现横条状的异常,往往是viewportOffset出错 
-                let viewport = e.viewport;
-                let viewportOffset = viewport.offset || new Vector2$1(); 
-                this.uniforms.resolution.value.copy(viewport.resolution2); 
-                this.uniforms.viewportOffset.value.copy(viewportOffset);
-                
-                //console.log('depth '+viewportOffset.toArray())
-            };
-            
-            let viewport = viewer.mainViewport;
-                 
-            setSize( {viewport} );
-            
-            viewer.addEventListener('resize',(e)=>{ 
-                if(!e.viewport || e.viewport.camera.isPerspectiveCamera){//地图不需要
-                    setSize(e);
-                    //console.log(this.name +  viewportOffset.toArray())     
-                } 
-            });  
           
             
             if(this.useDepth){  
+            
+                let setSize = (e)=>{//如果出现横条状的异常,往往是viewportOffset出错 
+                    let viewport = e.viewport;
+                    let viewportOffset = viewport.offset || new Vector2$1(); 
+                    this.uniforms.resolution.value.copy(viewport.resolution2); 
+                    this.uniforms.viewportOffset.value.copy(viewportOffset);
+                    
+                    //console.log('depth '+viewportOffset.toArray())
+                };
+                
+                let viewport = viewer.mainViewport;
+                     
+                setSize( {viewport} );
+                
+                viewer.addEventListener('resize',(e)=>{ 
+                    if(!this.useDepth || !e.viewport || e.viewport.camera.isPerspectiveCamera){//地图不需要
+                        setSize(e); 
+                    } 
+                });  
+            
+            
                 
                 /* viewer.addEventListener('camera_changed', (e)=>{
                     if(e.viewport.name != 'mapViewport') this.updateDepthParams(e) 
@@ -56924,16 +56926,15 @@ void main() {
                 
                 var scale;
                 if(info.restricMeshScale){//仅限制最大或最小的话,不判断像素大小,直接限制mesh的scale
-                    var dis = camera.position.distanceTo(this.getWorldPosition(new Vector3()));
+                    var dis = camera.position.distanceTo(this.root.getWorldPosition(new Vector3()));
                     if(dis < info.nearBound){
                         scale = info.scale * dis / info.nearBound;
                     }else {
                         scale = info.scale;
                     }
-                }else {
-                    
+                }else { 
                     scale = math.getScaleForConstantSize($.extend(info,{//规定下最小最大像素 
-                        camera , position:this.getWorldPosition(new Vector3()) ,
+                        camera , position:this.root.getWorldPosition(new Vector3()) ,
                         resolution: e.viewport.resolution//2
                     }));
                     
@@ -56985,23 +56986,25 @@ void main() {
 
     //可能还是要用html写,因为要加按钮和图片
 
-    class TextSprite extends Object3D{
-    	
+    class TextSprite extends Object3D{ 
+        //注:为了分两层控制scale,不直接extend Sprite
     	constructor( options={}){ 
             super();
     		let map = new Texture();
     		map.minFilter = LinearFilter;
     		map.magFilter = LinearFilter;
             
-            this.sprite = new Sprite$1( Object.assign({},options,
-                {
-                    root: this ,  
+            this.sprite = new Sprite$1( Object.assign({
+                    root:this
+                }
+                ,options,
+                { 
                     map,
                 })
             );
             this.add(this.sprite);
             
-            
+            this.fontWeight = options.fontWeight == void 0 ? 'Bold' : options.fontWeight;
     		this.rectBorderThick = options.rectBorderThick || 0;
     		this.textBorderThick = options.textBorderThick || 0;
     		this.fontface = 'Arial';
@@ -57061,21 +57064,21 @@ void main() {
     	updateTexture(){
     		let canvas = document.createElement('canvas');
     		let context = canvas.getContext('2d');
-    		context.font = 'Bold ' + this.fontsize + 'px ' + this.fontface; 
+    		context.font = this.fontWeight + ' ' + this.fontsize + 'px ' + this.fontface; 
            
-            context["font-weight"] = 100; //语法与 CSS font 属性相同。
+            //context["font-weight"] = 100; //语法与 CSS font 属性相同。
     		// get size data (height depends only on font size)
             
             //this.text = '啊啊啊啊啊啊fag'
             
     		let metrics = context.measureText(this.text );
     		let textWidth = metrics.width;
-    		let margin = new Vector2$1(this.fontsize, this.fontsize*0.4);
+    		let margin = new Vector2$1(this.fontsize, Math.max(  this.fontsize*0.4, 10)  );
     		let spriteWidth = 2 * margin.x + textWidth + 2 * this.rectBorderThick;
     		let spriteHeight = 2 * margin.y + this.fontsize + 2 * this.rectBorderThick; 
     		context.canvas.width = spriteWidth;
     		context.canvas.height = spriteHeight;
-    		context.font = 'Bold ' + this.fontsize + 'px ' + this.fontface;
+    		context.font = this.fontWeight + ' ' + this.fontsize + 'px ' + this.fontface; 
 
              
             let diff = 2;//针对英文大部分在baseLine之上所以降低一点(metrics.fontBoundingBoxAscent - metrics.fontBoundingBoxDescent) / 2
@@ -63100,7 +63103,7 @@ void main() {
             }
         }else { 
             if(Potree.settings.intersectOnObjs){
-                let object = viewer.objs.children.find(e=>e.dataset_id == o.datasetId);
+                let object = o.object || viewer.objs.children.find(e=>e.dataset_id == o.datasetId);
                 if(object){
                     tranMatrix = o.fromDataset ? object.matrixWorld : new Matrix4().copy(object.matrixWorld).invert(); 
                 }  
@@ -63890,21 +63893,10 @@ void main() {
                     //object.dataset_id = Date.now() //暂时
                     
                     object.traverse(e=>e.material && (e.material.transparent = true));
-                    /* object.addEventListener('select',(e)=>{
-                        if(Potree.settings.displayMode == 'showPanos')return
-                        console.log('select',e) 
-                        
-                        MergeEditor.selectModel(object, true) 
-                        return {stopContinue:true}
-                    },1)
-                    object.addEventListener('deselect',(e)=>{
-                        console.log('deselect',e) 
-                        MergeEditor.selectModel(object, false)  
-                        viewer.outlinePass.selectedObjects = []
-                    })   */
-                    object.addEventListener('click',(e)=>{
+                  
+                    /* object.addEventListener('click',(e)=>{
                         //只是为了能得到hoverElement识别才加这个侦听
-                    });
+                    }) */
                     /* let updateBound = ()=>{ 
                         object.updateMatrixWorld()
                         viewer.updateModelBound()
@@ -85943,24 +85935,21 @@ void main() {
     		}
     	}
       
+        
          
      
-     
-    	getHoveredElements (interactables, dontCheckDis, raycaster) {
-             
-            
-    		let scenes = this.hoverViewport.interactiveScenes || this.interactiveScenes.concat(this.scene);
-
-    		let interactableListeners = ['mouseup', 'mousemove', 'mouseover', 'mouseleave', 'drag', 'drop', 'click', 'select', 'deselect'];
+    	getHoveredElements (interactables, dontCheckDis, raycaster) { 
     		
             if(!interactables){
-                if(Potree.settings.editType == 'merge'){
-                    return [] /////暂时!!!!!!!!!!因为卡顿
-                } 
+                 
+                 
+                let scenes = this.hoverViewport.interactiveScenes || this.interactiveScenes.concat(this.scene);
+
+                let interactableListeners = ['mouseup', 'mousemove', 'mouseover', 'mouseleave', 'drag', 'drop', 'click', 'select', 'deselect'];
                 interactables = [];
                 for (let scene of scenes) {
                     scene.traverseVisible(node => {//检测加了侦听的object
-                        if (node._listeners && node.visible && (Potree.settings.intersectOnObjs || !this.blacklist.has(node))) {
+                        if (node._listeners && node.visible && !this.blacklist.has(node) ) {
                             let hasInteractableListener = interactableListeners.filter((e) => {
                                 return node._listeners[e] !== undefined;
                             }).length > 0;
@@ -85970,7 +85959,7 @@ void main() {
                             }                        
                         }
                     });
-                }
+                }  
     		}  
     		 
     		let camera = this.hoverViewport.camera;
@@ -102967,7 +102956,7 @@ ENDSEC
 
     const renderOrders = {
         line: 0 ,
-        spot: 1,
+        spot: 15, //高过模型
     };
     const planeGeo$3 = new PlaneGeometry(1,1);
     let texLoader$5 = new TextureLoader(); 
@@ -102977,6 +102966,7 @@ ENDSEC
     });
     let spotMat; 
     const defaultLineLength = 0.6;
+    const defaultSpotScale = 0.4;
 
     class Tag extends Object3D{
         constructor(o){
@@ -102986,11 +102976,11 @@ ENDSEC
              
             this.lineLength = o.lineLength != void 0 ? o.lineLength : defaultLineLength;
             this.position.copy(o.position);
-            this.normal = o.normal != void 0 ? o.normal : new Vector3(0,0,1);
+            this.normal = o.normal != void 0 ? o.normal : new Vector3(0,0,-1);
             this.root = o.root;
             
             
-            this.matrixAutoUpdate = false;
+            //this.matrixAutoUpdate = false
             
             this.build();
             
@@ -103006,26 +102996,45 @@ ENDSEC
             if(!spotMat){
                 spotMat = new MeshBasicMaterial({
                     transparent:true,
-                    map: texLoader$5.load(Potree.resourcePath+'/textures/icon-fire.png' ),  
+                    map: texLoader$5.load(Potree.resourcePath+'/textures/spot_default.png' ),  
                 });
             }
             let endPos = this.normal.clone().multiplyScalar(this.lineLength); 
             
-            //this.spot = new Sprite({mat:spotMat}) 
-            this.spot = new Mesh(planeGeo$3, spotMat);
-            this.spot.position.copy(endPos);
-            
+      
             this.line = LineDraw.createLine([
                 new Vector3(0,0,0), 
                 endPos
             ],  {mat:lineMat});
             
             
+            let group = new Object3D();
+            this.spot = new Mesh(planeGeo$3, spotMat);  
+            this.spot.scale.set(defaultSpotScale,defaultSpotScale,defaultSpotScale); 
+            this.titleLabel = new TextSprite({root: group, text:'1', sizeInfo:{width2d:200}, 
+                textColor:{r:255,g:255,b:255,a:1.0},
+                backgroundColor:{r:0,g:0,b:0,a:0.8},
+                borderRadius: 6,  
+                fontsize:13,  fontWeight:'',//thick
+                renderOrder : renderOrders.spot, pickOrder:renderOrders.spot,
+            }); //更新sprite时,实际更新的是root: spot的矩阵
+            this.spot.renderOrder = renderOrders.spot;
+            /* const mainLabelProp = { 
+                backgroundColor: {r: defaultColor.r*255, g: defaultColor.g*255, b: defaultColor.b*255, a:config.measure.default.opacity},
+                textColor: {r: textColor.r*255, g: textColor.g*255, b: textColor.b*255, a: 1.0},
+                fontsize:16, 
+                useDepth : true ,
+                renderOrder : 5, pickOrder:5, 
+            } */
+                
+            this.titleLabel.position.set(0,0.4,0);
+            this.titleLabel.sprite.material.depthTest = this.titleLabel.sprite.material.depthWrite = true;
             
             
-            this.titleLabel = new TextSprite({root: this.spot, text:'1'});
-            this.titleLabel.position.set(0,0,1);
-            this.add(this.spot);
+            group.position.copy(endPos);
+            group.add(this.spot);
+            group.add(this.titleLabel);
+            this.add(group);
             this.add(this.line);
             
             
@@ -103036,21 +103045,41 @@ ENDSEC
             
         }
         
-        updateMatrixWorld(){
-            
-          
-            
-            this.updateMatrix();
-            
-            
+        updateMatrixWorld(force){ //重写,只为了将root当做parent
+             
+            this.updateMatrix(); 
             this.matrixWorld.multiplyMatrices( this.root.matrixWorld, this.matrix );
-            
-            
-            
-            
-            
+             
+            const children = this.children;
+            for ( let i = 0, l = children.length; i < l; i ++ ) {
+                children[ i ].updateMatrixWorld( force );
+            }  
         }
         
+
+        updateWorldMatrix( updateParents, updateChildren ) {//重写,只为了将root当做parent
+     
+            if ( updateParents === true && this.root !== null ) {
+                this.root.updateWorldMatrix( true, false );
+            }
+
+            if ( this.matrixAutoUpdate ) this.updateMatrix();
+            this.matrixWorld.multiplyMatrices( this.root.matrixWorld, this.matrix );
+
+            if ( updateChildren === true ) {
+                const children = this.children;
+                for ( let i = 0, l = children.length; i < l; i ++ ) {
+                    children[ i ].updateWorldMatrix( false, true );
+                }
+            }
+
+        } 
+
+        
+        
+        
+        
+        
     }
 
     class TagTool extends EventDispatcher{
@@ -103090,12 +103119,16 @@ ENDSEC
             let click = (e)=>{
                 
                 
-                var I = e.intersect && (/* e.intersect.orthoIntersect ||  */e.intersect.location);
-                if(!I){
+                var worldPos = e.intersect && (/* e.intersect.orthoIntersect ||  */e.intersect.location);
+                if(!worldPos){
                     return  
                 }
+                
+                let localPos = Potree.Utils.datasetPosTransform({ toDataset: true, pointcloud:e.intersect.pointcloud, object:e.intersect.object,  position:worldPos });
+
+                
                 let tag = new Tag({
-                    title: '1', position: I.clone(),  normal:e.intersect.normal,
+                    title: '1', position: localPos,  normal:e.intersect.point.normal,
                     root: e.intersect.pointcloud || e.intersect.object}
                 ); 
                 
@@ -117488,7 +117521,20 @@ ENDSEC
             model.boundCenter = model.boundingBox.getCenter(new Vector3).applyMatrix4(model.matrixWorld);
         }
         
-    };
+    };   
+        
+        
+    /*  
+
+    note:
+
+    要注意getHoveredElements只在getIntersect时才使interactables包含加载的model, 也就是model上不能有使之成为interactables的事件,否则在鼠标hover到模型上开始转动的一瞬间很卡。
+
+
+
+
+
+    */
 
     const texLoader$9 = new TextureLoader(); 
     const circleGeo = new CircleGeometry(1.45,100);
@@ -130307,7 +130353,6 @@ ENDSEC
         
         
         
-        
     };
      
 

文件差異過大導致無法顯示
+ 1 - 1
public/lib/potree/potree.js.map