xzw 2 gadi atpakaļ
vecāks
revīzija
7978c0817d

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 18 - 10
src/custom/objects/Magnifier.js


+ 2 - 5
src/custom/objects/TextSprite.js

@@ -15,9 +15,7 @@ export class TextSprite extends THREE.Object3D{
 	constructor( options={}){ 
         super()
 		let map = new THREE.Texture();
-		map.minFilter = THREE.LinearFilter;
-		map.magFilter = THREE.LinearFilter;
-        
+		 
         this.sprite = new Sprite( Object.assign({
                 root:this
             }
@@ -142,10 +140,9 @@ export class TextSprite extends THREE.Object3D{
 		context.fillText(this.text , this.rectBorderThick + margin.x, y  /* spriteHeight/2  + expand  */);//x,y
 
 		let texture = new THREE.Texture(canvas);
-		texture.minFilter = THREE.LinearFilter;
+		texture.minFilter = THREE.LinearFilter; //LinearMipMapLinearFilter会缩放到power of 2
 		texture.magFilter = THREE.LinearFilter;
 		texture.needsUpdate = true;
-		//this.material.needsUpdate = true; 
         
         if(this.sprite.material.map){
             this.sprite.material.map.dispose()

+ 11 - 11
src/custom/objects/tool/Measure.js

@@ -539,15 +539,16 @@ export class Measure extends ctrlPolygon{
     
     setLabelHightState(label, state){ 
         if(state){  
-            label.backgroundColor = {r:255, g:255, b:255, a:config.measure.highlight.opacity},
+            let color = new THREE.Color(Potree.config.measure.highlight.color)
+            label.backgroundColor = {r:255*color.r, g:255*color.g, b:255*color.b, a:config.measure.highlight.opacity},
             //label.backgroundColor.a = config.measure.highlight.opacity
             label.sprite.material.useDepth = false;
-            label.textColor = {r: this.color.r*255, g:  this.color.g*255, b:  this.color.b*255, a: 1} 
+            //label.textColor = {r: this.color.r*255, g:  this.color.g*255, b:  this.color.b*255, a: 1} 
         }else{
             label.backgroundColor = {r: this.color.r*255, g:  this.color.g*255, b:  this.color.b*255, a:config.measure.default.opacity}
             //label.backgroundColor.a = config.measure.default.opacity
             label.sprite.material.useDepth = true
-            label.textColor = {r: 255, g: 255, b: 255, a: 1} 
+            //label.textColor = {r: 255, g: 255, b: 255, a: 1} 
             
         }  
         label.updateTexture()  
@@ -705,13 +706,12 @@ export class Measure extends ctrlPolygon{
         
     }
     
-    focus(){  
+    focus({dontMoveCamera=false}={}){  
     
-    
-        let dontChangeCamDir = viewer.mainViewport.camera.type == 'OrthographicCamera' /* && math.closeTo( viewer.mainViewport.view.pitch , -1.57079632)  */ // 不改角度
-    
-        viewer.focusOnObject(this, 'measure', null, {dontChangeCamDir})
-        
+        if(!dontMoveCamera){
+            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')
         this.dispatchEvent({type:'selected', state:true})
@@ -814,7 +814,7 @@ export class Measure extends ctrlPolygon{
                 opacity: 1,
                 map: texLoader.load(Potree.resourcePath+'/textures/pic_point32.png' ), 
                 //useDepth:true ,
-                replaceColor:this.color,
+                replaceColor:  new THREE.Color(Potree.config.measure.highlight.color) ,
                 beReplacedRed: 0.184,   //0.18431372
                 mapColorReplace:true
             }))   
@@ -856,7 +856,7 @@ export class Measure extends ctrlPolygon{
                 depthTestWhenPick:true,
             }) 
             lineMats['edgeSelect'+color] = LineDraw.createFatLineMat({
-                color: this.color,//'#f0ff00',
+                color:  Potree.config.measure.highlight.color ,
                 dashSize: 0.5, 
                 gapSize: 0.2, 
                 lineWidth: config.measure.lineWidth  ,

+ 6 - 2
src/custom/objects/tool/MeasuringTool.js

@@ -571,10 +571,14 @@ export class MeasuringTool extends THREE.EventDispatcher{
          
             if(ifAtWrongPlace(e))return  
             if(e.clickElement || e.drag.object)return  //如点击label时focusOnObject, 或拖拽marker
-             
-            
+              
             if(e.button === THREE.MOUSE.RIGHT )return  
             
+            
+            if(e.type == 'global_touchstart' && e.hoveredElement && e.hoveredElement.object.parent instanceof Measure ){
+                return //点到测量线时要focus测量线而不是画新线
+            }
+            
             if(isMobile){
                 viewer.controls.setEnable(false)
             }

+ 4 - 2
src/custom/potree.shim.js

@@ -293,6 +293,8 @@ Utils.getMousePointCloudIntersection = function(viewport, mouse, pointer, camera
             visiMap.set(e,e.visible)
             e.visible = Potree.Utils.getObjVisiByReason(e, 'datasetSelection'); //先将隐藏的点云显示
             if(!e.visible)return
+             
+            
             size.set(e, e.temp.pointSize)    
             sizeType = e.material.pointSizeType  
             e.material.pointSizeType = Potree.config.material.pointSizeType 
@@ -1049,7 +1051,7 @@ Potree.updateVisibilityStructures = function(pointclouds, camera, areaSize) {
 			priorityQueue.push({pointcloud: i, node: pointcloud.root, weight: Number.MAX_VALUE});
 		}  */    
        
-		if (pointcloud.visible || !pointcloud.hasDepthTex && pointcloud.unvisibleReasons && pointcloud.unvisibleReasons.length == 1 && pointcloud.unvisibleReasons[0].reason == 'displayMode'   &&  pointcloud.root !== null) {//改 visible -> 
+		if (pointcloud.visible || /* !pointcloud.hasDepthTex && */ pointcloud.unvisibleReasons && pointcloud.unvisibleReasons.length == 1 && pointcloud.unvisibleReasons[0].reason == 'displayMode'   &&  pointcloud.root !== null) {//改 visible -> 
             priorityQueue.push({pointcloud: i, node: pointcloud.root, weight: Number.MAX_VALUE});
         }else{
             continue
@@ -1147,7 +1149,7 @@ Potree.updateVisibility = function(pointclouds, camera, areaSize){
 	let pointcloudTransformVersion = Potree._pointcloudTransformVersion;
 	for(let pointcloud of pointclouds){
 
-		if(pointcloud.hasDepthTex ? !pointcloud.visible : !Potree.Utils.getObjVisiByReason(pointcloud, 'datasetSelection')){//改 visible ->  
+		if(/* pointcloud.hasDepthTex ? !pointcloud.visible : */ !Potree.Utils.getObjVisiByReason(pointcloud, 'datasetSelection')){//改 visible ->   这一版的深度图不准,就只用在贴图里,pick时需要点云,所以要一直有, 否则但pick时显示的话visibleNodes只能加载出一点点
 			continue;
 		} 
         

+ 1 - 1
src/custom/settings.js

@@ -164,7 +164,7 @@ const config = {//配置参数   不可修改
             opacity:0.8
         },
         highlight:{
-            color:"#2F8FFF",//"#00c7b2",
+            color:"#ff8f28",//"#00c7b2",  (255, 143, 40, 1
             opacity:1
         },
         guide:{

+ 1 - 0
src/custom/viewer/ViewerNew.js

@@ -969,6 +969,7 @@ export class Viewer extends ViewerBase{
                 let v = panoMap.get(pano).visible
                 v && count++
                 Potree.Utils.updateVisible(pano.marker, 'limitMarkerShow', v )  
+                
             })
             //console.log('updateMarkerVisibles marker显示个数', count)
         }

+ 5 - 5
src/navigation/InputHandlerNew.js

@@ -834,16 +834,16 @@ export class InputHandler extends THREE.EventDispatcher {
             && viewer.images360.currentPano.pointcloud.hasDepthTex && viewport == viewer.mainViewport && !usePointcloud 
         
         
-        if(canUseDepthTex)getByDepthTex()
-        else getByCloud() 
-        /* if(canUseDepthTex && !this.isMeasuring){
+        /* if(canUseDepthTex)getByDepthTex()
+        else getByCloud()  */
+        if(canUseDepthTex && !this.isMeasuring){
             getByDepthTex()
         }else{
             getByCloud() 
             if(!intersectPoint && canUseDepthTex  ){  //若在测量,先尝试点云,再用全景 //后来发现有深度图的点云全景visibleNode为空,pick不到的
                 getByDepthTex()
             }
-        }  */ 
+        }  
         
         
                    
@@ -905,7 +905,7 @@ export class InputHandler extends THREE.EventDispatcher {
             intersect.pointclouds = intersectPoint ? intersectPoint.pointclouds : []
         }
         
-        
+         
         
         viewer.addTimeMark('getIntersect','end')
         //点云费时:2-15ms

+ 36 - 12
src/viewer/NavigationCube.js

@@ -715,10 +715,11 @@ class NavCubeViewer extends ViewerBase{
             
             
             viewer.images360.addEventListener('beginChangeMode',(e)=>{
-                if(e.mode == 'showPanos')this.switchView('perspective',{}, ()=>{
+                if(e.mode == 'showPanos'){ 
+                    this.switchView('perspective',{}, ()=>{
                       Potree.settings.displayMode = viewer.images360.latestRequestMode
-                })
-                
+                    })
+                }
             }) 
             
             
@@ -778,11 +779,15 @@ class NavCubeViewer extends ViewerBase{
     switchView(type, {yaw, pitch, dir}={}, done){
         if(viewer.mainViewport.view.isFlying())return
         let view = viewer.mainViewport.view
+        let oldlastPerspect = this.lastPerspectView
+
+        
         this.lastView = view.clone()
         if(viewer.mainViewport.camera.type == 'OrthographicCamera'){
             this.lastView.isOrtho = true;
-            this.lastView.zoom = viewer.mainViewport.camera.zoom
-            
+            this.lastView.zoom = viewer.mainViewport.camera.zoom 
+        }else{
+            this.lastPerspectView = this.lastView
         }
          
         if(type == 'ortho'){
@@ -805,13 +810,15 @@ class NavCubeViewer extends ViewerBase{
                 let halfHeight = Math.abs(dis) * Math.tan( THREE.Math.degToRad(viewer.scene.cameraP.fov/2)); 
                 viewer.scene.cameraO.zoom = viewer.scene.cameraO.top / halfHeight;
                 viewer.scene.cameraO.updateProjectionMatrix();
-                    
+                
+                
             }
             console.log('变成正交')
             viewer.focusOnObject(viewer.bound, 'boundingBox', 1000, {
                 endPitch: pitch, endYaw: yaw , dir,  startCamera, endCamera
             }).promise.done(()=>{  
-                
+                let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine && e.points.length == 2)   
+                baseLine && Potree.Utils.updateVisible(baseLine,'enterOrthoView',true)//基准线仅在正交视图可见
                  
                 done && done()
                 navCubeViewer.dispatchEvent('content_changed')
@@ -820,6 +827,12 @@ class NavCubeViewer extends ViewerBase{
         }else{
             
             if(viewer.mainViewport.camera == viewer.scene.cameraO){
+                 
+                return this.switchView2(oldlastPerspect, done)
+                
+                
+                
+                
                 //viewer.scene.cameraP.position.copy(viewer.mainViewport.camera.position)
                 //viewer.scene.cameraP.quaternion.copy(viewer.mainViewport.camera.quaternion)
                 viewer.mainViewport.camera = viewer.scene.cameraP
@@ -836,6 +849,11 @@ class NavCubeViewer extends ViewerBase{
                 
                 let position = new THREE.Vector3().copy(viewer.mainViewport.shiftTarget).sub(view.direction.clone().multiplyScalar(dis)); 
                 //view.position.copy(viewer.mainViewport.shiftTarget).sub(view.direction.clone().multiplyScalar(dis)); 
+                
+                 
+                
+                 
+                 
                 this.controls.setEnable(true)
                 //viewer.dispatchEvent('leaveTopView')
                 console.log('变回透视')
@@ -856,7 +874,7 @@ class NavCubeViewer extends ViewerBase{
     
     
     
-    switchView2(viewInfo){ //直接输入view改变
+    switchView2(viewInfo, done){ //直接输入view改变
         
         let view = viewer.mainViewport.view
         let startCamera, endCamera 
@@ -872,15 +890,20 @@ class NavCubeViewer extends ViewerBase{
                 view.moveOrthoCamera(viewer.mainViewport,  {endPosition:viewInfo.position,
                     endPitch: viewInfo.pitch, endYaw: viewInfo.yaw ,  zoom: viewInfo.zoom, 
                     callback:()=>{ 
-                        
+                        done && done()
                     }, 
-                }, 500)
+                }, 800)
             }
         }else{
             if(viewer.mainViewport.camera == viewer.scene.cameraO){
                 startCamera = viewer.scene.cameraO
                 endCamera = viewer.scene.cameraP 
+                
+                let baseLine = viewer.scene.measurements.find(e=>e.isBaseLine && e.points.length == 2)   
+                baseLine && Potree.Utils.updateVisible(baseLine,'enterOrthoView',false) //基准线仅在正交视图可见
+                
             }else{
+                
                 console.log('switchView2', 'not ortho')
                 view.setView({ position:viewInfo.position,
                     endPitch: viewInfo.pitch, endYaw: viewInfo.yaw ,   
@@ -888,7 +911,7 @@ class NavCubeViewer extends ViewerBase{
                     callback:()=>{ 
                        
                     }, 
-                }, 500)
+                }, 800)
             }
             
         }
@@ -909,8 +932,9 @@ class NavCubeViewer extends ViewerBase{
                     }else{
                         viewer.dispatchEvent({type:'viewChanged', name:'perspective' })
                     }
+                    done && done()
                 }, 
-            }, 500)
+            }, 800)
         } 
         
     }