Browse Source

fix: V2.7.0 完

xzw 1 năm trước cách đây
mục cha
commit
dd0a8eb30c

+ 3 - 3
src/ExtendPointCloudOctree.js

@@ -565,7 +565,7 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
             }
             num_ = num_ / (Potree.config.material.realPointSize / Potree.config.material.pointSize) //兼容 
                
-            num_ = Math.pow(num_, 1.05) * 6 
+            //num_ = Math.pow(num_, 1.05) * 5 
              
             
             nodeMaxLevel = this.testMaxNodeCount >= Potree.config.testNodeCount1 ? this.nodeMaxLevel : Math.max(this.nodeMaxLevel, this.nodeMaxLevelPredict.max )//防止刚开始因nodeMaxLevel没涨完,导致过大的点云突然出现
@@ -583,7 +583,7 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
                     
                     //base *=  nodeMaxLevel > 0 ? Math.max(0.1, Math.pow(this.maxLevel /  nodeMaxLevel, 1.1)) : 0.1 //低质量的缩小点,因为视觉上看太大了。navvis是不铺满的,我们也留一点缝隙(但是ortho是不用缩小的,如果能分开判断就好了)
 
-                    size = base * 5 * num_/*  * window.devicePixelRatio */
+                    size = base * 20 * num_/*  * window.devicePixelRatio */
                     //在t-8BCqxQAr93 会议室 和 t-e2Kb2iU 隧道 两个场景里调节,因为它们的spacing相差较大,观察会议室墙壁的龟裂程度
                     this.temp.sizeFitToLevel[str] = size
                 }
@@ -592,7 +592,7 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
                 /* let base = 0.007; */ let base = this.material.spacing / Math.pow(2,  nodeMaxLevel) //点云大小在level为0时设置为spacing,每长一级,大小就除以2
                 //base的数值理论上应该是右侧算出来的,但发现有的场景nodeMaxLevel和nodeMaxLevelPredict差别较大的点云显示也过大,而直接换成固定值反而可以适应所有场景。该固定值来源于 getHighestNodeSpacing 最小值,修改了下。(会不会是我们的相机其实该值是固定的,根据该值算出的spacing才是有误差的? 如果换了相机是否要改值?)
                 //2022-12-21又换回非固定值。因为有的场景如SS-t-t01myDqnfE的两个数据集密集程度差别很大,应该将稀疏点云的大小设置的大些。 但是这样的缺点是两个数据集因相接处有大有小无法融合。
-                size = base * 5 * num_ /* * window.devicePixelRatio  */
+                size = base * 20 * num_ /* * window.devicePixelRatio  */
             } 
             
         }  

+ 1 - 1
src/custom/modules/clipping/Clipping.js

@@ -313,7 +313,7 @@ export class Clipping extends THREE.EventDispatcher{ //实时剪裁
                     matrix : new THREE.Matrix4().elements,  //参照downloadNoCrop,给默认值,表示没有最外层裁剪
                     visiMatrixes: cloud.material.clipBoxes_in.filter(e=>!e.box.isNew).map(e=>Clip.getTransformationMatrix(cloud, e.inverse).elements), 
                     unVisiMatrixes: cloud.material.clipBoxes_out.filter(e=>!e.box.isNew).map(e=>Clip.getTransformationMatrix(cloud, e.inverse).elements),
-                    modelMatrix:(new THREE.Matrix4).copy(cloud.transformMatrix).transpose().elements   //需要保证没有位移,否则剪裁后的模型位置会变化
+                    modelMatrix: new THREE.Matrix4().elements   //(new THREE.Matrix4).copy(cloud.transformMatrix).transpose().elements   //需要保证没有位移,否则剪裁后的模型位置会变化
                 }  
                 return data
             }) ,

+ 12 - 2
src/custom/modules/panos/Images360.js

@@ -296,6 +296,7 @@ export class Images360 extends THREE.EventDispatcher{
                         }else{
                             this.tileDownloader.stop()
                             this.currentPano && this.currentPano.exit()
+                            this.nextPano && (viewer.cancelLoad(this.nextPano))
                         } 
                     }
 
