Просмотр исходного кода

昨天已经整理完了,还改了一点 点云编辑

xzw 2 лет назад
Родитель
Сommit
1a87d242bc

+ 15 - 7
src/custom/modules/panoEdit/panoEditor.js

@@ -120,7 +120,7 @@ class PanoEditor extends THREE.EventDispatcher{
                 }); 
                 this.transformControls.setSize(1.5)
                 viewer.scene.scene.add(this.transformControls)
-                this.transformControls._gizmo.hideAxis = {translate:[], rotate:['x','y','e'] }
+                this.transformControls._gizmo.hideAxis = {translate:['x','y'], rotate:['x','y','e'] }
                 this.transformControls.setRotateMethod(2)
                 
                 this.fakeMarkerForTran = new THREE.Mesh(new THREE.BoxBufferGeometry(0.3,0.3,0.3) , new THREE.MeshBasicMaterial({
@@ -250,10 +250,18 @@ class PanoEditor extends THREE.EventDispatcher{
                 viewer.scene.scene.add(this.linkGuideLine)
                 this.linkGuideLine.renderOrder = renderOrders.line
                 let update = (e)=>{
-                    if(this.operation != 'addLink' || this.activeViewName != 'top' || !this.selectedPano){
+                    if(this.operation != 'addLink' || this.activeViewName != 'top' && this.activeViewName != 'mainView' ||!this.selectedPano){
                         return this.linkGuideLine.visible = false
                     }
-                    LineDraw.updateLine(this.linkGuideLine, [this.selectedPano.position, e.intersect.orthoIntersect.clone().setZ(this.selectedPano.position.z)] ) 
+                    let endPos
+                    if(this.activeViewName == 'top' ){
+                        endPos = e.intersect.orthoIntersect.clone().setZ(this.selectedPano.position.z)
+                    }else if(this.activeViewName == 'mainView' ){
+                        if(!e.intersect.point)return
+                        endPos = e.intersect.point.position
+                    }
+                    
+                    LineDraw.updateLine(this.linkGuideLine, [this.selectedPano.position, endPos] ) 
                     this.linkGuideLine.visible = true
                 }
                 
@@ -951,11 +959,11 @@ class PanoEditor extends THREE.EventDispatcher{
             pano.addEventListener('rePos', setPos.bind(this,circle))
                
             let drag = ()=>{
-                if(this.activeViewName == 'mainView' && this.tranMode == 'translate'){
+                /* if(this.activeViewName == 'mainView' && this.tranMode == 'translate'){//如果3d页不禁止xy的话,这段打开
                     this.transformControls.dispatchEvent('dragging')//触发拖拽
                     return
-                }
-                if(this.tranMode != 'translate')return
+                } */
+                if(this.tranMode != 'translate' || this.activeViewName == 'mainView')return
                 this.selectPano(circle.pano)                    //为了方便拖拽点云,拖动circle就直接选中
               
                 viewer.inputHandler.drag.object = null  //取消拖拽状态,否则不触发点云拖动
@@ -1118,7 +1126,7 @@ class PanoEditor extends THREE.EventDispatcher{
         if(this.activeViewName == 'mainView'){
             //假设每个pointcloud所带的点个数大致相同,那么当可见点云个数越多,所能展示的level越低,否则因总个数超过budget的话密度会参差不齐。
             let visiCount = viewer.scene.pointclouds.filter(e=>e.visible).length
-            let maxCount = 70, minCount = 1,  minPer = 0.3, maxPer = 1
+            let maxCount = 70, minCount = 1,  minPer = 0.4, maxPer = 1
             percent = maxPer - ( maxPer - minPer) * THREE.Math.clamp((visiCount - minCount)  / (maxCount - minCount),0,1) //dis2d越大,角度要越小  
             //pointcloud.changePointSize()
             //console.log('updatePointLevels', percent, visiCount) 

+ 3 - 3
src/custom/settings.js

@@ -132,17 +132,17 @@ const config = {//配置参数   不可修改
         low:{//highPerformance
             maxLevelPercent: 0.4, //最小为0
             percentByUser:true, //如果用户定义了percent,使用用户的
-            pointBudget : 1*1000*1000,
+            pointBudget : browser.isMobile() ? 1*1000*1000 : 2*1000*1000, 
         }, 
         middle:{//balanced  //不同场景相同级别所产生的numVisibleNodes和numVisiblePoints不同,如果分层比较细,可能要到level8才能看清,那么level5看到的点就很大且很少,如隧道t-e2Kb2iU
             maxLevelPercent: 0.7,
             percentByUser:true,
-            pointBudget:browser.isMobile() ? 4*1000*1000 : 2*1000*1000, 
+            pointBudget:browser.isMobile() ? 2*1000*1000 : 4*1000*1000, 
         },
         high:{//highQuality
             maxLevelPercent: 1, 
             percentByUser:true,
-            pointBudget:browser.isMobile() ? 8*1000*1000 : 4*1000*1000,
+            pointBudget:browser.isMobile() ? 4*1000*1000 : 8*1000*1000,
         }
         //browser.isMobile() 时要不要限制下pointBudget,还是让用户自己调低质量?
         //minNodeSize?

+ 2 - 2
src/navigation/FirstPersonControlsNew.js

@@ -197,8 +197,8 @@ export class FirstPersonControls extends THREE.EventDispatcher {
                              
                         if(a && PanoEditor.selectedPano){
                             if(!PanoEditor.selectedGroup || !PanoEditor.checkIfAllLinked({group:PanoEditor.selectedGroup}) ){
-                                if(handleState == 'translate' && ( e.drag.intersectStart.pointclouds && Common.getMixedSet(PanoEditor.selectedClouds, e.drag.intersectStart.pointclouds).length  || PanoEditor.selectedPano.hovered)//拖拽到点云上 或 circle
-                                    || handleState == 'rotate' ) 
+                                if(handleState == 'translate' && ( e.drag.intersectStart.pointclouds && Common.getMixedSet(PanoEditor.selectedClouds, e.drag.intersectStart.pointclouds).length  || PanoEditor.selectedPano.hovered)//平移时 拖拽到点云上 或 circle。(其中点云只需要intersect的点云中包含选择的点云中之一即可)
+                                    || handleState == 'rotate' ) //旋转模式不需要intersect
                                 {                                           
                                     pointclouds = PanoEditor.selectedClouds
                                 }  

Разница между файлами не показана из-за своего большого размера
+ 11 - 11
正式版手动更新备份/2022.11.14/potree.js


+ 42 - 9
正式版手动更新备份/2022.11.14/potreeFormat.js

@@ -47919,7 +47919,7 @@
                 }
             }),
             a.addEventListener("global_mousemove", function(e) {
-                !Potree.settings.unableNavigate && Potree.settings.ifShowMarker && e.hoverViewport == a.mainViewport && o.updateClosestPano(e.intersectPoint)
+                !Potree.settings.unableNavigate && Potree.settings.ifShowMarker && e.hoverViewport == a.mainViewport && o.updateClosestPano(e.intersect/* Point */)
             }),
             o.addEventListener("markerHover", function(e) {
                 o.updateClosestPano(e.pano, e.hovered)
@@ -48302,6 +48302,9 @@
             key: "updateCube",
             value: function(e, t) {
                 var n, i, r = this;
+                
+                if(Potree.settings.displayMode != 'showPanos')return//add
+                
                 if (!viewer.scene.pointclouds.some(function(e) {
                     return !e.hasDepthTex
                 }))
@@ -48480,11 +48483,22 @@
                         r.cube.scale.copy(t),
                         r.cube.position.copy(e)
                     };
+                    //add----------
+                    let getPanoBound = (pano)=>{//因漫游点可能在点云外部,如室外平地,所以需要union进漫游点
+                        let panoBound = new THREE.Box3;
+                        panoBound.expandByPoint(pano.position);
+                        panoBound.expandByVector(new Cn(10,10,10));//give pano a margin
+                        return pano.pointcloud.bound.clone().union(panoBound)
+                    };
+                    //-------------        
+                    
+                    
                     if (this.cube.geometry.dispose(),
                     i) {
                         if (n.pointcloud != i.pointcloud)
                             if (100 < n.position.distanceTo(i.position)) {
-                                var t = n.pointcloud.bound.clone().union(i.pointcloud.bound)
+                                //var t = n.pointcloud.bound.clone().union(i.pointcloud.bound)
+                                var t = getPanoBound(n).union(getPanoBound(i)) 
                                   , h = t.getSize(new Cn)
                                   , p = Math.max(h.x, h.y, h.z);
                                 return h.set(p, p, p),
@@ -48630,7 +48644,7 @@
                         this.cube.scale.set(1, 1, 1),
                         this.cube.position.set(0, 0, 0)
                     } else
-                        e(n.pointcloud.bound)
+                        e(getPanoBound(n))//e(n.pointcloud.bound)
                 }
             }
         }, {
@@ -48761,7 +48775,25 @@
         }, {
             key: "updateClosestPano",
             value: function(e, t) {
-                if (this.isAtPano()) {
+                
+                
+                if (e instanceof Qg){
+                    n = t ? e : null
+                }else {
+                    if(this.isAtPano()){
+                        return
+                     
+                    }else {
+                        if(this.flying)return; 
+                        var filterFuncs = [];
+                        e = e && e.location;
+                        if(!e)return
+                    var e = "pano" != Potree.settings.editType ? [c.sortFunctions.floorDisSquaredToPoint(e)] : [c.sortFunctions.disSquaredToPoint(e)]
+                      , n = Fm.find(this.panos, [], e)
+                    }
+                }
+                
+                /* if (this.isAtPano()) {
                     if (!(e instanceof Qg))
                         return;
                     n = t ? e : null
@@ -48772,7 +48804,7 @@
                         return;
                     var e = "pano" != Potree.settings.editType ? [c.sortFunctions.floorDisSquaredToPoint(e)] : [c.sortFunctions.disSquaredToPoint(e)]
                       , n = Fm.find(this.panos, [], e)
-                }
+                } */
                 n != this.closestPano ? (n && (this.isPanoHover = !0),
                 this.closestPanoChanging(this.closestPano, n),
                 this.closestPano = n) : this.isPanoHover = !1
@@ -65560,7 +65592,7 @@
             key: "exportSavingData",
             value: function() {
                 var e, i = this, t = {};
-                const rotQua = (new Sn()).setFromAxisAngle(new Cn(0,0,1), Math.PI)    
+                const rotQua = (new Sn()).setFromAxisAngle(new Cn(0,0,1), Math.PI)  //add  
                 for (e in Potree.settings.datasetsPanos) {
                     var n = Potree.settings.datasetsPanos[e].panos.map(function(e) {
                         var t, n = [];
@@ -65570,7 +65602,7 @@
                             uuid: e.uuid,
                             pose: {
                                 translation: r(e.position.clone()),
-                                rotation: r((new Sn).setFromRotationMatrix(e.panoMatrix)).premultiply(rotQua)
+                                rotation: r((new Sn).setFromRotationMatrix(e.panoMatrix).premultiply(rotQua))
                             },
                             visibles: n
                         })
@@ -65592,6 +65624,7 @@
                         z: e.z
                     } : void 0
                 }
+                
                 return console.log(t),
                 t
             }
@@ -70057,8 +70090,8 @@
         Potree.settings.sizeFitToLevel = !0);
         function h(e) {
             c.sidebar && c.sidebar.addAlignmentButton(e);
-            var t = e.panos[0].dataRotation.z
-              , n = e.panos[0].dataPosition.clone().negate();
+            var t = e.panos[0].dataRotation.z + Math.PI
+              , n = e.panos[0].dataPosition.clone()//.negate();
             r.rotate(e, null, t),
             r.translate(e, n),
             e.updateMatrixWorld()

+ 15 - 3
正式版手动更新备份/2022.11.14/更改.txt

@@ -1,20 +1,32 @@
 
 问题:点云编辑的坐标反向了。
 
-
+var t = e.panos[0].dataRotation.z
 n = e.panos[0].dataPosition.clone().negate();
 
 变为 
 
 
-
+var t = e.panos[0].dataRotation.z + Math.PI
 n = e.panos[0].dataPosition.clone()
 
 
 --------
 
 translation: r(e.position.clone().negate()),
+rotation: r((new Sn).setFromRotationMatrix(e.panoMatrix))
 变为
 
 const rotQua = (new Sn()).setFromAxisAngle(new Cn(0,0,1), Math.PI)    
-rotation: r((new Sn).setFromRotationMatrix(e.panoMatrix)).premultiply(rotQua)
+translation: r(e.position.clone()),
+rotation: r((new Sn).setFromRotationMatrix(e.panoMatrix).premultiply(rotQua))
+
+
+------
+e.hoverViewport == a.mainViewport && o.updateClosestPano(e.intersectPoint
+变为
+e.hoverViewport == a.mainViewport && o.updateClosestPano(e.intersect
+-------
+updateCube2、 updateClosestPano改了一些。
+
+