xzw 3 anos atrás
pai
commit
8c073edfd9
3 arquivos alterados com 140 adições e 77 exclusões
  1. 124 70
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 15 6
      src/sdk/cover/index.js

+ 124 - 70
public/lib/potree/potree.js

@@ -63206,6 +63206,8 @@ void main() {
          */ 
         Potree.settings.number = number || 't-o5YMR13';// 't-iksBApb'// 写在viewer前
         Potree.fileServer = fileServer; 
+        
+        
         webSite && (Potree.settings.webSite = webSite);
         
         
@@ -63649,6 +63651,9 @@ void main() {
         Potree.settings.editType = 'merge'; 
         Potree.settings.intersectOnObjs = true;
         Potree.settings.boundAddObjs = true;
+        Potree.settings.unableNavigate = true;
+        
+        
         
         let viewer = new Potree.Viewer(dom );
        
@@ -63665,7 +63670,7 @@ void main() {
             //this.bound = new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1))
             
             viewer.transformationTool.setModeEnable('scale',false);
-            viewer.ssaaRenderPass.sampleLevel = 1; //奇怪好像没啥锯齿?  sampleLevel为1 的话,ground就不会
+            viewer.ssaaRenderPass.sampleLevel = 0; //奇怪好像没啥锯齿?  sampleLevel为1 的话,ground就不会
         }
         
         Potree.settings.sizeFitToLevel = true;//当type为衰减模式时自动根据level调节大小。每长一级,大小就除以2
@@ -63734,7 +63739,7 @@ void main() {
             pointcloud.rotateInvMatrix.copy(pointcloud.rotateMatrix).invert()
             pointcloud.panos.forEach(e=>e.transformByPointcloud()) */
             pointcloud.updateBound();
-            pointcloud.getPanosBound();  
+            //pointcloud.getPanosBound()  
             viewer.updateModelBound();
         }; 
 
@@ -63751,20 +63756,13 @@ void main() {
             
             //过后改为根据intersect的点来设置底部高度;这样的话,需要发送高度
             
+            let pos = new Vector3(x,y,  planeZ  );
+            modelEditing.updateMatrixWorld();  
+            let boundCenter = modelEditing.boundingBox.getCenter(new Vector3).applyMatrix4(modelEditing.matrixWorld);
+            let diff = new Vector3().subVectors(pos, boundCenter); 
+            modelEditing.position.add(diff); //使模型中心在鼠标所在位置
             
-            
-            
-            if(modelType == 'laser'){ 
-                /* modelEditing.translateUser.copy(pos)
-                Alignment.setMatrix(modelEditing)   */
-                let pos = new Vector3(x,y,0/* planeZ */);
-                modelEditing.position.copy(modelEditing.initialPosition).add(pos); //使位置居中在boundingBox
-                
-            }else {  
-                let pos = new Vector3(x,y, modelEditing.position.z /* planeZ */);
-                modelEditing.position.copy(pos);
-                 
-            }
+             
             modelEditing.dispatchEvent("position_changed");
              
         };
@@ -63792,6 +63790,7 @@ void main() {
                     viewer.addEventListener('global_mousemove', moveModel); 
                     viewer.addEventListener('global_click', confirmPos, 3);
                 }else {
+                    MergeEditor.setModelBtmHeight(model, prop.btmHeight || 0); //默认离地高度为0
                     modelEditing = null;
                 }
                 model.updateMatrixWorld();
@@ -63846,21 +63845,23 @@ void main() {
                     //focusOnSelect(object, 1000)  
                     object.isModel = true;
                     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) 
-                        viewer.setControls(viewer.orbitControls) 
-                        MergeEditor.focusOnSelect(object) 
                         
-                        viewer.outlinePass.selectedObjects = [object]
+                        MergeEditor.selectModel(object, true) 
                         return {stopContinue:true}
                     },1)
                     object.addEventListener('deselect',(e)=>{
                         console.log('deselect',e) 
-                        viewer.setControls(viewer.fpControls)  
+                        MergeEditor.selectModel(object, false)  
                         viewer.outlinePass.selectedObjects = []
-                    }) */ 
-
+                    })   */
+                    object.addEventListener('click',(e)=>{
+                        //只是为了能得到hoverElement识别才加这个侦听
+                    });
                     let updateBound = ()=>{ 
                         object.updateMatrixWorld();
                         viewer.updateModelBound();
@@ -63883,7 +63884,8 @@ void main() {
                     glburl: prop.url,  //0.3s
                     transform : { 
                         rotation : prop.rotation,
-                        position : prop.position  
+                        position : prop.position,
+                        scale: new Vector3(prop.scale,prop.scale,prop.scale),        
                     } 
                     
                 },callback,onprogress);