@@ -711,7 +712,6 @@ export class Images360 extends THREE.EventDispatcher{
         
         let target = toPano.target   
         let config = Potree.config.displayMode[Potree.settings.displayMode]
-        let pointcloudVisi = config.atPano.showPoint  //viewer.scene.pointclouds[0].visible
         
         
         let pano = toPano.pano
@@ -754,6 +754,11 @@ export class Images360 extends THREE.EventDispatcher{
                 }  
             } 
         }
+        
+        config = Potree.config.displayMode[Potree.settings.displayMode] //可能换了
+        let pointcloudVisi = config.atPano.showPoint  //viewer.scene.pointclouds[0].visible
+        
+        
         Potree.Utils.updateVisible(this.cube,'showSkybox', config.atPano.showSkybox ) // this.cube.visible = config.atPano.showSkybox 
         //console.log('开始飞1')
          
@@ -2512,6 +2517,10 @@ Images360.prototype.checkAndWaitForPanoLoad = function() {
             if(e.mode == 'showPointCloud'){
                 console.warn('切到点云模式了,就删除loadedCallback记录',pano.id)//否则再次转为showPanos会被withinTime阻拦
                 delete isLoadedPanos[pano.id] 
+                viewer.cancelLoad(pano)
+                
+                loadedCallback[pano.id] && loadedCallback[pano.id]();  //可以飞行了
+                doneFun2 && doneFun2(); 
                 this.removeEventListener('requestMode', changeMode)
             }
         }
@@ -2526,6 +2535,7 @@ Images360.prototype.checkAndWaitForPanoLoad = function() {
             setTimeout(()=>{
                 isLoadedPanos[pano.id] = !1;
                 loadedCallback[pano.id] && loadedCallback[pano.id](param1, param2); 
+                this.removeEventListener('requestMode', changeMode)
             },1)
         } 
 
