浏览代码

Merge branch 'next-ver' into diff

xzw 2 年之前
父节点
当前提交
23ad2cf71d

+ 6 - 3
src/ExtendPointCloudOctree.js

@@ -565,7 +565,10 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
                 }else{
                 }else{
                     
                     
                     let base = this.material.spacing / Math.pow(2, this.maxLevel) //点云大小在level为0时设置为spacing,每长一级,大小就除以2.  (不同场景还是会有偏差)
                     let base = this.material.spacing / Math.pow(2, this.maxLevel) //点云大小在level为0时设置为spacing,每长一级,大小就除以2.  (不同场景还是会有偏差)
-                    base *=  nodeMaxLevel > 0 ? Math.max(0.1, Math.pow(this.maxLevel /  nodeMaxLevel, 1.4)) : 0.1 //低质量的缩小点,因为视觉上看太大了。navvis是不铺满的,我们也留一点缝隙(但是ortho是不用缩小的,如果能分开判断就好了)
+                    let r = this.maxLevel /  nodeMaxLevel  //越大,越精细,需要越缩小
+                    base *=  nodeMaxLevel > 0 ? Math.max(0.1, Math.pow(r, 3*r+0.3 )) : 0.1 //低质量的缩小点,因为视觉上看太大了。navvis是不铺满的,我们也留一点缝隙(但是ortho是不用缩小的,如果能分开判断就好了)
+                    
+                    //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 * 5 * num_/*  * window.devicePixelRatio */
                     //在t-8BCqxQAr93 会议室 和 t-e2Kb2iU 隧道 两个场景里调节,因为它们的spacing相差较大,观察会议室墙壁的龟裂程度
                     //在t-8BCqxQAr93 会议室 和 t-e2Kb2iU 隧道 两个场景里调节,因为它们的spacing相差较大,观察会议室墙壁的龟裂程度
@@ -617,8 +620,8 @@ export class ExtendPointCloudOctree extends PointCloudOctree{
                 opacity = value
                 opacity = value
             }else{
             }else{
                 if(Potree.settings.sizeFitToLevel){//按照点云质量来调整的版本:
                 if(Potree.settings.sizeFitToLevel){//按照点云质量来调整的版本:
-                    let base = this.material.spacing / Math.pow(1.5, this.maxLevel) //随着level提高,点云重叠几率增多
-                    let minBase = this.material.spacing / Math.pow(1.5, this.nodeMaxLevel)
+                    let base = this.material.spacing / Math.pow(1.7, this.maxLevel) //随着level提高,点云重叠几率增多
+                    let minBase = this.material.spacing / Math.pow(1.7, this.nodeMaxLevel)
                     let ratio = Math.min(1 / base, 1 / minBase / 3) //ratio为一个能使opacity不大于1 的 乘量,minBase要除以一个数,该数调越大减弱效果越强。level越低opacity和面板越接,level越高效果越弱,以减免过度重叠后的亮度。
                     let ratio = Math.min(1 / base, 1 / minBase / 3) //ratio为一个能使opacity不大于1 的 乘量,minBase要除以一个数,该数调越大减弱效果越强。level越低opacity和面板越接,level越高效果越弱,以减免过度重叠后的亮度。
                     opacity = base * ratio * num
                     opacity = base * ratio * num
                     if(!canMoreThanOne){
                     if(!canMoreThanOne){

+ 4 - 4
src/custom/modules/datasetAlignment/Alignment.js

@@ -296,9 +296,9 @@ var Alignment = {
         
         
         this.SplitScreen.split({alignment:true})
         this.SplitScreen.split({alignment:true})
          
          
-        viewer.images360.panos.forEach(pano=>{
+        /* viewer.images360.panos.forEach(pano=>{
             Potree.Utils.updateVisible(pano.mapMarker, 'split4Screens', false)
             Potree.Utils.updateVisible(pano.mapMarker, 'split4Screens', false)
-        }) 
+        }) */ 
         
         
         viewer.viewports.find(e=>e.name == 'mapViewport').alignment = {rotate:true,translate:true};
         viewer.viewports.find(e=>e.name == 'mapViewport').alignment = {rotate:true,translate:true};
         viewer.viewports.find(e=>e.name == 'right').alignment = {translate:true, translateVec:new THREE.Vector3(0,0,1)}; //只能上下移动
         viewer.viewports.find(e=>e.name == 'right').alignment = {translate:true, translateVec:new THREE.Vector3(0,0,1)}; //只能上下移动
@@ -326,9 +326,9 @@ var Alignment = {
         
         
         
         
         this.SplitScreen.recover()
         this.SplitScreen.recover()
-        viewer.images360.panos.forEach(pano=>{
+        /* viewer.images360.panos.forEach(pano=>{
             Potree.Utils.updateVisible(pano.mapMarker, 'split4Screens', true)
             Potree.Utils.updateVisible(pano.mapMarker, 'split4Screens', true)
-        }) 
+        })  */
         this.editing = false
         this.editing = false
         this.history.clear() 
         this.history.clear() 
         viewer.updateFpVisiDatasets()
         viewer.updateFpVisiDatasets()

+ 5 - 4
src/custom/modules/panoEdit/panoEditor.js

@@ -156,7 +156,7 @@ class PanoEditor extends THREE.EventDispatcher{
                 }); 
                 }); 
                 this.transformControls.setSize(1.5)
                 this.transformControls.setSize(1.5)
                 viewer.scene.scene.add(this.transformControls)
                 viewer.scene.scene.add(this.transformControls)
-                this.transformControls._gizmo.hideAxis = {translate:['x','y'], rotate:['x','y','e'] }
+                this.transformControls._gizmo.hideAxis = {/* translate:['x','y'], */ rotate:['x','y','e'] }
                 this.transformControls.setRotateMethod(2)
                 this.transformControls.setRotateMethod(2)
                 
                 
                 this.fakeMarkerForTran = new THREE.Mesh(new THREE.BoxBufferGeometry(0.3,0.3,0.3) , new THREE.MeshBasicMaterial({
                 this.fakeMarkerForTran = new THREE.Mesh(new THREE.BoxBufferGeometry(0.3,0.3,0.3) , new THREE.MeshBasicMaterial({
@@ -700,9 +700,10 @@ class PanoEditor extends THREE.EventDispatcher{
         if(this.activeViewName != 'mainView'   ){ 
         if(this.activeViewName != 'mainView'   ){ 
             fitBound && this.orthoMoveFit(center, {bound},  duration)
             fitBound && this.orthoMoveFit(center, {bound},  duration)
         }else if(this.activeViewName == 'mainView'){
         }else if(this.activeViewName == 'mainView'){
-            if(floor != 'all'){ //切换一下位置,因为原处点云会消失
-                 viewer.scene.view.setView({position:center,  duration })
-            }   
+            //if(floor != 'all'){ //切换一下位置,因为原处点云会消失
+                 //viewer.scene.view.setView({position:center,  duration })
+                viewer.focusOnObject({boundingBox:bound},'boundingBox')
+            //}   
         }
         }
         
         
         this.currentFloor = floor
         this.currentFloor = floor

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

@@ -462,7 +462,7 @@ export class Images360 extends THREE.EventDispatcher{
                 },
                 },
                 set: function(e) {
                 set: function(e) {
                     if(e != currentPano){
                     if(e != currentPano){
-                        //console.log('set currentPano ', e.id)
+                         console.log('set currentPano ', e.id)
                         currentPano && currentPano.exit()
                         currentPano && currentPano.exit()
                         e && e.enter()
                         e && e.enter()
                         currentPano = e
                         currentPano = e
@@ -632,7 +632,7 @@ export class Images360 extends THREE.EventDispatcher{
 
 
 	cancelFlyToPano(toPano){//取消当前已有的飞行准备,前提是相机还未移动 
 	cancelFlyToPano(toPano){//取消当前已有的飞行准备,前提是相机还未移动 
         if(viewer.mainViewport.view.isFlying() || toPano && this.latestToPano != toPano)return
         if(viewer.mainViewport.view.isFlying() || toPano && this.latestToPano != toPano)return
-        //Potree.Log('cancelFlyToPano', this.latestToPano && this.latestToPano.pano.id)
+        Potree.Log('cancelFlyToPano', this.latestToPano && this.latestToPano.pano.id)
         this.nextPano = null 
         this.nextPano = null 
         this.latestToPano = null 
         this.latestToPano = null 
     }
     }
@@ -2155,6 +2155,7 @@ export class Images360 extends THREE.EventDispatcher{
         this.panos.forEach(e=>{
         this.panos.forEach(e=>{
             this.neighbourMap[e.id] = {}
             this.neighbourMap[e.id] = {}
             e.label && Potree.Utils.setObjectLayers(e.label, 'bothMapAndScene') 
             e.label && Potree.Utils.setObjectLayers(e.label, 'bothMapAndScene') 
+            e.label2 && Potree.Utils.setObjectLayers(e.label2, 'bothMapAndScene') 
         }) 
         }) 
         
         
         this.tileDownloader.setPanoData(this.panos, [] /* , Potree.settings.number */);
         this.tileDownloader.setPanoData(this.panos, [] /* , Potree.settings.number */);

+ 25 - 13
src/custom/modules/panos/Panorama.js

@@ -4,6 +4,7 @@ import TileUtils from './tile/TileUtils.js'
                                                                                    
                                                                                    
 import math from '../../utils/math.js' 
 import math from '../../utils/math.js' 
 import {TextSprite} from '../../objects/TextSprite.js'
 import {TextSprite} from '../../objects/TextSprite.js'
+import Sprite from '../../objects/Sprite.js'
 import DepthBasicMaterial from "../../materials/DepthBasicMaterial.js"; 
 import DepthBasicMaterial from "../../materials/DepthBasicMaterial.js"; 
 
 
 let { PanoRendererEvents, PanoramaEvents, PanoSizeClass} = Potree.defines
 let { PanoRendererEvents, PanoramaEvents, PanoSizeClass} = Potree.defines
@@ -81,7 +82,7 @@ class Panorama extends THREE.EventDispatcher{
             if(e.reason == 'screenshot' || e.visible){
             if(e.reason == 'screenshot' || e.visible){
                 this.label && (this.label.visible = e.visible)//截图时隐藏下
                 this.label && (this.label.visible = e.visible)//截图时隐藏下
             }
             }
-            this.label2 && Potree.Utils.updateVisible(this.label2, 'panoVisi', e.visible)
+            //this.label2 && Potree.Utils.updateVisible(this.label2, 'panoVisi', e.visible)
         })
         })
         /*  
         /*  
         漫游点可见性:旧
         漫游点可见性:旧
@@ -288,17 +289,22 @@ class Panorama extends THREE.EventDispatcher{
             //this.quaternion = quaternion
             //this.quaternion = quaternion
         } 
         } 
          
          
-        let marker = new THREE.Mesh(planeGeo, this.getMarkerMat() ) 
+        /* let marker = new THREE.Mesh(planeGeo, this.getMarkerMat() ) 
+            
+            //marker.lookAt(marker.up) 
+            marker.scale.set(2,2,2)  */
+            
+        let marker = new Sprite({mat:this.getMarkerMat(), dontFixOrient:true })
+            marker.scale.set(0.4,0.4,0.4)
             marker.name = 'marker_'+this.id
             marker.name = 'marker_'+this.id
             marker.up.set(0,0,1)
             marker.up.set(0,0,1)
-            marker.lookAt(marker.up) 
-            marker.scale.set(2,2,2) 
+            
         this.addEventListener('changeMarkerTex',(e)=>{
         this.addEventListener('changeMarkerTex',(e)=>{
             marker.material.map = markerTex[e.name]  
             marker.material.map = markerTex[e.name]  
         })    
         })    
              
              
         this.marker = marker 
         this.marker = marker 
-        
+        marker.pano = this;
         this.images360.node.add(marker)
         this.images360.node.add(marker)
         Potree.settings.isTest && this.addLabel()
         Potree.settings.isTest && this.addLabel()
         //this.addLabel2() 
         //this.addLabel2() 
@@ -341,15 +347,15 @@ class Panorama extends THREE.EventDispatcher{
             this.label.update()
             this.label.update()
         }
         }
         
         
-        if(this.label2){
+        /* if(this.label2){
             if(Potree.settings.editType == 'pano'){
             if(Potree.settings.editType == 'pano'){
                 this.label2.position.copy(this.position)
                 this.label2.position.copy(this.position)
             }else{
             }else{
                 this.label2.position.copy(this.floorPosition)
                 this.label2.position.copy(this.floorPosition)
             }
             }
-            this.label2.position.copy(this.marker.position)
+            this.label2.position.copy(this.marker.position) 
             this.label2.update()
             this.label2.update()
-        }
+        } */
           
           
     }
     }
     
     
@@ -553,12 +559,18 @@ class Panorama extends THREE.EventDispatcher{
         this.label2 = new TextSprite(Object.assign({},
         this.label2 = new TextSprite(Object.assign({},
            labelProp2, {text: /* this.originID  */   parseInt(this.id)+1   }) //{text: `id:${this.id}, dataset:${this.pointcloud.name}, 4dkkId:${this.originID}`}
            labelProp2, {text: /* this.originID  */   parseInt(this.id)+1   }) //{text: `id:${this.id}, dataset:${this.pointcloud.name}, 4dkkId:${this.originID}`}
         ); 
         ); 
-        this.images360.node.add(this.label2);
-        this.floorPosition && this.label2.position.copy(this.floorPosition)
-        let s = 0.4
-        this.label2.scale.set(s,s,s)
+        //this.images360.node.add(this.label2);
+        this.marker.add(this.label2)
+        
+        //this.floorPosition && this.label2.position.copy(this.floorPosition)
+        //let s = 0.25
+        //this.label2.scale.set(s,s,s)
         Potree.Utils.updateVisible(this.label2, 'notDisplay', false)
         Potree.Utils.updateVisible(this.label2, 'notDisplay', false)
-        Potree.Utils.updateVisible(this.label2, 'panoVisi', this.visible)
+        //Potree.Utils.updateVisible(this.label2, 'panoVisi', this.visible)
+        
+        
+        
+        Potree.Utils.setObjectLayers(this.label2, 'bothMapAndScene') 
     }
     }
     
     
     removeTextLabel(){
     removeTextLabel(){

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

@@ -176,7 +176,8 @@ var SiteModel = {
         
         
         
         
         viewer.images360.panos.forEach(pano=>{
         viewer.images360.panos.forEach(pano=>{
-            Potree.Utils.setObjectLayers(pano.marker, 'siteModelMapUnvisi' ) 
+            Potree.Utils.setObjectLayers(pano.marker, 'siteModelMapUnvisi' )
+            Potree.Utils.setObjectLayers(pano.label2, 'bothMapAndScene')             
         }) 
         }) 
         mapViewport.layersAdd('siteModeOnlyMapVisi') //只有mapViewport能看到marker
         mapViewport.layersAdd('siteModeOnlyMapVisi') //只有mapViewport能看到marker
        
        
@@ -204,6 +205,7 @@ var SiteModel = {
 
 
         viewer.images360.panos.forEach(pano=>{
         viewer.images360.panos.forEach(pano=>{
             Potree.Utils.setObjectLayers(pano.marker, 'sceneObjects' ) 
             Potree.Utils.setObjectLayers(pano.marker, 'sceneObjects' ) 
+            Potree.Utils.setObjectLayers(pano.label2, 'bothMapAndScene') 
         })
         })
         
         
         mapViewport.layersRemove('siteModeOnlyMapVisi') 
         mapViewport.layersRemove('siteModeOnlyMapVisi') 

+ 4 - 4
src/custom/settings.js

@@ -108,13 +108,13 @@ const config = {//配置参数   不可修改
         }, 
         }, 
         
         
         fourViewports:{//分四屏时防止卡顿
         fourViewports:{//分四屏时防止卡顿
-            maxLevelPercent: 0.4,  
-            pointBudget :1*1000*1000, // 只要限制这个就足够 (为什么分屏focus区域不同会闪烁,navvis不会)(navvis:maxLevel:5,pointBudget:1*1000*1000)
+            maxLevelPercent: 0.9,  
+            pointBudget :3*1000*1000, // 只要限制这个就足够 (为什么分屏focus区域不同会闪烁,navvis不会)(navvis:maxLevel:5,pointBudget:1*1000*1000)
             minNodeSize : 70,
             minNodeSize : 70,
         }, 
         }, 
         fourViewportsMain:{//分四屏时防止卡顿
         fourViewportsMain:{//分四屏时防止卡顿
-            maxLevelPercent: 0.8,  
-            pointBudget :1*1000*1000, // 只要限制这个就足够 (为什么分屏focus区域不同会闪烁,navvis不会)(navvis:maxLevel:5,pointBudget:1*1000*1000)
+            maxLevelPercent: 0.9,  
+            pointBudget :3*1000*1000, // 只要限制这个就足够 (为什么分屏focus区域不同会闪烁,navvis不会)(navvis:maxLevel:5,pointBudget:1*1000*1000)
             minNodeSize : 70,
             minNodeSize : 70,
         }   
         }   
         ,
         ,

+ 31 - 4
src/custom/utils/SplitScreen4Views.js

@@ -77,7 +77,11 @@ SplitScreen4Views.split = function(o={}){
     }) */
     }) */
         
         
         
         
-        
+    viewer.images360.panos.forEach(pano=>{
+        pano.addLabel2()
+        Potree.Utils.updateVisible(pano.label2, 'notDisplay', true)
+        pano.dispatchEvent({type:'changeMarkerTex',name:'ring'})
+    }) 
         
         
     //材质 
     //材质 
     this.statesBefore = { 
     this.statesBefore = { 
@@ -86,7 +90,7 @@ SplitScreen4Views.split = function(o={}){
         
         
         position: viewer.images360.position,
         position: viewer.images360.position,
         target: viewer.scene.view.getPivot(),
         target: viewer.scene.view.getPivot(),
-         
+        currentPano: viewer.images360.currentPano,
         
         
         //---
         //---
         //ifShowMarker : Potree.settings.ifShowMarker, 
         //ifShowMarker : Potree.settings.ifShowMarker, 
@@ -137,9 +141,21 @@ SplitScreen4Views.split = function(o={}){
                 Potree.settings.pointDensity = 'fourViewports' //强制降低点云质量
                 Potree.settings.pointDensity = 'fourViewports' //强制降低点云质量
                 
                 
                 //侧面重叠概率更大,所以透明度调小
                 //侧面重叠概率更大,所以透明度调小
-                e.changePointOpacity(this.name == "mapViewport" ? 0.6 : 0.06/* newOpacityMap.get(e).get(viewport), true */);  //多数据集有的数据集很小,放大后显示特别淡
+                e.changePointOpacity(this.name == "mapViewport" ? 0.2 : 0.06/* newOpacityMap.get(e).get(viewport), true */);  //多数据集有的数据集很小,放大后显示特别淡
                 //console.log(e.name, viewport.name, e.temp.pointOpacity, e.material.opacity)
                 //console.log(e.name, viewport.name, e.temp.pointOpacity, e.material.opacity)
-            }                 
+            } 
+            
+            
+            viewer.images360.panos.forEach(pano=>{
+                if(this.name == 'mapViewport'){
+                    Potree.Utils.updateVisible(pano.marker, 'showOnMap', true, 1, 'add'  ) 
+                }else{
+                    Potree.Utils.updateVisible(pano.marker, 'showOnMap', false, 1, 'cancel'  ) 
+                }
+            })
+ 
+
+            
         })  
         })  
     }    
     }    
     viewports.forEach(viewport=>{viewport.beforeRender = beforeRender})
     viewports.forEach(viewport=>{viewport.beforeRender = beforeRender})
@@ -174,6 +190,7 @@ SplitScreen4Views.recover = function(){
     viewer.setView({
     viewer.setView({
         position: this.statesBefore.position,
         position: this.statesBefore.position,
         target: this.statesBefore.target,
         target: this.statesBefore.target,
+        currentPano: this.statesBefore.currentPano,
         duration:300,
         duration:300,
         callback:function(){ 
         callback:function(){ 
         }
         }
@@ -190,6 +207,12 @@ SplitScreen4Views.recover = function(){
     /* viewer.images360.panos.forEach(pano=>{
     /* viewer.images360.panos.forEach(pano=>{
         Potree.Utils.updateVisible(pano.mapMarker, 'split4Screens', true)
         Potree.Utils.updateVisible(pano.mapMarker, 'split4Screens', true)
     }) */
     }) */
+    
+    viewer.images360.panos.forEach(pano=>{
+        Potree.Utils.updateVisible(pano.label2, 'notDisplay', false  )
+        pano.dispatchEvent({type:'changeMarkerTex',name:'default'})
+    })
+    
     mapViewport.noPointcloud = true
     mapViewport.noPointcloud = true
     { 
     { 
         this.enableMap(Potree.settings.mapEnable)
         this.enableMap(Potree.settings.mapEnable)
@@ -214,6 +237,10 @@ SplitScreen4Views.recover = function(){
     viewer.setPointStandardMat(false)
     viewer.setPointStandardMat(false)
     viewer.mapViewer.setViewLimit('standard')
     viewer.mapViewer.setViewLimit('standard')
     
     
+    viewer.images360.panos.forEach(pano=>{ 
+        Potree.Utils.updateVisible(pano.marker, 'showOnMap', false, 1, 'cancel'  )  
+    })
+
     //Potree.settings.ifShowMarker = this.statesBefore.ifShowMarker
     //Potree.settings.ifShowMarker = this.statesBefore.ifShowMarker
     //viewer.dispatchEvent({'type': 'finishSplitView' }) 
     //viewer.dispatchEvent({'type': 'finishSplitView' }) 
     //viewer.updateScreenSize({forceUpdateSize:true})  
     //viewer.updateScreenSize({forceUpdateSize:true})  

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

@@ -1106,7 +1106,7 @@ export class Viewer extends ViewerBase{
             o.sin = o.sin || Math.sqrt(Math.abs(camPos.z - pano.marker.position.z) / o.dis) //和地面夹角的sin。 按公式是不加Math.sqrt的,但是这样大马路上在贴近地面时算出的个数非常少,所以增大点……
             o.sin = o.sin || Math.sqrt(Math.abs(camPos.z - pano.marker.position.z) / o.dis) //和地面夹角的sin。 按公式是不加Math.sqrt的,但是这样大马路上在贴近地面时算出的个数非常少,所以增大点……
             return o.dis < maxDis * o.sin 
             return o.dis < maxDis * o.sin 
         }
         }
-        
+         
         
         
         viewer.images360.panos.forEach(pano=>{//minRadius内的记录为可见 
         viewer.images360.panos.forEach(pano=>{//minRadius内的记录为可见 
             let o = {}           
             let o = {}           
@@ -4444,6 +4444,7 @@ export class Viewer extends ViewerBase{
             if(o.displayMode){
             if(o.displayMode){
                 Potree.settings.displayMode = o.displayMode
                 Potree.settings.displayMode = o.displayMode
             }
             }
+            if(!o.pano && o.currentPano )this.images360.currentPano = o.currentPano
             o.callback && o.callback()
             o.callback && o.callback()
         } 
         } 
         
         

+ 1 - 1
src/materials/shaders/pointcloud_new.vs

@@ -1025,7 +1025,7 @@ void main() {
        // vOpacity = clamp(vOpacity, 0.001, 1.0);  
        // vOpacity = clamp(vOpacity, 0.001, 1.0);  
     }  
     }  
     
     
-    vOpacity *= max(0.1,  (1.0 - normalZ));//垂直朝相机时降低透明度 
+    vOpacity *= max(0.02,  pow((1.0 - normalZ),5.0));//垂直朝相机时降低透明度 
 
 
     // POINT SIZE
     // POINT SIZE
     float pointSize = getPointSize();
     float pointSize = getPointSize();

+ 12 - 1
src/navigation/FirstPersonControlsNew.js

@@ -233,8 +233,19 @@ export class FirstPersonControls extends THREE.EventDispatcher {
                             pointclouds = a && e.drag.intersectStart.pointclouds && Common.getMixedSet(Alignment.selectedClouds, e.drag.intersectStart.pointclouds).length && Alignment.selectedClouds
                             pointclouds = a && e.drag.intersectStart.pointclouds && Common.getMixedSet(Alignment.selectedClouds, e.drag.intersectStart.pointclouds).length && Alignment.selectedClouds
                             
                             
                         }else{ */
                         }else{ */
-                            pointclouds = a && e.drag.intersectStart.pointcloud && [e.drag.intersectStart.pointcloud]
+                            //pointclouds = a && e.drag.intersectStart.pointcloud && [e.drag.intersectStart.pointcloud]
                         //} 
                         //} 
+                        
+                        if(a && e.drag.intersectStart.pointcloud){
+                            pointclouds = [e.drag.intersectStart.pointcloud]
+                            if(e.drag.intersectStart.pointcloud.dataset_id == Potree.settings.originDatasetId){
+                                let p = e.drag.intersectStart.pointclouds.find(p=>p.dataset_id != Potree.settings.originDatasetId)
+                                if(p) pointclouds = [p] 
+                            }
+                        }
+                        
+                        
+                        
                     }
                     }
                       
                       
                     if(pointclouds){
                     if(pointclouds){

+ 12 - 5
src/navigation/InputHandlerNew.js

@@ -613,19 +613,26 @@ export class InputHandler extends THREE.EventDispatcher {
             
             
             if(pressDistance < Potree.config.clickMaxDragDis && pressTime<Potree.config.clickMaxPressTime && !e.unableClick){
             if(pressDistance < Potree.config.clickMaxDragDis && pressTime<Potree.config.clickMaxPressTime && !e.unableClick){
                 let clickElement, consumed = false;
                 let clickElement, consumed = false;
-                if(this.hoveredElements){
+                if(this.hoveredElements){ 
                     clickElement = this.hoveredElements.find(e=>e.object._listeners['click']) 
                     clickElement = this.hoveredElements.find(e=>e.object._listeners['click']) 
                     if(clickElement){
                     if(clickElement){
+                        let canceled 
+                        let cancel = () => { return canceled = true; };
                         //console.log('clickElement',clickElement)
                         //console.log('clickElement',clickElement)
                         if (this.logMessages) console.log(`${this.constructor.name}: click ${clickElement.name}`);
                         if (this.logMessages) console.log(`${this.constructor.name}: click ${clickElement.name}`);
                         clickElement.object.dispatchEvent($.extend(  
                         clickElement.object.dispatchEvent($.extend(  
                             this.getEventDesc(e,isTouch),
                             this.getEventDesc(e,isTouch),
                             {
                             {
                                 type: 'click',
                                 type: 'click',
-                                pressDistance     
+                                pressDistance ,
+                                cancel                                
                             }
                             }
                         )); 
                         )); 
+                        if(canceled){//比如只需要右键的话,可以忽视左键的点击
+                            clickElement = null
+                        }
                     } 
                     } 
+                    
                 }
                 }
                 
                 
                 
                 
@@ -772,9 +779,9 @@ export class InputHandler extends THREE.EventDispatcher {
 
 
 
 
     ifBlockedByIntersect({pos3d, margin=0, cameraPos, pickWindowSize, pano, useDepthTex}={}){//某点是否被遮挡(不允许camera修改位置, 因为depthTex不好置换)
     ifBlockedByIntersect({pos3d, margin=0, cameraPos, pickWindowSize, pano, useDepthTex}={}){//某点是否被遮挡(不允许camera修改位置, 因为depthTex不好置换)
-          
-        let intersect = this.getIntersect(this.hoverViewport, true, pickWindowSize, null, null, useDepthTex, {pos3d, cameraPos, pano})
-        let cameraPos_ = (!cameraPos && pano) ? pano.position : (cameraPos||this.hoverViewport.view.position)
+        let viewport = this.hoverViewport || viewer.mainViewport
+        let intersect = this.getIntersect(viewport, true, pickWindowSize, null, null, useDepthTex, {pos3d, cameraPos, pano})
+        let cameraPos_ = (!cameraPos && pano) ? pano.position : (cameraPos||viewport.view.position)
         if(intersect && intersect.distance+margin <= pos3d.distanceTo(cameraPos_)){
         if(intersect && intersect.distance+margin <= pos3d.distanceTo(cameraPos_)){
             return intersect //被遮挡
             return intersect //被遮挡
         }
         }