xzw 1 rok pred
rodič
commit
06f7f18b8e

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

@@ -837,7 +837,7 @@ export class Images360 extends THREE.EventDispatcher{
   
 
 
-    isNeighbour(pano0, pano1, dontCompute, onlyUseTex,  computeDirFirst){//是否之间没有遮挡(在加载visibles之前,自己算) 最好pano0是currentPano
+    isNeighbour(pano0, pano1, {dontCompute, onlyUseTex,  computeDirFirst, computeTwoDir}={}){//是否之间没有遮挡(在加载visibles之前,自己算) 最好pano0是currentPano
          
         if(!pano0 || !pano1 )return
         
@@ -882,7 +882,7 @@ export class Images360 extends THREE.EventDispatcher{
             }
         } 
            
-        if( map0[pano1.id] == void 0 && !ifNeighbour ) {//主方向为空且不为邻居
+        if(!ifNeighbour && (map0[pano1.id] == void 0 || (computeTwoDir && map1[pano0.id] == void 0))) {//主方向为空且不为邻居
             let simpleJudge = pano0.position.distanceToSquared(pano1.position) > 300 //在远处去掉对floorPosition的判断
             if(pano0.depthTex || pano1.depthTex){
                              
@@ -1547,10 +1547,13 @@ Images360.prototype.getNeighbours = function(){ //逐渐自动获取neighbours
              
             for(let a=0, b=g.length; a<b; a++){
                 let item = g[a]
-                if(this.isNeighbour(pano, item.item,  true) != void 0) continue
+                if(item.item == pano)continue  
+                if(this.isNeighbour(pano,item.item,{dontCompute:true}) || this.neighbourMap[pano.id][item.item.id]!= void 0 && this.neighbourMap[item.item.id][pano.id]!= void 0)continue //为true或两个方向都算了的
                 
+                //console.log('check isNeighbour', pano.id, item.item.id)
+                 
                 let byCloud = !pano.pointcloud.hasDepthTex
-                let result = this.isNeighbour(pano, item.item,  false, !byCloud, true)//计算 
+                let result = this.isNeighbour(pano, item.item,  {onlyUseTex: !byCloud, computeDirFirst:true, computeTwoDir:true})//计算 
                 
                 if(result != void 0){//计算了 
                     //console.log('提前计算neighbor', pano.id,  item.item.id)

+ 12 - 4
src/custom/modules/panos/Panorama.js

@@ -441,24 +441,32 @@ class Panorama extends THREE.EventDispatcher{
     getCeilHeight(){//天花板高度值   (假设不存在depth为0的点,所有为0的要么是在盲区,要么是无穷远。)
          
         if(this.ceilZ == void 0){
-            const depthTiming = Potree.timeCollect.depthSampler.median    //pc firefox达到4.  chrome为0.01
+            //const depthTiming = Potree.timeCollect.depthSampler.median    //pc firefox达到4.  chrome为0.01
                      
             
             //用三个间隔120度散开,和中心垂直线成一定夹角的三个向量去求 最高高度 (不求平均的原因:万一是0不好算)
             
             let rotMat = new THREE.Matrix4().makeRotationX((Potree.config.depthTexUVyLimit+0.01)*Math.PI)// 角度不能小于天花板中空的半径 
             
+            let dir0 = new THREE.Vector3(0,0,1).applyMatrix4(rotMat)
             
             
-            let dirs = [new THREE.Vector3(0,0,1).applyMatrix4(rotMat)];
-            if(depthTiming < 1){
+            let dirs = [
+                dir0, 
+                dir0.clone().applyMatrix4(new THREE.Matrix4().makeRotationZ(Math.PI*2 / 3)),
+                dir0.clone().applyMatrix4(new THREE.Matrix4().makeRotationZ(-Math.PI*2 / 3))
+            ];
+             
+            
+            /* if(depthTiming < 1){
                 let rotMat1 = new THREE.Matrix4().makeRotationZ(Math.PI*2 / 3);
                 dirs.push(dirs[0].clone().applyMatrix4(rotMat1))
             }
             if(depthTiming < 0.3){
                 let rotMat2 = new THREE.Matrix4().makeRotationZ(-Math.PI*2 / 3);
                 dirs.push(dirs[0].clone().applyMatrix4(rotMat2)); 
-            }
+            } */
+             
              
             let zs = dirs.map(dir_=>{ 
                 let dir = dir_.clone().applyMatrix4(this.panoMatrix2)  //pano不一定是垂直的, 需要把之前的dirInPano先转成真实的dir,防止超出角度限制

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

@@ -242,7 +242,7 @@ export class Measure extends ctrlPolygon{
             this.setEdgeLabelPos(label,p1,p2)
  
             distance = distance == void 0 ? p1.distanceTo(p2) : distance; 
-            var text = this.labelText || viewer.unitConvert.convert(distance, 'distance', Potree.settings.precision, this.unitSystem, 0.1 , true)//distance要传0.1 这个factor
+            var text = this.labelText || viewer.unitConvert.convert(distance, 'distance',  Potree.settings.precision , this.unitSystem, 0.001 , true, true)//distance要传0.1 这个factor
             label.setText(text)
           
         }

+ 1 - 1
src/custom/settings.js

@@ -425,7 +425,7 @@ let settings = {//设置   可修改
     depTexLocBindDataset: true,//是否在pano模式下,使用深度图得到intersect的话,改intersect能属于该pano所在的点云。也就相当于在全景模式下intersect的点属于该全景图
 
     notAdditiveBlending:false, //点云是否使用普通的blend, 否则会曝光过渡
-    precision:2,  // 两位小数 
+    precision:0,  //  位小数 
     useV4url:true, //v4的全景图等路径不一样 scene_view_data
     
     useRTskybox:true,  //直接使用rtEDL绘制到屏幕,当是全景模式时. 在降4倍时能给render节省1毫秒,gpu时间未测 

+ 9 - 6
src/custom/utils/UnitConvert.js

@@ -270,9 +270,9 @@ class UoMService{
         return  this.convert(t, n, precision, r, minFactor)
     }
     
-    convert(number, domain, precision = 2, system, minFactor, ifEighths = !1) { 
+    convert(number, domain, precision = 2, system, minFactor, ifEighths = !1, ifRestrictFactor) { 
         if (!number) return "";
-        var s = this.getMostRelevantMeasurement(domain, system || this.UnitService.currentSystem, number, minFactor);
+        var s = this.getMostRelevantMeasurement(domain, system || this.UnitService.currentSystem, number, minFactor, ifRestrictFactor);
         return this.getFormattedMeasurementString(s[0], s[1], precision, ifEighths)
     }
     
@@ -322,7 +322,7 @@ class UoMService{
         return  0 !== r ? r + "' " + s + a + '"' : "" + s + a + '"'
     }
     
-    getMostRelevantMeasurement(domain, system, number, minFactor=0) {
+    getMostRelevantMeasurement(domain, system, number, minFactor=0, ifRestrictFactor) {
         /* var a = r.values(UnitsOfMeasurement.getUnitsOfMeasurementByDomainAndSystem(domain, system))
           , s = r.filter(a, function(t) {  
             return t.factor >= i
@@ -334,9 +334,12 @@ class UoMService{
         let u = UnitsOfMeasurement.getUnitsOfMeasurementByDomainAndSystem(domain, system)
         for(let i in u){a.push(u[i])}
          
-        let s = a.filter(m=>m.factor >= minFactor) 
-         
-        
+        let s   
+        if(ifRestrictFactor){//是否只用这一单位,如只用mm。如果不是,就会寻找最大的接近的单位,如设置最小为mmminFactor=0.001),则1.2米时是'1.2m'、0.2米时是'20cm'、0.002米时是'2mm'
+            s = a.filter(m=>m.factor == minFactor)  
+        }else{
+            s = a.filter(m=>m.factor >= minFactor)
+        } 
        
         let c = s.reduce(function(prev, currentValue) {//reduce最终值是最后一次return的值 ( 没看懂这句话作用) 
             return currentValue.fromBase(number) < prev.fromBase(number) && currentValue.fromBase(number) >= 1 ? currentValue : prev

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

@@ -104,17 +104,12 @@ export class Viewer extends ViewerBase{
                 depthSampler : {minCount:400, median: 25}, //median预置一个中等值,以防止cpu过低的设备首次卡顿  
                  
             }
+            for(let i in Potree.timeCollect){
+                Potree.timeCollect[i].measures = [];
+                Potree.timeCollect[i].sum = 0;
+                Potree.timeCollect[i].start = true                
+            }
             
-            setTimeout(()=>{
-                for(let i in Potree.timeCollect){
-                    Potree.timeCollect[i].measures = [];
-                    Potree.timeCollect[i].sum = 0;
-                    Potree.timeCollect[i].start = true
-                }
-                /* setTimeout(()=>{
-                    console.log('timeCollect', Potree.timeCollect.depthSampler.median, Potree.timeCollect.depthSampler.ave, Potree.timeCollect.depthSampler.measures.length)
-                },10000) */
-            },2000)
         }
          
   
@@ -806,7 +801,7 @@ export class Viewer extends ViewerBase{
     computeShelter(){
         //先算用深度图的,然后再点云;
         
-        let depthTiming = Potree.timeCollect.depthSampler.median 
+        //let depthTiming = Potree.timeCollect.depthSampler.median 
         let byTex=0,  byCloud=0;
         let len = shelterHistory.length;
         let waitCloud = []