@@ -85032,10 +85034,9 @@ void main() {
           
             
             if(isTouch){ 
-                this.hoveredElements = this.getHoveredElements(); 
-                  
-                let intersectPoint = this.getIntersect(viewport  );
-                
+                this.hoveredElements = this.getHoveredElements();
+                this.intersectPoint = this.getIntersect(viewport);
+                this.intersect = this.getWholeIntersect();
                 
             }
             
@@ -85098,16 +85099,18 @@ void main() {
     		 
     	}
 
-        getWholeIntersect(){//add
-            if(Potree.settings.intersectOnObjs && this.hoveredElements[0] && this.hoveredElements[0].object.isModel){
+        getWholeIntersect(hoveredElements, intersectPoint){//add
+            hoveredElements = hoveredElements || this.hoveredElements;
+            intersectPoint = intersectPoint || this.intersectPoint;  
+            if(Potree.settings.intersectOnObjs && hoveredElements[0] && hoveredElements[0].object.isModel){
                 return {//模拟点云的intersectPoint的结构写法
-                    hoveredElement : this.hoveredElements[0] ,
-                    location: this.hoveredElements[0].point,
-                    point: {normal: this.hoveredElements[0].face.normal },
-                    distance: this.hoveredElements[0].distance,
-                    object: this.hoveredElements[0].object
+                    hoveredElement : hoveredElements[0] ,
+                    location: hoveredElements[0].point,
+                    point: {normal: hoveredElements[0].face.normal },
+                    distance: hoveredElements[0].distance,
+                    object: hoveredElements[0].object
                 } 
-            }else return  this.intersectPoint  
+            }else return intersectPoint  
         }
 
 
@@ -85123,7 +85126,7 @@ void main() {
                // button: isTouch ? 0 : e.button,
                 intersectPoint:this.intersectPoint,
                 hoveredElement: this.hoveredElements[0],
-                intersect: this.getWholeIntersect() , //可能包含mesh上的,针对融合页面
+                intersect: this.intersect//this.getWholeIntersect() , //可能包含mesh上的,针对融合页面
             };
              
             
@@ -85242,7 +85245,7 @@ void main() {
                         }  
                     }
                     
-                    if(!clickElement){
+                    //if(!clickElement){
                         this.viewer.dispatchEvent($.extend(  
                             this.getEventDesc(e,isTouch),
                             {
@@ -85250,7 +85253,7 @@ void main() {
                                 pressDistance
                             }
                         )); 
-                    } 
+                    //} 
                 }
                 
     			 
@@ -85485,8 +85488,9 @@ void main() {
             
             if(e.onlyGetIntersect){ 
                 if(Potree.settings.intersectOnObjs){
-                    this.hoveredElements = this.getHoveredElements(); //应该不用发送mouseover事件吧
-                    return this.getWholeIntersect()
+                    let hoveredElements = this.getHoveredElements(); //应该不用发送mouseover事件吧
+                    let intersect = this.getWholeIntersect(hoveredElements, intersectPoint);
+                    return intersect
                 }
              
                 return intersectPoint
@@ -85587,7 +85591,13 @@ void main() {
                     }
 
                 }
-      
+                
+                
+                this.hoveredElements = hoveredElements;
+                this.intersect = this.getWholeIntersect();
+                
+                
+                
                 
                 this.viewer.dispatchEvent($.extend(  
                     this.getEventDesc(e,isTouch),
@@ -85596,12 +85606,11 @@ void main() {
                         
                     }
                 ));
-                this.hoveredElements = hoveredElements;
+                
                  
             }
             
     		
-
     		
     	}
     	
@@ -114592,7 +114601,15 @@ ENDSEC
                     let panos = entity.panos.filter(e=>pointcloud.panos.includes(e));
                     let panoCount = panos.length;
                     
-                    let score = volume / cloudVolume + panoCount / pointcloud.panos.length;
+                    let score = volume / cloudVolume; 
+                    
+                    if(pointcloud.panos.length > 0){
+                        score += panoCount / pointcloud.panos.length;
+                    }else {
+                        //score += 1
+                    }
+                    
+                    
                      
                     scores.push({entity, volume, panoCount, score}); 
                     
@@ -114929,17 +114946,19 @@ ENDSEC
             
             
             