@@ -2555,7 +2565,7 @@ Images360.prototype.checkAndWaitForPanoLoad = function() {
 Images360.prototype.getNeighbours = function(){ //逐渐自动获取neighbours。 200个点差不多在半分钟内算完
     let lastIndex //标记上次查询到哪,防止重新sortByScore
     return function( interacted){
-         
+          
         if(!this.currentPano || viewer.mainViewport.view.isFlying() || viewer.lastFrameChanged || viewer.inputHandler.drag /* interacted */){ //拖拽时不更新,否则移动端卡
             return lastIndex = 0; 
         }

+ 23 - 8
src/custom/modules/route/RouteGuider.js

@@ -209,6 +209,7 @@ export class RouteGuider extends THREE.EventDispatcher{
         hatSphere.position.set(0,0,height)
         hatSphere.scale.copy(shadow.scale)
         group.add(hatSphere)
+        group.hatSphere = hatSphere
         return group
     }
     
@@ -258,7 +259,8 @@ export class RouteGuider extends THREE.EventDispatcher{
         
         //this.setStartPole(pos)
         this.poleStart.visible = !!pos 
-        pos && this.poleStart.position.copy(this.routeStart)
+        pos && this.poleStart.position.copy(this.routeStart) 
+        pos && this.poleStart.hatSphere.waitUpdate()  
         this.generateRoute()
         viewer.dispatchEvent('content_changed')
         
@@ -282,7 +284,7 @@ export class RouteGuider extends THREE.EventDispatcher{
         //this.setEndPole(pos) 
         this.poleEnd.visible = !!pos 
         pos && this.poleEnd.position.copy(this.routeEnd)
-        
+        pos && this.poleEnd.hatSphere.waitUpdate()  
         this.generateRoute()
         viewer.dispatchEvent('content_changed')
     }
@@ -423,12 +425,15 @@ export class RouteGuider extends THREE.EventDispatcher{
                     
                     let effectiveItems = data.slice(startIndex, endIndex + 1 );//只要点云范围内的点
                     effectiveItems.forEach((item,i)=>{ 
-                        let pos = viewer.transform.lonlatToLocal.forward(item.location.slice(0))
+                        //let pos = viewer.transform.lonlatToLocal.forward(item.location.slice(0)/* ,true */)
+                        
+                        let pos = item.location.slice(0)
+                         
                         pos = new THREE.Vector3().fromArray(pos)//.setZ(item.z)
                         this.route.push(pos)
                     })
                     
-                    console.log(this.route)
+                    //console.log('route', this.route)
                     
                     
                 }
@@ -474,17 +479,27 @@ export class RouteGuider extends THREE.EventDispatcher{
             
             let start = this.routeStart.clone();
             let end = this.routeEnd.clone();
-            let startLonlat = viewer.transform.lonlatToLocal.inverse(start)
-            let endLonlat = viewer.transform.lonlatToLocal.inverse(end)
+            //let startLonlat = viewer.transform.lonlatToLocal.inverse(start/* , true */)
+            //let endLonlat = viewer.transform.lonlatToLocal.inverse(end/* , true */)
+            
+            
             
             var query = {
+                source_longitude: start.x,
+                source_latitude: start.y,
+                source_z: start.z,
+                destination_longitude: end.x,
+                destination_latitude: end.y,
+                destination_z: end.z
+            };
+            /* var query = {
                 source_longitude: startLonlat.x,
                 source_latitude: startLonlat.y,
                 source_z: start.z,
                 destination_longitude: endLonlat.x,
                 destination_latitude: endLonlat.y,
                 destination_z: end.z
-            };
+            }; */
             
             
             //let url = `/laser/route/${Potree.settings.number}/getRoute/${this.datasetIds[0]}/${this.datasetIds[1]}?`
@@ -494,7 +509,7 @@ export class RouteGuider extends THREE.EventDispatcher{
             }
             
             Potree.fileServer.get(url).then((data)=>{
-                console.log(data.data)
+                //console.log('data', data.data)
                 if(!this.routeStart || !this.routeEnd)return 
                 
                 this.lastResult = {//保存数据

+ 6 - 8
src/custom/modules/volumeCompute/VolumeComputer.js

@@ -186,7 +186,7 @@ export default class VolumeComputer extends THREE.EventDispatcher{
             this.prismComputing = null
             deferred = null
             interrupt = false
-            debugStr && console.log(debugStr)
+            debugStr && console.log('computeFinish',debugStr)
             
             Potree.settings.displayMode = statesBefore.mode
             Potree.settings.pointDensity = statesBefore.pointDensity
@@ -232,7 +232,7 @@ export default class VolumeComputer extends THREE.EventDispatcher{
         
         
         
-        let pxPerMetric = math.linearClamp(Math.max(boundSize.x,boundSize.y), [3, 20, 80, 500, 2000], [300, 100, 30, 6, 3])
+        let pxPerMetric = math.linearClamp(Math.max(boundSize.x,boundSize.y), [4, 10, 20, 80, 500, 2000], [300, 200, 100, 30, 6, 3])
         //let pxPerMetric = math.linearClamp(Math.max(boundSize.x,boundSize.y), [5, 20, 80, 500], [300, 200, 50, 20])
         
         
@@ -273,11 +273,7 @@ export default class VolumeComputer extends THREE.EventDispatcher{
         viewer.mainViewport.active = false //暂停渲染,否则影响这边点云的加载
         viewer.mapViewer.viewports[0].active = false 
         viewer.magnifier.viewport.active = false //防止页面变白(似乎mainViewport被clear)
-        /* let maxLevels = new Map
-        viewer.scene.pointclouds.forEach(e=>{
-            maxLevels.set(e,e.maxLevel);//记录能达到的最大值
-        }) */
-        
+       
         
         
 		{  
@@ -335,6 +331,7 @@ export default class VolumeComputer extends THREE.EventDispatcher{
                 if(interrupt){
                     return computeFinish('23')
                 }
+                Potree.settings.pointDensity = 'screenshot'       //恢复为nodeMaxLevel
                 //最高处朝下看,找挖方的顶部
                 this.view.pitch = -Math.PI / 2; 
                 let endPosition = new THREE.Vector3(center.x + (i-cW/2+0.5) * boundSize_.x,  center.y + (j-cH/2+0.5) * boundSize_.y,  center.z)
@@ -820,7 +817,8 @@ export default class VolumeComputer extends THREE.EventDispatcher{
         {datasetId:"1745733728954093568", location:[113.59550104511611, 22.36677932324081, 0] ,orientation: 0.1}
 
         如果刷新后土方量范围内存在的数据集发生改变,将重算。
-
+        
+        数据集也可能显示或隐藏
 
         2 其他特殊情况,如裁剪,难以知道裁剪了哪块,所以只能全部重算
  

+ 3 - 15
src/custom/objects/Reticule.js

@@ -176,21 +176,9 @@ export default class Reticule extends THREE.Mesh{
             
         }else{ 
             let n = camera.position.distanceTo(this.position)
-              
-            if( n < 1 ){
-                if(this.state.cross ){   //测量时更精细些
-                     s = 0.7 * n
-                }else{
-                     s = 1.1 * n 
-                }
-            }else{
-                if(this.state.cross ){  
-                     s = 0.4 + 0.3 * n //n乘以的系数越高,其越不近大远小(大小越恒定)
-                }else{
-                     s = 1 + 0.1 * n; 
-                }  
-            }
-            
+               
+            s = 0.8 * Math.log2(n+1) //底数为2        ( Math.log()底数为e )
+             
             if(this.state.cross ){  //测量时更精细些
                 s /= viewer.images360.zoomLevel
             } 

+ 15 - 5
src/custom/objects/tool/Measure.js

@@ -562,6 +562,15 @@ export class Measure extends ctrlPolygon{
             
     }
 
+    cloneMarker(cloneIndex, index){ 
+        return this.addMarker({
+            index, 
+            point: this.points[cloneIndex],
+            dataset_point:this.dataset_points && this.dataset_points[cloneIndex], 
+            points_dataset:this.points_datasets[cloneIndex]
+        })    
+    }
+    
       
 	addMarker (o={}) {
         var index = o.index == void 0 ? this.points.length : o.index  //要当第几个
@@ -577,18 +586,19 @@ export class Measure extends ctrlPolygon{
             //add for 调试,方便后期增加点
             if(!this.isNew && viewer.inputHandler.pressedKeys['M'.charCodeAt(0)] && this.points.length<this.maxMarkers){  
                 viewer.measuringTool.history.beforeChange(this)
-                let curIndex = this.markers.indexOf(marker)
-                this.addMarker({index:curIndex+1, point:marker.position.clone(), dataset_point:this.dataset_points[curIndex] && this.dataset_points[curIndex].clone(), points_dataset:this.points_datasets[curIndex]})
-                
+                let curIndex = this.markers.indexOf(marker) 
+                this.cloneMarker(curIndex, curIndex+1)  
             }
 
 
-            viewer.measuringTool.history.beforeChange(this)
+            this.isNew || viewer.measuringTool.history.beforeChange(this)
             
         })
         
          
         marker.addEventListener('drop',(e)=>{
+            if( e.button != THREE.MOUSE.LEFT  )return
+            
             viewer.inputHandler.dispatchEvent({type: 'measuring',  v:false, cause:'stopDragging', situation:'dragging', object:this}  )
             
             this.lastDropTime = Date.now()
@@ -599,7 +609,7 @@ export class Measure extends ctrlPolygon{
                 })  
             }
              
-            viewer.measuringTool.history.afterChange(this)
+            this.isNew || viewer.measuringTool.history.afterChange(this)
             
         })
         

+ 57 - 13
src/custom/objects/tool/MeasuringTool.js

@@ -31,23 +31,38 @@ export class MeasuringTool extends THREE.EventDispatcher{
 		  
         this.history = new History({ 
             applyData: (data)=>{ 
-                if(data.measure.parent && data.measure.visible){
+                if(data.measure.parent && data.measure.visible){ 
                     data = Potree.Common.CloneObject(data) //避免使用后更改数据又被使用
                     data.measure.reDraw() 
                     data.measure.initData(data) 
-                    data.measure.dispatchEvent('changeByHistory') 
+                    data.measure.isNew = data.isNew
+                    data.measure.dispatchEvent('changeByHistory')
+
+                    /* if(data.measure.isPrism){
+                        data.measure.needsCompute = data.needsCompute
+                    } */
+                    data.measure.facePlane = data.facePlane && data.facePlane.clone()
+                    data.measure.cannotConfirmNormal = data.cannotConfirmNormal
                     return true
                 }  
             },
-            getData:(measure)=>{  
-                if(measure.isNew)return
-                return {
+            getData:(measure)=>{ 
+                let data = {
                     measure, 
                     points: measure.points.map(e=>e.clone()),
                     dataset_points: measure.dataset_points ? measure.dataset_points.map(e=>e&&e.clone()) : null,
                     points_datasets: measure.points_datasets.slice(),
-                    datasetId: measure.datasetId
+                    datasetId: measure.datasetId,
+                    isNew: measure.isNew,
+                    facePlane: measure.facePlane && measure.facePlane.clone(),
+                    cannotConfirmNormal: measure.cannotConfirmNormal
                 }
+                /* if(measure.isPrism){ //没用
+                   data.volumeInfo = measure.volumeInfo
+                   data.needsCompute = measure.needsCompute
+                   //但不记录其他信息
+                } */
+                return data
             } 
         }),
         //this.scene = viewer.overlay//
@@ -339,12 +354,14 @@ export class MeasuringTool extends THREE.EventDispatcher{
 			if (e.button == THREE.MOUSE.LEFT || e.isTouch) { 
 				if (length >= measure.maxMarkers) {
                     end({finish:true});
-				}else{  
-                    var marker = measure.addMarker({point:measure.points[length - 1].clone()})
+				}else{
+                    
+                    this.history.beforeChange(measure)  
                      
-                    if(args.isRect && measure.markers.length == 3){//marker全可见
-                        measure.addMarker({point:measure.points[0].clone()})
-                        
+                    let marker = measure.cloneMarker(length - 1, length)
+                    
+                    if(args.isRect && measure.markers.length == 3){//marker全可见 
+                        measure.cloneMarker(0, 3)
                     }else{ 
                         measure.markers[length].visible = false
                         measure.edges[length].visible = false 
@@ -354,6 +371,9 @@ export class MeasuringTool extends THREE.EventDispatcher{
                     measure.markers[length-1].visible = true;
                      
                     marker.isDragging = true 
+                    
+                    this.history.afterChange(measure)
+                    
                     measure.continueDrag(marker, e)    
                 } 
 				 
@@ -535,8 +555,8 @@ export class MeasuringTool extends THREE.EventDispatcher{
             marker.isDragging = true 
             this.viewer.inputHandler.startDragging(marker , {endDragFun, notPressMouse:true} ); //notPressMouse代表不是通过按下鼠标来拖拽
             e.drag = this.viewer.inputHandler.drag
-            e.drag.endDragFun = endDragFun
-            e.drag.notPressMouse = true
+            /* e.drag.endDragFun = endDragFun
+            e.drag.notPressMouse = true */
             
             //if(!measure.dragMarker(e) || !measure.dropMarker(e))return
              
@@ -598,6 +618,30 @@ export class MeasuringTool extends THREE.EventDispatcher{
         }
         
         
+        let changeByHistory = (e)=>{
+            if(!measure.isNew)return
+            
+            let marker = measure.markers[measure.points.length-1]
+            this.viewer.inputHandler.startDragging(marker , {endDragFun, notPressMouse:true} );  
+            e.drag = this.viewer.inputHandler.drag
+            
+            
+            var I = viewer.inputHandler.intersect && (viewer.inputHandler.intersect.orthoIntersect || viewer.inputHandler.intersect.location)
+            if(I){ 
+                measure.dragChange(I.clone(), measure.points.length-1 )  //使最后一个点在鼠标处
+            }
+            /* if(measure.markers.length == 1){
+                Common.updateVisible(marker,  ,false)
+            } */
+            args.isRect || ( measure.edges[measure.points.length-1].visible = false)
+            
+            
+            
+            //measure.continueDrag(measure.markers[measure.points.length-1], o )  
+        }
+        measure.addEventListener('changeByHistory',changeByHistory)
+        
+        
 		this.viewer.scene.addMeasurement(measure);
         
 		return measure;

+ 6 - 4
src/custom/objects/tool/ctrlPolygon.js

@@ -108,12 +108,14 @@ export class ctrlPolygon extends THREE.Object3D {
     addMarker(o={}){
         var index = o.index == void 0 ? this.points.length : o.index  //要当第几个
         
-        this.points = [...this.points.slice(0,index), o.point, ...this.points.slice(index,this.points.length)]
+        this.points = [...this.points.slice(0,index), o.point.clone(), ...this.points.slice(index,this.points.length)]
 		//this.points.push(o.point);
-        if(o.dataset_point){
-            this.dataset_points = [...this.dataset_points.slice(0,index), o.dataset_point, ...this.dataset_points.slice(index,this.dataset_points.length)]
+     
+        if('dataset_point' in o){//需要增加,可能是null
+            this.dataset_points = this.dataset_points ? [...this.dataset_points.slice(0,index), o.dataset_point && o.dataset_point.clone(), ...this.dataset_points.slice(index,this.dataset_points.length)] : null //如果原本是null,新加的应该也是
         }
-        if(o.points_dataset){
+        
+        if('points_dataset' in o){ 
             this.points_datasets = [...this.points_datasets.slice(0,index), o.points_dataset, ...this.points_datasets.slice(index,this.points_datasets.length)]
         }
         

+ 27 - 11
src/custom/potree.shim.js

@@ -280,6 +280,7 @@ Utils.getMousePointCloudIntersection = function(viewport, mouse, pointer, camera
     let old_clipBoxes_out = new Map()  
     let old_bigClipInBox = new Map()  
     let old_highlightBoxes = new Map()   
+    let old_visibleNodes = new Map()
     
     //bigClipInBox 最好也写下 
     let density
@@ -322,8 +323,11 @@ Utils.getMousePointCloudIntersection = function(viewport, mouse, pointer, camera
         needsUpdate = true
     }
     
-    if(needsUpdate){
-         
+    if(old_visibleNodes) { 
+        for(let pointcloud of pointclouds){  
+            old_visibleNodes.set(pointcloud, pointcloud.visibleNodes)
+        } 
+        
         if(window.notViewOffset){ 
             Potree.updatePointClouds(pointclouds,  camera, viewport.resolution );  
         }else{
@@ -332,10 +336,9 @@ Utils.getMousePointCloudIntersection = function(viewport, mouse, pointer, camera
             let camera_ = camera.clone()
             camera_.setViewOffset( viewport.resolution.x, viewport.resolution.y,   pickParams.x-viewWidth/2, pickParams.y-viewWidth/2,    viewWidth, viewWidth );
             Potree.updatePointClouds(pointclouds,  camera_, viewport.resolution );   
-        
-        } 
-        
+        }  
     }
+    
     //------------------------------------------------
     
     
@@ -380,12 +383,23 @@ Utils.getMousePointCloudIntersection = function(viewport, mouse, pointer, camera
             viewport.afterRender && viewport.afterRender() 
         } */
     }
+    
     if(!pickParams.pickClipped){//add  
         for(let pointcloud of pointclouds){  
             pointcloud.material.setClipBoxes(old_bigClipInBox.get(pointcloud), old_clipBoxes_in.get(pointcloud), old_clipBoxes_out.get(pointcloud), old_highlightBoxes.get(pointcloud))  
         } 
     }
-
+    
+    if(old_visibleNodes){ 
+        for(let pointcloud of pointclouds){  //不恢复的话(尤其cameraChanged时),在下次render前,再次pick可能是错的。表现为多数据集刚开始reticule消失了,直到ifPointBlockedByIntersect停止 
+            pointcloud.visibleNodes = old_visibleNodes.get(pointcloud)
+        }  
+    }
+    
+    
+    
+    
+    
     if (selectedPointcloud) {
         return {
             location: closestIntersection,
@@ -928,6 +942,8 @@ BinaryLoader.prototype.load = function(node, callback){//解析点云
             } else {
                 //console.error(`Failed to load file! HTTP status: ${xhr.status}, file: ${url}`);
                 throw new Error(`Failed to load file! HTTP status: ${xhr.status}, file: ${url}`);
+                node.loadFailed = 'status:'+xhr.status+",url:"+url
+                Potree.numNodesLoading--;
             }
         }
     };
@@ -935,7 +951,9 @@ BinaryLoader.prototype.load = function(node, callback){//解析点云
     try {
         xhr.send(null);
     } catch (e) {
-        console.log('fehler beim laden der punktwolke: ' + e);
+        console.error('加载点云node出错 ', url, e  );
+        node.loadFailed = 'catchError'
+        Potree.numNodesLoading--;
     }
 }
 
@@ -1504,15 +1522,13 @@ Potree.updateVisibility = function(pointclouds, camera, areaSize){
 			pointcloud.dem.update(updatingNodes);
 		}
 	}
+     
     
     
     
+    unloadedGeometry = unloadedGeometry.filter(e=>!e.loadFailed) //过滤加载失败的,否则有失败的就无法发送加载完成
     
     if(unloadedGeometry.length){//加载点云 
-         
-        /* for (let i = 0; i < Math.min(Potree.maxNodesLoading, unloadedGeometry.length); i++) {
-            unloadedGeometry[i].node.load(unloadedGeometry[i].pointcloud.pcoGeometry); 
-        }  */ 
         
         let maxNodesLoading = Common.getBestCount('unloadedGeometry', viewer.lastFrameChanged?1:3, 6,  4, 15 /*  , true  */ )//dur在iphoneX中静止有7,pc是2  //!lastFrameChanged静止时加速下载
         //THREE.Math.clamp(Math.round(9 - dur), 1, 6 ) 

+ 34 - 5
src/custom/start.js

@@ -319,11 +319,11 @@ export function start(dom, mapDom, number ){ //t-Zvd3w0m
                     let forward = transform.forward
                     let inverse = transform.inverse;
                     
-                    transform.forward = function(e){
+                    transform.forward = function(e, not84){
                          let needTran = e.x == void 0 
                          if(needTran)var a1 = {x:e[0],y:e[1]}
                          else var a1 = e
-                         var a = AMapWith84.wgs84ToAMap(a1)
+                         var a = not84 ? a1 : AMapWith84.wgs84ToAMap(a1)
                          if(needTran){
                              a = [a.x, a.y];  e[2] != void 0 && (a[2] = e[2])
                          }else{
@@ -332,11 +332,11 @@ export function start(dom, mapDom, number ){ //t-Zvd3w0m
                          return  forward(a)
                     }
                     
-                    transform.inverse = function(e){
+                    transform.inverse = function(e, not84){
                         let needTran = e.x == void 0
                         var a = inverse(e)
                         needTran && (a = {x:a[0],y:a[1]})
-                        a = AMapWith84.aMapToWgs84(a)  
+                        a = not84 ? a : AMapWith84.aMapToWgs84(a)  
                         
                         if(needTran){
                             a = [a.x,a.y];  e[2] != void 0 && (a[2] = e[2])
@@ -350,7 +350,7 @@ export function start(dom, mapDom, number ){ //t-Zvd3w0m
                 }
                 for(let f in viewer.transform){
                     change(viewer.transform[f]) 
-                }   
+                }  
             }
             
             
@@ -1172,6 +1172,35 @@ lonlat和空间坐标其实并非线性关系,因为lonlat其实是角度。
 所以若要准确展示的话,需要将点云内所有物体,如漫游点,都先获取lonlat再去算local。或者直接将点云整体的transformMatrix考虑上在地球上相对于初始数据集的偏转。
 
 
+
+
+
+
+
+支持ctrl+z、ctrl+Y 撤销回退的页面有:
+测量、土方量、空间模型 这三个页面的点线拖拽;点云裁剪、点云下载中的裁剪 的框; 点云编辑的变换; 数据集校准;
+
+(所有数据一旦删除则无效 )
+
+其他快捷键:
+
+按alt鼠标滚轮或WS键放慢。
+测量or土方量: 按Alt键可以平行拖拽点。&dragPolyBeyondPoint 后缀则可平行拖拽到无点云区域 。
+按M键拖拽点可以复制出当前点 
+点云按空格键+左键拖拽场景,可以不改相机位置的旋转视角
+
+
+
+
+
+
+
+
+
+
+
+
+
    */
    
    

+ 8 - 6
src/custom/viewer/ViewerNew.js

@@ -3129,9 +3129,9 @@ export class Viewer extends ViewerBase{
         if(background instanceof THREE.Color){ //add
             renderer.setClearColor(background, backgroundOpacity);
         }else if(background === "skybox"){
-			renderer.setClearColor(0x000000, 0 );
+			renderer.setClearColor(0x000000, backgroundOpacity);
 		} else if (background === 'gradient') {
-			renderer.setClearColor(0x000000, 0);
+			renderer.setClearColor(0x000000, backgroundOpacity);
 		} else if (background === 'black') {
 			renderer.setClearColor(0x000000, 1);
 		} else if (background === 'white') {
@@ -3586,13 +3586,13 @@ export class Viewer extends ViewerBase{
             this.needRender = true
             
             if(info.useRenderTarget){
-                //离屏渲染 有抗锯齿问题、在手机上速度慢
+                //离屏渲染 有抗锯齿问题、在手机上速度慢   主视图一样会变内容,还是不用这个了
                 var { dataUrl  } = viewerMaster.makeScreenshot( new THREE.Vector2(width,height), null, compressRatio    );
                 
             }else{ 
                 
                 //直接渲染 会改变canvas大小
-                let canvas = viewerMaster.renderArea.getElementsByTagName('canvas')[0]  
+                let canvas = viewerMaster.renderer.domElement
                 //canvas.width = width, canvas.height = height //不需要改canvas大小, 只需要 this.renderer.setSize(width, height ); 前面updateScreenSize已经执行
                 viewerMaster.render({  screenshot : true,   width , height,   resize :true  }); //需要resize
                 
@@ -4836,6 +4836,7 @@ export class Viewer extends ViewerBase{
             object,
             isLoadedCallback,
         }) 
+        //console.warn('waitForLoad',object.id,this.waitQueue.length)
         1 === this.waitQueue.length && this.dispatchEvent({type:"loading", show:true})
     }
     ifAllLoaded( ){
@@ -4844,13 +4845,14 @@ export class Viewer extends ViewerBase{
                 return !e.isLoadedCallback()
             })  
         }
-       
+        //console.warn('ifAllLoaded',  this.waitQueue.length)
         0 === this.waitQueue.length && this.dispatchEvent({type:"loading", show:false}) 
     } 
     cancelLoad(object){//add 突然出现还没加载完就被deactivateTiledPano但还在loading的情况,所以加了这个
         this.waitQueue = this.waitQueue.filter(function(e) {
             return  e.object != object
         })  
+        //console.log('cancelLoad',  object.id)
         this.ifAllLoaded()
     }
      
@@ -4877,7 +4879,7 @@ export class Viewer extends ViewerBase{
         console.log('setPointStandardMat',state)
         if(state){
             if(this.pointStatesBefore){
-                return console.error('已设置过pointStatesBefore!')
+                return console.warn('已设置过pointStatesBefore!')
             }
             this.pointStatesBefore = {
                 opacity : new Map(), 

+ 1 - 0
src/navigation/InputHandlerNew.js

@@ -859,6 +859,7 @@ export class InputHandler extends THREE.EventDispatcher {
         let getByCloud = ()=>{
             let pointer, mouse
             if(point){//指定了目标点,而非只是用pointer所在位置
+             
                 cameraPos && camera.position.copy( cameraPos)
                 camera.lookAt(point)
                 camera.updateMatrixWorld()