xzw 2 years ago
parent
commit
8a61c2548e
3 changed files with 327 additions and 150 deletions
  1. 324 149
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 2 0
      src/sdk/cover/index.js

+ 324 - 149
public/lib/potree/potree.js

@@ -597,6 +597,10 @@
             siteModeOnlyMapVisi:12,//只能mapViewer可见
             siteModelMapUnvisi:13,//只有mapViewer不可见
             siteModeSideVisi:14,//只有侧面可见
+            
+            
+            layer1: 10,// 备用1
+            layer2: 15,// 备用2
         },
         
         renderOrders:{ //会影响到绘制、pick时的顺序。
@@ -63754,13 +63758,11 @@ void main() {
         }
         
         Potree.settings.sizeFitToLevel = true;//当type为衰减模式时自动根据level调节大小。每长一级,大小就除以2
-        Potree.loadPointCloudScene = function(sceneCode, done, onError){//对应4dkk的场景码
-            Potree.loadDatasets((data)=>{
-                var originDataset = data.find(e=>e.sceneCode == sceneCode);//只加载初始数据集  
-                var cloudPath = `${Potree.settings.urls.prefix}/${Potree.settings.webSite}/${sceneCode}/data/${sceneCode}/webcloud/cloud.js`; 
-                var timeStamp = originDataset.createTime ? originDataset.createTime.replace(/[^0-9]/ig,'') : '';  //每重算一次后缀随createTime更新一次 
-                //console.warn(dataset.sceneName, 'timeStamp', timeStamp)
-                Potree.loadPointCloud(cloudPath, originDataset.sceneName , sceneCode, timeStamp, e => {
+        Potree.loadPointCloudScene = function(sceneCode, type, id, done, onError){//对应4dkk的场景码
+              
+            let loadCloud = (cloudPath, sceneName, sceneCode, timeStamp, color)=>{
+                
+                Potree.loadPointCloud(cloudPath, sceneName , sceneCode, timeStamp, e => {
                     let scene = viewer.scene;
                     let pointcloud = e.pointcloud; 
                     let config = Potree.config.material;
@@ -63772,8 +63774,7 @@ void main() {
                     pointcloud.changePointSize(config.realPointSize);  //material.size =  config.pointSize;
                     pointcloud.changePointOpacity(1);
                     material.shape = Potree.PointShape.SQUARE; 
-                    pointcloud.color = pointcloud.material.color = originDataset.color;  
-                    pointcloud.dataset_id = originDataset.id;//供漫游点找到属于的dataset点云
+                    color && (pointcloud.color = pointcloud.material.color = color);     
                     pointcloud.timeStamp = timeStamp; 
                     //transformPointcloud(pointcloud, originDataset)
                     scene.addPointCloud(pointcloud);
@@ -63797,10 +63798,23 @@ void main() {
                     viewer.dispatchEvent('allLoaded');
                     done(pointcloud);
                 },onError); 
-                    
                 
-            }, sceneCode, onError);      
-             
+                
+            };
+            
+            if(type == 'laser'){ 
+                Potree.loadDatasets((data)=>{
+                    let originDataset = data.find(e=>e.sceneCode == sceneCode);//只加载初始数据集  
+                    let timeStamp = originDataset.createTime ? originDataset.createTime.replace(/[^0-9]/ig,'') : '';  //每重算一次后缀随createTime更新一次 
+                    let cloudPath = `${Potree.settings.urls.prefix}/${Potree.settings.webSite}/${sceneCode}/data/${sceneCode}/webcloud/cloud.js`; 
+                    loadCloud(cloudPath, originDataset.sceneName, sceneCode, timeStamp, originDataset.color);
+                }, sceneCode, onError);
+            
+            }else {//las or ply
+                let name = type + '|' + id;
+                let cloudPath = sceneCode + '/cloud.js'; 
+                loadCloud(cloudPath, name, name, '' );
+            }   
              
         }; 
         
@@ -63878,11 +63892,11 @@ void main() {
                 
                 if(prop.isFirstLoad){
                     modelEditing = model;
-                    MergeEditor.setModelBtmHeight(model, 0); //默认离地高度为0
+                    //MergeEditor.setModelBtmHeight(model, 0) //默认离地高度为0
                     viewer.addEventListener('global_mousemove', moveModel); 
                     viewer.addEventListener('global_click', confirmPos, 3);
                 }else {
-                    MergeEditor.setModelBtmHeight(model, prop.bottom || 0); //默认离地高度为0
+                    //MergeEditor.setModelBtmHeight(model, prop.bottom || 0) //默认离地高度为0
                     modelEditing = null;
                 }
                 
@@ -63892,35 +63906,61 @@ void main() {
                 }
                 
                 
-                {//transform
+                /* {//transform --------维持离地高度和中心点的版本
+                    let updateBound = ()=>{ 
+                        model.updateMatrixWorld()
+                        viewer.updateModelBound() 
+                    }  
+                    let maintainBtmZAndCenter = ()=>{ 
+                        MergeEditor.maintainBoundXY(model)
+                        MergeEditor.setModelBtmHeight(model) 
+                        updateBound()
+                        model.dispatchEvent('transformChanged')  
+                    }
+                    model.addEventListener('position_changed', ()=>{
+                        updateBound()
+                        MergeEditor.getBoundCenter(model);//更新boundcenter
+                        MergeEditor.computeBtmHeight(model)
+                        if(prop.bottomRange && (model.btmHeight > prop.bottomRange.max || model.btmHeight < prop.bottomRange.min)){
+                            model.btmHeight = THREE.Math.clamp(model.btmHeight, prop.bottomRange.min, prop.bottomRange.max)
+                            MergeEditor.setModelBtmHeight(model)
+                            updateBound()
+                        }  
+                        model.dispatchEvent('transformChanged') 
+                    })
+                    model.addEventListener("rotation_changed", maintainBtmZAndCenter )
+                    model.addEventListener("scale_changed", maintainBtmZAndCenter )
+                    model.addEventListener('transformChanged', ()=>{
+                        MergeEditor.modelTransformCallback(model)
+                    })
+                    //离地高度只是boundingbox在transform后的最低点的高度,而非模型transform后的最低点的高度,所以旋转过后看起来不太准确
+                } */
+                
+                {//transform --------维持中心点的版本
                     let updateBound = ()=>{ 
                         model.updateMatrixWorld();
                         viewer.updateModelBound(); 
                     };  
-                    let maintainBtmZAndCenter = ()=>{ 
-                        MergeEditor.maintainBoundXY(model);
-                        MergeEditor.setModelBtmHeight(model); 
+                    let maintainCenter = ()=>{ 
+                        //MergeEditor.maintainBoundXY(model) 
+                        MergeEditor.maintainBoundCenter(model); 
                         updateBound();
                         model.dispatchEvent('transformChanged');  
                     };
                     model.addEventListener('position_changed', ()=>{
                         updateBound();
                         MergeEditor.getBoundCenter(model);//更新boundcenter
-                        MergeEditor.computeBtmHeight(model);
-                        if(prop.bottomRange && (model.btmHeight > prop.bottomRange.max || model.btmHeight < prop.bottomRange.min)){
-                            model.btmHeight = MathUtils.clamp(model.btmHeight, prop.bottomRange.min, prop.bottomRange.max);
-                            MergeEditor.setModelBtmHeight(model);
-                            updateBound();
-                        }  
+                
                         model.dispatchEvent('transformChanged'); 
                     });
-                    model.addEventListener("rotation_changed", maintainBtmZAndCenter );
-                    model.addEventListener("scale_changed", maintainBtmZAndCenter );
+                    model.addEventListener("rotation_changed", maintainCenter );
+                    model.addEventListener("scale_changed", maintainCenter );
                     model.addEventListener('transformChanged', ()=>{
                         MergeEditor.modelTransformCallback(model);
                     });
                 
-                }
+                } 
+                
                 model.updateMatrixWorld();
                 viewer.updateModelBound();
                 
@@ -63928,9 +63968,55 @@ void main() {
                 model.lastMatrixWorld = model.matrixWorld.clone();
                 done(model);
             };
-        
-            if(prop.type == 'laser'){
-                Potree.loadPointCloudScene(prop.url, (pointcloud)=>{  
+            
+            if(prop.type == 'glb'){
+                
+                
+                
+                let callback = (object)=>{
+                    //focusOnSelect(object, 1000)  
+                    object.isModel = true;
+                    //object.dataset_id = Date.now() //暂时
+                    
+                    object.traverse(e=>e.material && (e.material.transparent = true));
+                  
+                    /* object.addEventListener('click',(e)=>{
+                        //只是为了能得到hoverElement识别才加这个侦听
+                    }) */
+                     
+                    loadDone(object);
+                };
+                
+                 
+                let info = { 
+                    name: prop.type, 
+                    id: prop.id,
+                    unlit:true,
+                    /* transform : { 
+                        position : prop.position,
+                        rotation : new THREE.Euler().setFromVector3(prop.rotation), 
+                        scale: new THREE.Vector3(prop.scale,prop.scale,prop.scale),        
+                    }  */               
+                };
+                
+                if(prop.type == 'glb'){
+                    info.glburl = prop.url;  
+                }
+                     
+                  
+                viewer.loadModel(info , callback, onProgress, onError);
+                
+                
+                
+                
+                
+                
+                
+              }else {  
+                
+                 //else if(prop.type == 'las' || prop.type == 'ply')
+     
+                Potree.loadPointCloudScene(prop.url, prop.type, prop.modelId, (pointcloud)=>{  
                     pointcloud.matrixAutoUpdate = true;
                     pointcloud.initialPosition = pointcloud.position.clone();
                     
@@ -63965,54 +64051,9 @@ void main() {
                     }) */
                     
                 }, onError);
-            }else {
-                
-                 
-                let callback = (object)=>{
-                    //focusOnSelect(object, 1000)  
-                    object.isModel = true;
-                    //object.dataset_id = Date.now() //暂时
-                    
-                    object.traverse(e=>e.material && (e.material.transparent = true));
-                  
-                    /* object.addEventListener('click',(e)=>{
-                        //只是为了能得到hoverElement识别才加这个侦听
-                    }) */
-                    /* let updateBound = ()=>{ 
-                        object.updateMatrixWorld()
-                        viewer.updateModelBound()
-                        object.dispatchEvent('transformChanged')
-                        
-                    }  
-                    let maintainBtmZ = ()=>{
-                        MergeEditor.setModelBtmHeight(object)
-                        updateBound()
-                    }
-                    object.addEventListener('position_changed', updateBound ) 
-                    object.addEventListener("orientation_changed", maintainBtmZ )
-                    object.addEventListener("scale_changed", maintainBtmZ ) */
-                    loadDone(object);
-                };
-                
+            
                  
-                let info = { 
-                    name: prop.type, 
-                    id: prop.id,
-                    unlit:true,
-                    /* transform : { 
-                        position : prop.position,
-                        rotation : new THREE.Euler().setFromVector3(prop.rotation), 
-                        scale: new THREE.Vector3(prop.scale,prop.scale,prop.scale),        
-                    }  */               
-                };
                 
-                if(prop.type == 'glb'){
-                    info.glburl = prop.url;  
-                }else {
-                    info.objurl = prop.url;
-                    info.mtlurl = prop.mtlurl;
-                } 
-                viewer.loadModel(info , callback, onProgress, onError);
                 
             }
         };
@@ -86091,7 +86132,7 @@ void main() {
                 ['sceneObjects','mapObjects','measure',  'transformationTool', 'model'],
                 this.hoverViewport && this.hoverViewport.extraEnableLayers
             );
-            
+            //this.hoverViewport.beforeRender && this.hoverViewport.beforeRender()
             
             viewer.dispatchEvent( {type:'raycaster',  viewport: this.hoverViewport});//add
     		let intersections = raycaster.intersectObjects(interactables.filter(o => o.visible), true); //原本是false 检测不到children
@@ -103165,6 +103206,12 @@ ENDSEC
             
         }
         
+        
+        changeTitle(title){
+            this.titleLabel.changeText(title);
+        }
+        
+        
         updateMatrixWorld(force){ //重写,只为了将root当做parent
              
             this.updateMatrix(); 
@@ -103196,7 +103243,11 @@ ENDSEC
         } 
 
         
-        
+        dispose(){
+            this.parent.remove(this);
+            this.titleLabel.dispatchEvent({type:'dispose'});
+            
+        } 
         
         
         
@@ -103221,6 +103272,17 @@ ENDSEC
         }
         
         
+        
+        
+        createTagFromData(data){
+            let tag = new Tag({
+                title: data.title, position: data.position,  normal: data.normal,
+                root: data.root   //e.intersect.pointcloud || e.intersect.object
+            });
+            
+            return tag
+            
+        }
          
         
         startInsertion (args = {}, callback, cancelFun) {
@@ -103253,8 +103315,8 @@ ENDSEC
                 
                 let tag = new Tag({
                     title: '1', position: localPos,  normal:e.intersect.normal,
-                    root: e.intersect.pointcloud || e.intersect.object}
-                ); 
+                    root: e.intersect.pointcloud || e.intersect.object
+                }); 
                 
                 //pointcloud里加一个normal 的非float32
                 
@@ -115643,11 +115705,14 @@ ENDSEC
 
     	Object3D.call( this );
 
+        
     	this.visible = false;
     	this.domElement = domElement;
 
     	var _gizmo = new TransformControlsGizmo(options);
     	this.add( _gizmo );
+        this._gizmo = _gizmo;
+
 
     	var _plane = new TransformControlsPlane(options);
     	this.add( _plane );
@@ -115811,6 +115876,22 @@ ENDSEC
     		return this;
 
     	};
+        
+        
+        /* this.hideAxis = function ( mode, axis=[] ) {//xzw add 设置不可见的axis
+
+            var handles = [];
+    		handles = handles.concat( this._gizmo.picker[ mode ].children );
+    		handles = handles.concat( this._gizmo.gizmo[ mode ].children );
+    		handles = handles.concat( this._gizmo.helper[ mode ].children );
+            handles.forEach(e=>e.visible = false)
+            axis.forEach(name=>{
+                handles.filter(handle =>!handle.name.includes(name))
+            })
+            handles.forEach(e=>e.visible = true)
+    	}; */
+
+
 
     	// Defined getter, setter and store for a property
     	function defineProperty( propName, defaultValue ) {
@@ -115868,7 +115949,15 @@ ENDSEC
     		this.camera.updateMatrixWorld();
     		this.camera.matrixWorld.decompose( cameraPosition, cameraQuaternion, cameraScale );
 
-    		eye.copy( cameraPosition ).sub( worldPosition ).normalize();
+
+            
+            
+            if(this.camera.type == "OrthographicCamera"){//xzw add
+                eye.copy( this.view.direction);
+            }else {
+                eye.copy( cameraPosition ).sub( worldPosition ).normalize();
+            }
+    		
 
     		Object3D.prototype.updateMatrixWorld.call( this );
 
@@ -115887,7 +115976,11 @@ ENDSEC
                 //ray.setFromCamera( pointer, this.camera ); //这句会在floorplan模式get不到intersect
                 let {origin, direction} = viewer.inputHandler.getMouseDirection();  
                 ray.set(origin,  direction);
-               
+                
+                viewer.setCameraLayers(ray,   //设置能识别到的layers 
+                    ['sceneObjects','mapObjects','measure',  'transformationTool', 'model'],
+                    viewer.inputHandler.hoverViewport && viewer.inputHandler.hoverViewport.extraEnableLayers
+                );
 
 
                 var intersect = ray.intersectObjects( _gizmo.picker[ this.mode ].children, true )[ 0 ] || false;
@@ -115916,6 +116009,14 @@ ENDSEC
     			//ray.setFromCamera( pointer, this.camera ); //这句会在floorplan模式get不到intersect
     			let {origin, direction} = viewer.inputHandler.getMouseDirection();  
                 ray.set(origin,  direction);
+                
+                viewer.setCameraLayers(ray,   //设置能识别到的layers 
+                    ['sceneObjects','mapObjects','measure',  'transformationTool', 'model'],
+                    viewer.inputHandler.hoverViewport && viewer.inputHandler.hoverViewport.extraEnableLayers
+                );
+                
+                
+                
     			var planeIntersect = ray.intersectObjects( [ _plane ], true )[ 0 ] || false;
 
     			if ( planeIntersect ) {
@@ -115994,6 +116095,13 @@ ENDSEC
             let {origin, direction} = viewer.inputHandler.getMouseDirection();  
     		ray.set(origin,  direction);
 
+            viewer.setCameraLayers(ray,   //设置能识别到的layers 
+                ['sceneObjects','mapObjects','measure',  'transformationTool', 'model'],
+                viewer.inputHandler.hoverViewport && viewer.inputHandler.hoverViewport.extraEnableLayers
+            );
+
+
+
     		var planeIntersect = ray.intersectObjects( [ _plane ], true )[ 0 ] || false;
 
     		if ( planeIntersect === false ) return;
@@ -116429,7 +116537,7 @@ ENDSEC
     	this.type = 'TransformControlsGizmo';
 
     	// shared materials
-
+        this.hideAxis = {};
     	var gizmoMaterial = new MeshBasicMaterial( {
     		depthTest: false,
     		depthWrite: false,
@@ -116451,7 +116559,7 @@ ENDSEC
     	matInvisible.opacity = 0.15;
          
     	var matHelper = gizmoMaterial.clone();
-    	matHelper.opacity = 0.33;
+    	matHelper.opacity = 0.1;
 
     	var matRed = gizmoMaterial.clone();
     	matRed.color.set( 0xff0000 );
@@ -116884,24 +116992,26 @@ ENDSEC
     		for ( var i = 0; i < handles.length; i ++ ) {
 
     			var handle = handles[ i ];
+                //add
+                if(this.hideAxis[this.mode] && this.hideAxis[this.mode].some(e=>handle.name.includes(e.toUpperCase()))){
+                    viewer.updateVisible(handle, 'hidden', false);
+                    continue 
+                }   
+                
                 let visible = true;
     			// hide aligned to camera
-
-    			 
+                
                 
     			handle.rotation.set( 0, 0, 0 );
     			handle.position.copy( this.worldPosition );
 
-    			var eyeDistance = this.worldPosition.distanceTo( this.cameraPosition );
-    			
-    			//俯视图的透视和距离无关,因此在两种相机切换切换时大小过渡比较困难
-    			/* if(player.mode == "transitioning" && (player.modeTran.split('-')[0] == "floorplan" || player.modeTran.split('-')[1] == "floorplan")){
-     				eyeDistance = Math.min(eyeDistance, 6.5)//从一开始很小的距离过渡到俯视图50的高度,会变得很大。
-     			}else if(player.mode == "floorplan"){
-    				var flcamera = player.cameraControls.cameras.floorplan; 
-    				eyeDistance = (flcamera.right - flcamera.left ) / flcamera.aspect ;
-     			}
-    			 */
+
+                if(this.camera.type == "OrthographicCamera"){
+                    var eyeDistance = 800 / this.camera.zoom;
+                }else {
+                    var eyeDistance = this.worldPosition.distanceTo( this.cameraPosition );
+                }
+     
     			
     			handle.scale.set( 1, 1, 1 ).multiplyScalar( eyeDistance * this.size / 7 );
 
@@ -117484,7 +117594,10 @@ ENDSEC
     const texLoader$8 = new TextureLoader(); 
           texLoader$8.crossOrigin = "anonymous"; 
       
-
+    const edgeStrengths = {
+        pointcloud: 4,
+        glb: 100
+    };
     const viewportProps$1 = [{
         left:0,
         bottom:0,
@@ -117547,7 +117660,7 @@ ENDSEC
                 
                 this.transformControls = new TransformControls(viewer.mainViewport.camera, viewer.renderArea,{
                     
-                    dontHideWhenFaceCamera: true,
+                    //dontHideWhenFaceCamera: true,
                     /* scaleAxis: ["x", "y"],
                     //隐藏了z轴。虽然参数没用上
                     NoScaleZ: true //整体缩放时只缩放xy轴。 */ 
@@ -117556,6 +117669,28 @@ ENDSEC
                 this.transformControls.setSize(1.5);
                 viewer.scene.scene.add(this.transformControls);
                 
+                //右屏
+                this.transformControls2 = new TransformControls(viewer.mainViewport.camera, viewer.renderArea,{ 
+                }); 
+                this.transformControls.setSize(1.5);
+                viewer.scene.scene.add(this.transformControls2); 
+                viewer.setObjectLayers(this.transformControls2, 'layer2' );  
+                
+                let mouseDown = (e)=>{
+                    if(this.split && this.selected.isPointcloud){ 
+                        viewer.outlinePass.edgeStrength = 0;//暂时消失线
+                    }
+                };
+                let mouseUp = (e)=>{
+                    if(this.split && this.selected.isPointcloud){ 
+                        viewer.outlinePass.edgeStrength = edgeStrengths.pointcloud;
+                    }
+                };
+                this.transformControls.addEventListener('mouseDown',mouseDown);
+                this.transformControls2.addEventListener('mouseDown',mouseDown);
+                this.transformControls.addEventListener('mouseUp',mouseUp);
+                this.transformControls2.addEventListener('mouseUp',mouseUp);
+                
                 
             }
             
@@ -117619,8 +117754,11 @@ ENDSEC
                         if(e.type == 'global_mousedown' ){ //开始
                             //if((e.intersect.object || e.intersect.pointcloud) == this.selected){
                             if(e.intersect.pointclouds.includes(this.selected) || e.intersect.allElements.some(e=>e.object == this.selected)){
-       
-                                dragInfo = {};  
+                                
+                                dragInfo = {};   
+                                if(this.selected.isPointcloud){ 
+                                    viewer.outlinePass.edgeStrength = 0;//暂时消失线
+                                } 
                             }  
                         }
                              
@@ -117662,7 +117800,17 @@ ENDSEC
                 viewer.addEventListener('global_mousedown',  drag); 
                 viewer.addEventListener('global_drag', drag, 10);
                 viewer.addEventListener('global_mousemove', (e)=>{
-                    if(this.split &&   this.transformState && !e.drag && (e.hoverViewport.name == 'top' ||  this.transformState == 'translate')){
+                    if(this.split && this.transformState && !e.drag && (e.hoverViewport.name == 'top' ||  this.transformState == 'translate')){
+                        
+                        /* if(this.lastHoverViewport != e.hoverViewport){
+                            this.lastHoverViewport = e.hoverViewport
+                            this.transformControls.view = e.hoverViewport.view
+                            this.transformControls.camera = e.hoverViewport.camera
+                            this.transformControls.hideAxis( this.transformState, e.hoverViewport.name == 'top' ? [z] : [x,y]);
+                        } */
+                        
+                        
+                        
                         
                         let mouseover =  e.intersect.pointclouds.includes(this.selected) || e.intersect.allElements.some(e=>e.object == this.selected);
                         //let mouseover = (e.intersect.object || e.intersect.pointcloud) == this.selected
@@ -117678,13 +117826,19 @@ ENDSEC
                             }
                         }else {
                             this.clearTranCursor();
-                        } 
-                    }  
+                        }
+                        
+                    } 
                 });
                 
                 viewer.addEventListener('global_drop', (e)=>{
                     dragInfo = null;
                     this.clearTranCursor();
+                     
+                    if(this.selected.isPointcloud){ 
+                        viewer.outlinePass.edgeStrength = edgeStrengths.pointcloud;
+                    } 
+                    
                 });
             
             }
@@ -117726,6 +117880,19 @@ ENDSEC
             viewer.setControls(viewer.fpControls);  
             viewer.viewports.find(e=>e.name == 'right').rotateSide = true; 
             viewer.viewports.find(e=>e.name == 'top').alignment = true;
+           
+             
+            viewer.viewports[1].layersAdd('layer2'); 
+            viewer.viewports[0].layersAdd('layer1'); 
+            viewer.setObjectLayers(this.transformControls, 'layer1' ); 
+            this.transformControls.view = viewer.viewports[0].view;
+            this.transformControls.camera = viewer.viewports[0].camera;
+            this.transformControls._gizmo.hideAxis = {translate:['z'], rotate:['x','y','z'] };
+            this.transformControls2.view = viewer.viewports[1].view;
+            this.transformControls2.camera = viewer.viewports[1].camera;
+            this.transformControls2._gizmo.hideAxis = {translate:['x','y'], rotate:['x','y','z'] };
+            
+
             
         },
         
@@ -117739,6 +117906,13 @@ ENDSEC
                 this.showModelOutline(this.selected, true) 
                 this.selected.material.activeAttributeName = "rgba"  
             } */
+            this.transformControls.camera = viewer.viewports[0].camera;
+            this.transformControls.view = viewer.viewports[0].view; 
+            this.transformControls._gizmo.hideAxis = {};
+            viewer.setObjectLayers(this.transformControls, 'sceneObjects' );  //恢复
+            
+            
+             
         },
         
         rotateSideCamera(angle){
@@ -117806,9 +117980,9 @@ ENDSEC
                 this.showModelOutline(model);
                 
                 if(model.isPointcloud){
-                    viewer.outlinePass.edgeStrength = 4;
+                    viewer.outlinePass.edgeStrength = edgeStrengths.pointcloud;
                 }else {
-                    viewer.outlinePass.edgeStrength = 100;
+                    viewer.outlinePass.edgeStrength = edgeStrengths.glb;
                 }
                 //console.log('selectModel', model)
                 
@@ -117854,26 +118028,7 @@ ENDSEC
             }
         },
         
-        /* focusOn(object, duration = 400){  
-            let boundingBox = object.boundingBox.clone().applyMatrix4(object.matrixWorld)
-            let center = boundingBox.getCenter(new THREE.Vector3)
-            let size = boundingBox.getSize(new THREE.Vector3) 
-            let maxSize = size.length() //对角线长度
-            
-            if(object.isPointcloud){
-                maxSize /= 2
-            }
-            
-            let hfov = cameraLight.getHFOVForCamera(viewer.mainViewport.camera,true)
-            let minRadius = maxSize  / Math.tan(hfov/2)
-            //viewer.mainViewport.view.lookAt(center)
-            viewer.mainViewport.view.setView({  
-                position: center.clone().sub(viewer.mainViewport.view.direction.clone().multiplyScalar(minRadius)),
-                target: center,
-                duration 
-            })  //setView can cancel bump
-             
-        }, */
+        
         focusOn(objects, duration = 400, fitBound=true, dontLookUp){  
             if(!(objects instanceof Array)){
                 objects = [objects];
@@ -117905,9 +118060,18 @@ ENDSEC
                 
                 viewer.mainViewport.view.radius = viewer.mainViewport.camera.position.distanceTo(position);
                 //为了不改画面,不调节方向了,只能调调radius,一定程度将target靠近model
-            }
-               
-             
+            }  
+        },
+        
+        
+        moveBoundCenterTo(model,pos){ //使boundCenter在所要的位置 
+            let diff = new Vector3().subVectors(pos, model.boundCenter); 
+            model.position.add(diff); 
+        },
+        
+        getBoundCenter(model){
+            if(!model.boundCenter) model.boundCenter = new Vector3;
+            model.boundingBox.getCenter(model.boundCenter).applyMatrix4(model.matrixWorld); 
         },
         
         setModelBtmHeight(model, z ){  
@@ -117932,6 +118096,7 @@ ENDSEC
             model.btmHeight = center.z - size.z / 2; 
         },
         
+        
         maintainBoundXY(model){ //在旋转和缩放后,立即执行这个函数,使boundCenter保持原位
              
             model.updateMatrixWorld();
@@ -117941,23 +118106,21 @@ ENDSEC
             let diff = new Vector2$1().subVectors(center1,center2); 
             model.position.x += diff.x;
             model.position.y += diff.y;
-            /* model.updateMatrixWorld()
-            this.getBoundCenter(model)//再次更新,它需要和center1相同 */
             model.boundCenter.copy(center1);
-        },
+        }, 
+         
         
-        moveBoundCenterTo(model,pos){ //使boundCenter在所要的位置 
-            let diff = new Vector3().subVectors(pos, model.boundCenter); 
-            model.position.add(diff); 
-        },
         
-        getBoundCenter(model){
-            if(!model.boundCenter) model.boundCenter = new Vector3;
-            model.boundingBox.getCenter(model.boundCenter).applyMatrix4(model.matrixWorld); 
+        maintainBoundCenter(model){
+            model.updateMatrixWorld();
+            let center1 = model.boundCenter.clone();//还未更新的 
+            this.getBoundCenter(model);//更新
+            let center2 = model.boundCenter.clone();
+            let diff = new Vector3().subVectors(center1,center2); 
+            model.position.add(diff);
+            model.boundCenter.copy(center1);
         },
         
-        
-        
         modelTransformCallback(model){
             
             model.updateMatrixWorld(); 
@@ -125502,7 +125665,12 @@ ENDSEC
 
     	render: function (scenes, camera, viewports,  renderer, writeBuffer, readBuffer,  maskActive, renderFun ) {
             if(!(scenes instanceof Array))scenes = [scenes];
-    		if ( this.selectedObjects.length > 0 ) {
+            
+            if(this.edgeStrength == 0){
+                console.log('this.edgeStrength == 0');
+            }
+            
+    		if ( this.selectedObjects.length > 0 && this.edgeStrength > 0) {
                 
                 let render2 = (target, dontRenderRtEDL=true)=>{
                     if(renderFun){
@@ -125513,8 +125681,12 @@ ENDSEC
                         scenes.forEach(scene=>renderer.render( scene, camera)); 
                     }
                 };
-                viewports.forEach(e=>  e.beforeRender = ()=>{ 
-                    this.replaceDepthToViewZ( e.camera   );
+                viewports.forEach(e=>{ 
+                    e.oldBeforeRender = e.beforeRender;
+                    e.beforeRender = ()=>{ 
+                        e.oldBeforeRender && e.oldBeforeRender();
+                        this.replaceDepthToViewZ( e.camera );
+                    };
                 });
                 
     	   
@@ -125549,10 +125721,13 @@ ENDSEC
     			this.changeVisibilityOfSelectedObjects( true );
 
         
-                viewports.forEach(e=>  e.beforeRender = ()=>{ 
-                    // Update Texture Matrix for Depth compare
-                    this.updateTextureMatrix(e.camera);
-                    this.prepareMaskMaterial.uniforms[ "cameraNearFar" ].value = new Vector2$1( e.camera.near, e.camera.far );
+                viewports.forEach(e=>{
+                    e.beforeRender = ()=>{ 
+                        e.oldBeforeRender && e.oldBeforeRender();
+                        // Update Texture Matrix for Depth compare
+                        this.updateTextureMatrix(e.camera);
+                        this.prepareMaskMaterial.uniforms[ "cameraNearFar" ].value = new Vector2$1( e.camera.near, e.camera.far );
+                    };
                 });
 
 
@@ -125575,7 +125750,7 @@ ENDSEC
                 //renderer.render( scene, camera/* , this.renderTargetMaskBuffer, true */ );
                 render2(this.renderTargetMaskBuffer);
                 
-                viewports.forEach((e)=>{e.beforeRender = null;});  
+                viewports.forEach((e)=>{e.beforeRender = e.oldBeforeRender;});  
                 
     			this.changeVisibilityOfNonSelectedObjects( true , scenes);
                 
@@ -129025,7 +129200,7 @@ ENDSEC
          
     	render(params={}){//add params
     		if(Potree.measureTimings) performance.mark("render-start");
-            if(this.outlinePass.selectedObjects.length && !params.screenshot){  
+            if(this.outlinePass.selectedObjects.length && this.outlinePass.edgeStrength > 0 && !params.screenshot){  
                 this.composer.render(this.inputHandler.interactiveScenes.concat(this.scene.scene).concat(viewer.scene.scenePointCloud), null, this.viewports, this.renderDefault.bind(this));  
             }else {  
                 this.renderDefault(params);

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


+ 2 - 0
src/sdk/cover/index.js

@@ -475,6 +475,8 @@ export const enter = (dom, isLocal) => {
             props.isFirstLoad = props.bottom == void 0 //在编辑时用户添加的
             if(props.opacity == void 0)  props.opacity = 1
             props.scale /= 100
+            if(props.type == 'obj') props.type = 'glb'
+