-            viewer.addEventListener('click',(e)=>{
+            viewer.addEventListener('global_click',(e)=>{
                 if(e.intersect){
                     let object = e.intersect.object || e.intersect.pointcloud;
                     let objects = this.getAllObjects();
                     if(objects.includes(object)){ 
                         this.selectModel(object); 
-                    } 
+                    }else {
+                        this.selectModel(null);
+                    }                    
                 }else {
-                    this.selectModel(object); 
+                    this.selectModel(null); 
                 }
-            });
+            });  
             
         },
         
@@ -114962,7 +114981,7 @@ ENDSEC
         getAllObjects(){
             return viewer.objs.children.concat(viewer.scene.pointclouds)
         },
-        selectModel(model, state, by2d){
+        selectModel(model, state=true, by2d){
             if(!model) {
                 model = this.selected;
                 state = false;
@@ -114976,18 +114995,23 @@ ENDSEC
                 this.selected = model;
                 MergeEditor.focusOnSelect(model);  
                 viewer.outlinePass.selectedObjects = [model];
+                
+                if(model.isPointcloud){
+                    viewer.outlinePass.edgeStrength = 4;
+                }else {
+                    viewer.outlinePass.edgeStrength = 100;
+                }
+                console.log('selectModel', model);
+                
             }else { 
                 viewer.outlinePass.selectedObjects = [];
+                this.selected = null;
+                console.log('selectModel', null);
             } 
             
             
-            if(model.isPointcloud){
-                viewer.outlinePass.edgeStrength = 4;
-            }else {
-                viewer.outlinePass.edgeStrength = 100;
-            }
             
-            if(by2d && model){
+            if(!by2d && model){
                 model.dispatchEvent({type:'changeSelect', selected : state});
             }
              
@@ -115016,7 +115040,7 @@ ENDSEC
         },
         
         
-        setModelBtmHeight(model,z ){
+        setModelBtmHeight(model, z ){
             //无论模型怎么缩放、旋转,都使最低点为z
             if(z == void 0) z = model.btmHeight; //离地高度
             else model.btmHeight = z;
@@ -121700,7 +121724,12 @@ ENDSEC
     		pass.setSize( size.width, size.height );
 
     	},
-
+        
+        removePass: function(pass){ //add
+            let index = this.passes.indexOf(pass);
+            index > -1 && this.passes.splice(index,1);
+        },
+        
     	insertPass: function ( pass, index ) {
 
     		this.passes.splice( index, 0, pass );
@@ -122449,11 +122478,11 @@ ENDSEC
                 
                 //add
                 this.replaceDepthToViewZ( camera   );
-    	  
+    	   
     			this.oldClearColor.copy( renderer.getClearColor(new Color) );
     			this.oldClearAlpha = renderer.getClearAlpha();
-    			var oldAutoClear = renderer.autoClear;
-
+    			let oldAutoClear = renderer.autoClear;
+                let oldTarget = renderer.getRenderTarget();
     			renderer.autoClear = false;
 
     			if ( maskActive ) renderer.context.disable( renderer.context.STENCIL_TEST );
@@ -122535,9 +122564,21 @@ ENDSEC
                 
                 this.edgeDetectionMaterial.uniforms[ "visibleEdgeColor" ].value = this.visibleEdgeColor;//this.tempPulseColor1;
     			this.edgeDetectionMaterial.uniforms[ "hiddenEdgeColor" ].value = this.hiddenEdgeColor; //this.tempPulseColor2;
-    			renderer.setClearColor( 0x000000, 0 );
-                renderer.setRenderTarget(readBuffer/* this.renderTargetEdgeBuffer1 */);
-                renderer.clear();
+    			
+                
+                
+                let buffer = readBuffer;
+                if ( this.renderToScreen ) {
+                    this.quad.material.transparent = true;
+                    buffer = null; 
+                    renderer.setClearColor( this.oldClearColor, this.oldClearAlpha ); 
+                    render2();
+                }else {
+                    renderer.setClearColor( 0x000000, 0 );
+                    renderer.clear();
+                } 
+                renderer.setRenderTarget(buffer/* this.renderTargetEdgeBuffer1 */);
+                
                 renderer.render( this.scene,  this.camera/* , this.renderTargetEdgeBuffer1, true  */);
                 
                 /* 
@@ -122583,19 +122624,19 @@ ENDSEC
                 renderer.clear()
                 renderer.render(  this.scene,  this.camera );
                 */
-
+                renderer.setRenderTarget(oldTarget); 
     			renderer.setClearColor( this.oldClearColor, this.oldClearAlpha );
     			renderer.autoClear = oldAutoClear;
                 return true
     		} 
 
-    		if ( this.renderToScreen ) {
+    		/* if ( this.renderToScreen ) {
 
     			this.quad.material = this.materialCopy;
     			this.copyUniforms[ "tDiffuse" ].value = readBuffer.texture;
     			renderer.render(  this.scene ,  this.camera );
 
-    		}
+    		} */
 
     	},
 
@@ -122648,7 +122689,7 @@ ENDSEC
     	getEdgeDetectionMaterial: function (thickness) {
 
     		return new ShaderMaterial( {
-
+                
     			uniforms: {
                     "thickness": { value: thickness }, 
     				"maskTexture": { value: null },
@@ -123234,10 +123275,11 @@ ENDSEC
                 
                 
                 //add:  for 截图时抗锯齿
+                 
                 {
                     this.composer = new EffectComposer( this.renderer );
                     this.ssaaRenderPass = new SSAARenderPass(0x000000, 0);
-                    this.composer.addPass( this.ssaaRenderPass );   
+                    //this.composer.addPass( this.ssaaRenderPass );   
                     //this.ssaaRenderPass.useCopy = true
                     //this.ssaaRenderPass.renderToScreen = true; 
                     //this.ssaaRenderPass.needsSwap = false
@@ -123270,13 +123312,24 @@ ENDSEC
                     //for 融合页面
                     
                     
-                    let outlinePass = this.outlinePass = new OutlinePass( );
+                    /* let outlinePass = this.outlinePass = new OutlinePass( );
                     //composer.addPass( outlinePass );
+                    outlinePass.edgeStrength = 10
+                    outlinePass.edgeGlow = 0 
+                    outlinePass.visibleEdgeColor = new THREE.Color("#09a1b3")  
+                    outlinePass.hiddenEdgeColor = new THREE.Color("#09a1b3") 
+                    this.ssaaRenderPass.addPass(outlinePass) 
+                     */
+                    
+                    
+                    let outlinePass = this.outlinePass = new OutlinePass( );
+                    outlinePass.renderToScreen = true;  //这样更流畅,不用ssaa了,缺点是outline有锯齿
+                    this.composer.addPass( outlinePass );
                     outlinePass.edgeStrength = 10;
                     outlinePass.edgeGlow = 0; 
                     outlinePass.visibleEdgeColor = new Color("#09a1b3");  
-                    outlinePass.hiddenEdgeColor = new Color("#09a1b3"); 
-                    this.ssaaRenderPass.addPass(outlinePass);
+                    outlinePass.hiddenEdgeColor = new Color("#09a1b3");  
+                     
                       
                 }
                 
@@ -127107,6 +127160,7 @@ ENDSEC
                 
                 let setTransfrom = (name)=>{
                     let value = fileInfo.transform[name];
+                    if(!value)return
                     if(value instanceof Array){
                         object[name].fromArray(value);
                     }else {

Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 1
public/lib/potree/potree.js.map


+ 15 - 6
src/sdk/cover/index.js

@@ -69,6 +69,8 @@ export const enter = (dom) => {
         let model
         let done = (model_)=>{
             model = model_
+            props.opacity != void 0 && result.changeOpacity(props.opacity) 
+            
             model.addEventListener('changeSelect',(e)=>{
                 bus.emit('changeSelect',e.selected)
             }) 
@@ -104,9 +106,7 @@ export const enter = (dom) => {
         }
         Potree.addModel(props,  done , progressFun)
         
-        
-        
-        return { 
+        let result = {  
             bus,
             changeShow(show){ 
                 if(model){
@@ -125,7 +125,14 @@ export const enter = (dom) => {
                 }
             },
             changeOpacity(opacity){
-                model && model.travese(e=>e.material.opacity = opacity)
+                if(model){
+                    if(model.isPointcloud){
+                        model.material.opacity = opacity
+                    }else{
+                        model.traverse(e=>e.material && (e.material.opacity = opacity))
+                    }
+                }
+                 
             },
             changeBottom(z){
                 model && MergeEditor.setModelBtmHeight(model,z)
@@ -133,14 +140,14 @@ export const enter = (dom) => {
             enterRotateMode(){
                 if(model){
                     viewer.transformObject(model);
-                    viewer.transformationTool.setModeEnable('rotate',true)
+                    viewer.transformationTool.setModeEnable('rotation',true)
                     viewer.transformationTool.setModeEnable('translation',false)
                 }
             }, 
             enterMoveMode(){
                 if(model){
                     viewer.transformObject(model);
-                    viewer.transformationTool.setModeEnable('rotate',false)
+                    viewer.transformationTool.setModeEnable('rotation',false)
                     viewer.transformationTool.setModeEnable('translation',true)
                 }
             },
@@ -149,6 +156,8 @@ export const enter = (dom) => {
                 
             } */
         } 
+        
+        return result
     }