xzw hai 5 meses
pai
achega
e7c6a0959a

+ 19 - 8
src/ExtendPointCloudOctree.js

@@ -248,17 +248,26 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
             
 		let pickOutsideClipRegion = getVal(params.pickOutsideClipRegion, false);
 
-		let size = viewport ? viewport.resolution : renderer.getSize(new THREE.Vector2());
-
+		let size = params.resolution || (viewport ? viewport.resolution : renderer.getSize(new THREE.Vector2()));
+       
 		let width = Math.ceil(getVal(params.width, size.width)); //renderTarget大小。影响识别精度  
 		let height = Math.ceil(getVal(params.height, size.height));
         
         let screenshot = ()=>{
             if(window.testScreen){            
-                let dataUrl = Potree.Utils.renderTargetToDataUrl(pickState.renderTarget, width, height, renderer)
-             
+                 
+                pickMaterial.activeAttributeName = "rgba";   
+                
+                pRenderer.renderOctree(this, nodes, camera, pickState.renderTarget); 
+                let dataUrl = Potree.Utils.renderTargetToDataUrl(pickState.renderTarget, width, height, renderer) 
                 Potree.Common.downloadFile(dataUrl, 'screenshot.png')   
                 window.testScreen = 0
+                
+                pickMaterial.activeAttributeName = "indices";//indices
+                renderer.clear(true, true, true); 
+                
+                
+                
             } 
         }
         
@@ -268,7 +277,10 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
 		let pointSize = getVal(params.pointSize, this.material.size);
  
 		let nodes = this.nodesOnRay(this.visibleNodes, ray);
- 
+    
+    if(window.testScreen){
+        console.log('nodes.length', this.visibleNodes.length, nodes) 
+    }
 		if (nodes.length === 0) { 
             //console.log('nodes.length === 0')
 			return null;
@@ -349,11 +361,10 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
 
 			let tmp = this.material;
 			this.material = pickMaterial;
-            
-            pRenderer.renderOctree(this, nodes, camera, pickState.renderTarget); //只绘制ray pick到的部分nodes
             screenshot();
             
-
+            pRenderer.renderOctree(this, nodes, camera, pickState.renderTarget); //只绘制ray pick到的部分nodes
+             
 			this.material = tmp;
 		}
 

+ 37 - 30
src/custom/modules/clipModel/Clip.js

@@ -582,8 +582,13 @@ var Clip = {
     
     
     
-    screenshot: async ( rulerToolFactory /*unitText = '像素 : 米' */ )=>{ //测绘图下载。顶视图|侧视图
-    
+    screenshot: async (ifShowRuler, rulerToolFactory /*unitText = '像素 : 米' */ )=>{ //测绘图下载。顶视图|侧视图
+        if(!rulerToolFactory){
+            ifShowRuler = false
+        }
+        
+        
+        
         let getRulerUnit = (num)=>{
             let unitSystem = 'metric'
             let str = viewer.unitConvert.convert(num, 'distance', 0,  unitSystem, true , 
@@ -690,7 +695,7 @@ var Clip = {
              
             
             let beforeScreenshot = ()=>{
-                //if(rulerToolFactory){
+                //if(ifShowRuler){
                     let ruler = Clip.getRulerBound()
                     Object.assign(rulerBound,ruler)
                     //因为focusOnObject时有最小边界,所以当box很小时截图区域不止box
@@ -715,25 +720,25 @@ var Clip = {
                     const fontsize = math.linearClamp(w, [100, 700, 8000], [12, 20, 30])
                     
                     const marginSelf = {//img外的margin(标尺内)
-                        left :  rulerToolFactory ? 76 : 40,
-                        right :  rulerToolFactory ? 30 : 40,
-                        bottom :  (70 + fontsize*2) ,/*  rulerToolFactory ? (70 + fontsize*2) : (40 + fontsize*2) ,*/
-                        top :  rulerToolFactory ? 60 : 40,
+                        left :  ifShowRuler ? 76 : 40,
+                        right :  ifShowRuler ? 30 : 40,
+                        bottom :  (70 + fontsize*2) ,/*  ifShowRuler ? (70 + fontsize*2) : (40 + fontsize*2) ,*/
+                        top :  ifShowRuler ? 60 : 40,
                     }
                     
                     //文字的边距
-                    let bottomRatioToImg = - Math.min(fontsize*2.5,   rulerToolFactory ? marginSelf.bottom : marginSelf.bottom*0.8 ) / h//- (marginSelf.bottom - fontsize)/ h  //在img之下. text底部到img底部的距离
+                    let bottomRatioToImg = - Math.min(fontsize*2.5,   ifShowRuler ? marginSelf.bottom : marginSelf.bottom*0.8 ) / h//- (marginSelf.bottom - fontsize)/ h  //在img之下. text底部到img底部的距离
   
                     let rulerMargin = 20//标尺外的margin  px 
                     let labelInfo = {
                         bottomRatioToImg, horizonCenter:true,//leftRatioToImg,  
-                        textColor:  rulerToolFactory ?  {r: 0, g: 0, b: 0, a: 1}  : { r: 255, g: 255, b: 255, a: 1 } , 
+                        textColor:  ifShowRuler ?  {r: 0, g: 0, b: 0, a: 1}  : { r: 221, g: 221, b: 221, a: 1 } , 
                         textBorderColor : { r: 30, g: 30, b: 30, a: 1 },
-                        textBorderThick : rulerToolFactory ? 0 : 1 ,
+                        textBorderThick : ifShowRuler ? 0 : 1 ,
                         fontsize,
-                        fontWeight: rulerToolFactory ?  'normal' :'Bold' ,
+                        fontWeight: ifShowRuler ?  'normal' :'Bold' ,
                         outputCanvas : true,
-                        bgColor: rulerToolFactory ? {r:255,g:255,b:255,a:255}:null
+                        bgColor: ifShowRuler ? {r:255,g:255,b:255,a:255}:null
                     }
                      
                     labelInfo.bgMargin = {//img外需要多少margin
@@ -767,26 +772,28 @@ var Clip = {
                             xNumTicks,  yNumTicks,  width,  height,  '#000000' 
                         ); 
                         
-                        rulerImg = new Image 
-                        rulerImg.src = result.url 
-                        //Common.downloadFile(result.url, 'ruler.png') 
-                        drawRuler = ()=>{
-                            if(!labelGot || !rulerGot)return
-                            resultSrc = Potree.Common.imgAddLabel(canvas, rulerImg,{
-                                topRatioToImg : rulerMargin / canvas.height,
-                                leftRatioToImg : rulerMargin / canvas.width, 
-                            })
-                            resolve( resultSrc ) 
+                        if(ifShowRuler){
+                            rulerImg = new Image 
+                            rulerImg.src = result.url 
+                            //Common.downloadFile(result.url, 'ruler.png') 
+                            drawRuler = ()=>{
+                                if(!labelGot || !rulerGot)return
+                                resultSrc = Potree.Common.imgAddLabel(canvas, rulerImg,{
+                                    topRatioToImg : rulerMargin / canvas.height,
+                                    leftRatioToImg : rulerMargin / canvas.width, 
+                                })
+                                resolve( resultSrc ) 
+                            }
+                            rulerImg.onload = ()=>{ 
+                                rulerGot = true 
+                                drawRuler() 
+                            }  
                         }
-                        rulerImg.onload = ()=>{ 
-                            rulerGot = true 
-                            drawRuler() 
-                        }  
                         
                         console.log('xUnit', result.xUnit, 'yUnit',  result.yUnit  )
                         
-                        unitLen = result.xUnit  
-                    }else{
+                        unitLen = result.xUnit //为了得到这个,不管需不需要绘制标尺都要rulerToolFactory
+                    }else{//本地没有
                         unitLen = boundSize.x / 10  //假定一个
                        
                     }
@@ -816,7 +823,7 @@ var Clip = {
                         ctx.lineTo(x+lenX, y+lenY/2);
                         
                         // 设置线条样式(可选)
-                        ctx.strokeStyle = '#000'; 
+                        ctx.strokeStyle = ifShowRuler ? '#000' : '#ddd'; 
                         ctx.lineWidth = 1; // 线条宽度 
                         // 绘制线段
                         ctx.stroke(); 
@@ -831,7 +838,7 @@ var Clip = {
                     Clip.screenshoting = false
                     viewer.viewports = [viewer.mainViewport]
                      
-                    if(rulerToolFactory){
+                    if(ifShowRuler){
                         drawRuler()
                     }else{
                         resultSrc = canvas.toDataURL('image/png' )

+ 27 - 3
src/custom/modules/panoEdit/panoEditor.js

@@ -337,6 +337,10 @@ class PanoEditor extends THREE.EventDispatcher{
             } 
             
             this.inited = true
+            viewer.images360.panos.forEach(pano=>{
+                //this.setPanoVisible(pano, pano.panoData.exist  ,'exist') //在非编辑时初始化,隐藏那些没计算的点
+                pano.setEnable(pano.panoData.exist)
+            })
             this.dispatchEvent('allLoaded')
         }) 
         
@@ -364,6 +368,10 @@ class PanoEditor extends THREE.EventDispatcher{
         Potree.Utils.updateVisible(this.panoMeshs, 'entered', true)
         Potree.Utils.updateVisible(this.lineMeshes, 'entered', true)  
         Potree.settings.unableNavigate = true
+        viewer.images360.panos.forEach(pano=>{
+             this.setPanoVisible(pano,true,'atPanoEditor',1,'add') //覆盖没进入编辑时因exist为false的隐藏
+        }) 
+         
          
         let originFloor = viewer.modules.SiteModel.inEntity  //还未编辑时的楼层 
         if(originFloor?.buildType != 'floor')originFloor = null
@@ -413,6 +421,7 @@ class PanoEditor extends THREE.EventDispatcher{
         Potree.settings.ifShowMarker = true
         Potree.Utils.updateVisible(this.panoMeshs, 'entered', false)
         Potree.Utils.updateVisible(this.lineMeshes, 'entered', false) 
+        
         Potree.settings.unableNavigate = false
         viewer.setFOV(Potree.config.view.fov)
         this.selectPano(null)
@@ -422,12 +431,20 @@ class PanoEditor extends THREE.EventDispatcher{
             this.activeViewName && this.switchView('mainView',true)
             viewer.images360.panos.forEach(pano=>{   
                 this.switchPanoVisible(pano,true) 
+                //this.setPanoVisible(pano, pano.panoData.exist  ,'exist')
+                pano.setEnable(pano.panoData.exist)
+                this.setPanoVisible(pano,false,'atPanoEditor',1,'cancel') //取消硬性显示
             }) 
             this.setLinkOperateState('addLink', false, false)
             this.setLinkOperateState('removeLink', false, false)
             this.setZoomInState(false, false)
             this.setTranMode(null)
-            Alignment.history.clear()
+            Alignment.history.clear() 
+            
+            if(!viewer.images360.currentPano.enabled){//切换到可见点
+                let enabledPano = viewer.images360.findNearestPano() 
+                enabledPano && viewer.images360.flyToPano({pano:enabledPano, duration:0})
+            }
         }
         this.entered = false
         
@@ -435,6 +452,8 @@ class PanoEditor extends THREE.EventDispatcher{
             this.removeEventListener('allLoaded',this.initCallback)
             this.initCallback = null
         }
+        
+        
     }
     
     
@@ -789,7 +808,7 @@ class PanoEditor extends THREE.EventDispatcher{
         }else if(this.activeViewName == 'mainView'){
             //if(floor != 'all'){ //切换一下位置,因为原处点云会消失
                  //viewer.scene.view.setView({position:center,  duration })
-                viewer.focusOnObject({boundingBox:bound},'boundingBox')
+                viewer.focusOnObject({boundingBox:bound},'boundingBox',800, {dontChangeCamDir:true})
             //}   
         }
         
@@ -822,7 +841,7 @@ class PanoEditor extends THREE.EventDispatcher{
     
     switchPanoVisible(pano, v, informBy2d){ 
         //console.log(pano.id,v) 
-        this.setPanoVisible(pano,v,'panoEditor')
+        this.setPanoVisible(pano,v,'panoEditorVisi', 2 )
         if(v){
             this.visiblePanos.includes(pano) || this.visiblePanos.push(pano)
         }else{
@@ -1662,6 +1681,11 @@ class PanoEditor extends THREE.EventDispatcher{
     
     
     注:quaternion四个数都取相反数结果不变,即(x,y,z,w) == (-x,-y,-z,-w), 不信都转成Euler就会一样。而用angleTo比较却不是0
+ 
+ 
+ exist为false的点没有深度图,而保存后exist为true不点击计算也没有。
+ 
+ 
  */
 
 export default new PanoEditor()

+ 4 - 1
src/custom/modules/panos/Images360.js

@@ -1294,7 +1294,7 @@ export class Images360 extends THREE.EventDispatcher{
     isNeighbour(pano0, pano1, {dontCompute, onlyUseTex,  computeDirFirst, computeTwoDir}={}){//是否之间没有遮挡(在加载visibles之前,自己算) 最好pano0是currentPano
          
         if(!pano0 || !pano1 )return
-        if(!viewer.scene.pointclouds.some(e=>e.hasDepthTex))return true
+        if(!viewer.scene.pointclouds.some(e=>e.hasDepthTex) || Potree.settings.editType == 'pano')return true //点云编辑页设置exist true但不恢复的话,得不到depthTex。 则Neighbours很难算。所以现在先全部可走。
         let margin = 0.1;
         
         let map0 = this.neighbourMap[pano0.id]; //主
@@ -2660,6 +2660,9 @@ Images360.prototype.getNeighbours = function(){ //逐渐自动获取neighbours
     
     return function( interacted){
            
+        if(Potree.settings.editType == 'pano')return   
+           
+           
         if(!this.currentPano || viewer.mainViewport.view.isFlying() || viewer.lastFrameChanged || viewer.inputHandler.drag  //拖拽时不更新,否则移动端卡
             || !viewer.scene.pointclouds.some(e=>e.hasDepthTex) //目前无深度图的话不判断可行,全部可通行
         ){ 

+ 1 - 0
src/custom/modules/panos/Panorama.js

@@ -227,6 +227,7 @@ class Panorama extends THREE.EventDispatcher{
         Potree.Utils.updateVisible(this, 'isEnabled', enable) //令所有marker不可见
 
         this.enabled = enable 
+        viewer.dispatchEvent('content_changed')
         //如果当前在全景模式且在这个点,需要切换显示吗? 目前用不到 
     }
 

+ 2 - 0
src/custom/modules/panos/tile/TileDownloader.js

@@ -106,6 +106,7 @@ class TileDownloader extends THREE.EventDispatcher{
     update() {
         if(!this.panos)return
         let time = Potree.Common.getBestCountFPS('processPriorityQueue', false, 700, 66 ) 
+         
         if(this.downloadCubeTex){ //可以下载贴图
             var e = this.forceQueue.length > 0;
             this.processQueueForDownloading(this.forceQueue);
@@ -247,6 +248,7 @@ class TileDownloader extends THREE.EventDispatcher{
     }
 
     startDownload(e) {//开始下载啦 
+     
         startdownloads.push(e) 
         e.local2SrcFailed = this.local2SrcFailed
         e.status = DownloadStatus.Downloading;

+ 3 - 3
src/custom/modules/siteModel/SiteModel.js

@@ -1288,11 +1288,11 @@ var SiteModel = {
                 if(entity.panos.includes(viewer.images360.currentPano)) return 'posNoChange' //已在当前实体中
 
                 let position = viewer.scene.getActiveCamera().position
-                let request = []
+                let request = [Images360.filters.isEnabled()]
                 let rank = [Images360.scoreFunctions.distanceSquared({ position })]
                 let r = Common.sortByScore(entity.panos, request, rank)
 
-                aimPano = r[0].item
+                aimPano = r[0]?.item
             } else {
                 if (!entity.flagPano) {
                     return console.log('没有flagPano')
@@ -1300,7 +1300,7 @@ var SiteModel = {
                 aimPano = entity.flagPano
             }
             if(aimPano == viewer.images360.currentPano) return 'posNoChange'
-            viewer.images360.flyToPano(aimPano)
+            aimPano && viewer.images360.flyToPano(aimPano)
         }else{  
             if(isNearBy && entity.ifContainsPoint(viewer.images360.position)  ){
                 return 'posNoChange' //已在当前实体中

+ 1 - 1
src/custom/objects/tool/Compass.js

@@ -29,7 +29,7 @@ class Compass extends THREE.EventDispatcher{
         } 
         this.dom.css({ display:"none",  position:"absolute",right:"1%",top: "60px",width:width+"px",height:height+"px", "z-index":100,"pointer-events":"none" })
 
-        let child = $("<div class='dirText north'><span>"+/* (config.lang=='zh'? */''/* :'N') */+"</span></div><div class='center'></div>")
+        let child = $("<div class='dirText north'><span>"+/* (config.lang=='zh'? */'N'/* :'N') */+"</span></div><div class='center'></div>")
         this.dom.append(child)  
 
          

+ 1 - 0
src/custom/objects/tool/Measure.js

@@ -919,6 +919,7 @@ export class Measure extends ctrlPolygon{
         this.areaLabel && labels.push(this.areaLabel)
         labels.forEach(e=>e.dispose())
         this.expands.forEach(e=>e.dispose())
+        this.expands.length = 0
         super.dispose()
         this.dispatchEvent('disposed')
     }

+ 20 - 13
src/custom/potree.shim.js

@@ -284,20 +284,27 @@ Utils.getMousePointCloudIntersection = function(viewport, mouse, pointer, camera
     if(!pointclouds || pointclouds.filter(e=>Potree.Utils.getObjVisiByReason(e, 'datasetSelection')).length == 0)return
     //console.log('getMousePointCloudIntersection')
     let renderer = viewer.renderer;
+    let resolution = pickParams.resolution || viewport?.resolution || renderer.getSize(new THREE.Vector2)
     
     
+    if(pickParams.ifCenter){
+        pickParams.x = Math.round(resolution.x / 2)
+        pickParams.y = Math.round(resolution.y / 2)
+    }else{
+        /* if(viewport){ //转换到类似整个画面时 
+            pickParams.x = mouse.x;
+            pickParams.y = viewport.resolution.y - mouse.y;
+        }else{ 
+            pickParams.x = mouse.x;
+            pickParams.y = renderer.domElement.clientHeight - mouse.y; 
+        }  */
+        
+        pickParams.x = mouse.x; 
+        pickParams.y = resolution.y - mouse.y; 
+    }
+    
     
     
-    if(viewport){ //转换到类似整个画面时
-        /*let mouseInViewport = Utils.convertNDCToScreenPosition(pointer, null, viewport.resolution.x, viewport.resolution.y)
-        pickParams.x = mouseInViewport.x   //mouse.x / viewport.width;
-        pickParams.y = mouseInViewport.y //renderer.domElement.clientHeight - mouse.y / viewport.height;  */
-        pickParams.x = mouse.x;
-        pickParams.y = viewport.resolution.y - mouse.y;
-    }else{ 
-        pickParams.x = mouse.x;
-        pickParams.y = renderer.domElement.clientHeight - mouse.y; 
-    } 
      
     //console.log('getMousePointCloudIntersection')
       
@@ -374,10 +381,10 @@ Utils.getMousePointCloudIntersection = function(viewport, mouse, pointer, camera
             Potree.updatePointClouds(pointclouds,  camera, viewport.resolution );  
         }else{
             //尽量减少点云加载的范围,集中在pick的空间(这部分以外还是会加载一些散点的)
-            let viewWidth = 80 //viewer.magnifier ? viewer.magnifier.viewport.resolution.x : 200
+            let viewWidth = Math.max(pickParams.pickWindowSize||80,  80)    //viewer.magnifier ? viewer.magnifier.viewport.resolution.x : 200
             let camera_ = camera.clone() 
-            camera_.setViewOffset( viewport.resolution.x, viewport.resolution.y,   pickParams.x-viewWidth/2, (viewport.resolution.y - pickParams.y)-viewWidth/2,      viewWidth, viewWidth ); //注意offsetY是从上到下,和一般的不同
-            Potree.updatePointClouds(pointclouds,  camera_, viewport.resolution );   
+            camera_.setViewOffset(  resolution.x, resolution.y,   pickParams.x-viewWidth/2, ( resolution.y - pickParams.y)-viewWidth/2,      viewWidth, viewWidth ); //注意offsetY是从上到下,和一般的不同
+            Potree.updatePointClouds(pointclouds,  camera_, resolution );   
         }  
     }
     

+ 15 - 10
src/custom/start.js

@@ -660,17 +660,22 @@ export function panoEditStart(dom, number, EditCloudsArgs){
     Potree.loadPanosCloudStart = (EditCloudsArgs)=>{
         Potree.loadDatasets((datasets)=>{ 
             Potree.datasetData = datasets   //4dkk的加载为空[]
-            
-            if(!(EditCloudsArgs instanceof Array)) EditCloudsArgs = [EditCloudsArgs] 
-            EditCloudsArgs.forEach((e,i)=>{ //加载点云和漫游点
-                if(e.datasetId == void 0){
-                    console.error('没有datasetId ')// 看看和看见没有或为0
-                    e.datasetId = i; //经常没有datasetId所以自己加
-                }  
-                Potree.settings.datasetsPanos[e.datasetId] = null
-                Potree.loadPanosDone(e.datasetId, e.clouds)
+            Potree.loadImgVersion((e={})=>{ 
+                Potree.settings.panoVersion = e.imgVersion//全景图被替换后 
                 
-            }) 
+                if(!(EditCloudsArgs instanceof Array)) EditCloudsArgs = [EditCloudsArgs] 
+                EditCloudsArgs.forEach((e,i)=>{ //加载点云和漫游点
+                    if(e.datasetId == void 0){
+                        console.error('没有datasetId ')// 看看和看见没有或为0
+                        e.datasetId = i; //经常没有datasetId所以自己加
+                    }  
+                    Potree.settings.datasetsPanos[e.datasetId] = null
+                    Potree.loadPanosDone(e.datasetId, e.clouds)
+                    
+                }) 
+                
+            })
+            
         },number)
     }
     

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

@@ -67,7 +67,7 @@ import CamAniEditor from '../modules/CameraAnimation/CamAniEditor.js'
 import PanoEditor  from '../modules/panoEdit/panoEditor.js' 
 import VolumeComputer from '../modules/VolumeCompute/VolumeComputer.js' 
  
-
+import AnimationEditor from '../modules/Animation/AnimationEditor.js' 
 import {InputHandler} from "../../navigation/InputHandlerNew.js";
 
 import Magnifier from "../objects/Magnifier.js";
@@ -156,6 +156,7 @@ export class Viewer extends ViewerBase{
                 this.modules.MergeEditor = MergeEditor 
                 this.modules.CamAniEditor = CamAniEditor
                 Potree.settings.useDepthTex = Potree.settings.mergeType2
+                //this.modules.AnimationEditor = new AnimationEditor
             }
             
         }else{
@@ -4087,7 +4088,7 @@ export class Viewer extends ViewerBase{
             }
             
             let {promise} = this.focusOnObject(info.measurement, 'measure', 0, {
-                basePanoSize:1024,  gotoBestView:true,
+                 basePanoSize:1024,   gotoBestView:true,
                //minMapWidth: THREE.Math.clamp(Math.min(viewer.bound.boundSize.x,  viewer.bound.boundSize.y) / (20/* this.mapViewer.mapLayer.maps.find(e=>e.name == 'map').disabled  ? 6 : 3*/),  2, 25)           //有地图的话为了显示出名字需要更大范围
             })//注意:不同角度截图 得到三维的会不一样,因为focusOnObject是根据方向的
             promise.done(()=>{  
@@ -4651,9 +4652,9 @@ export class Viewer extends ViewerBase{
                         dis = bestDistance
                     }
                     
-                    let dir = o.direction ? o.direction.clone().negate() :  this.mainViewport.view.direction.negate()// */new THREE.Vector3().subVectors(camera.position, target).normalize() 
-                    if(o.dontLookUp && dir.z<0)  dir.z *= -1
-                    position.copy(target).add(dir.multiplyScalar(dis))
+                    let dir_ = o.direction ? o.direction.clone().negate() :  this.mainViewport.view.direction.negate()// */new THREE.Vector3().subVectors(camera.position, target).normalize() 
+                    if(o.dontLookUp && dir_.z<0)  dir_.z *= -1
+                    position.copy(target).add(dir_.multiplyScalar(dis))
                 } 
                 
                 if(o.sameFloor){//需要在同一楼层
@@ -5137,7 +5138,7 @@ export class Viewer extends ViewerBase{
         let size = performance.memory.usedJSHeapSize / 1e6 
         let minSize = 1500, maxSize = 3000, intervalTime = math.linearClamp(size, [minSize, maxSize*1.2], [20000, 3000])
         if(size > minSize){ 
-            Potree.Common.intervalTool.isWaiting('processPriorityQueue', () => {  
+            Potree.Common.intervalTool.isWaiting('warnMemory', () => {  
                 size = Math.round(size)
                 let L = math.linearClamp(size, [minSize, maxSize], [1, 0.5]);  //L从白到红是1到0.5
                 Potree.Log('warning!内存告急!usedJSHeapSize:' + size ,  {   

+ 13 - 10
src/navigation/InputHandlerNew.js

@@ -833,7 +833,7 @@ export class InputHandler extends THREE.EventDispatcher {
         
     }
 
-    getIntersect({viewport, onlyGetIntersect, pickWindowSize, dontIntersect, usePointcloud, useDepthTex,  cameraPos,  point, pano, clientX, clientY}={}){// usePointcloud:必须使用点云
+    getIntersect({viewport,onlyGetIntersect, pickWindowSize, dontIntersect, usePointcloud, useDepthTex, all, highLevelCloud, cameraPos, pointSize, pointclouds, point, pano, clientX, clientY, resolution}={}){// usePointcloud:必须使用点云
         let intersect, intersectPoint, intersectOnModel, allElements 
         let camera = viewport.camera
         let raycaster 
@@ -858,16 +858,17 @@ export class InputHandler extends THREE.EventDispatcher {
         
         let getByCloud = ()=>{
 
-            let pointer, mouse
+            let pointer, mouse, ifCenter
             if(point){//指定了目标点,而非只是用pointer所在位置
              
                 cameraPos && camera.position.copy( cameraPos)
                 camera.lookAt(point)
                 camera.updateMatrixWorld()
-                pointer = this.pointer.clone()
-                mouse = this.mouse.clone()
-                this.pointer.set(0,0)   //画布中心
-                this.mouse.set(Math.round(viewport.resolution.x/2), Math.round(viewport.resolution.y/2))
+                ifCenter = true
+                //pointer = this.pointer.clone()
+                //mouse = this.mouse.clone()
+                //this.pointer.set(0,0)   //画布中心
+                //this.mouse.set(Math.round(viewport.resolution.x/2), Math.round(viewport.resolution.y/2))
             } 
                 
             intersectPoint = (viewport.noPointcloud || dontIntersect )? null : Utils.getMousePointCloudIntersection(
@@ -876,16 +877,18 @@ export class InputHandler extends THREE.EventDispatcher {
                 this.pointer, 
                 camera, 
                 this.viewer, 
-                this.viewer.scene.pointclouds,
-                {pickClipped: true, measuring: this.measuring.length>0, pickWindowSize, cameraChanged: !!point }  
+                pointclouds || this.viewer.scene.pointclouds,
+                 
+                {pickClipped: true, ifCenter, all, measuring: this.measuring.length>0 || highLevelCloud, pickWindowSize, cameraChanged: !!point, 
+                    pointSize , resolution }  
                 
             );
 
             //恢复
             if(point){
                 viewport.view.applyToCamera(camera)
-                this.pointer.copy(pointer)
-                this.mouse.copy(mouse)
+                //this.pointer.copy(pointer)
+                //this.mouse.copy(mouse)
             }  
         }