浏览代码

Merge branch 'v1.7.0' of http://192.168.0.115:3000/bill/fuse-code into v1.7.0

bill 10 月之前
父节点
当前提交
c935363782
共有 3 个文件被更改,包括 46 次插入17 次删除
  1. 40 14
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 5 2
      src/sdk/cover/index.js

+ 40 - 14
public/lib/potree/potree.js

@@ -18972,7 +18972,7 @@
 	  constructor() {
 	    super();
 	    delete this.sceneBG;
-	    this.cameraP = new PerspectiveCamera(this.fov, 1, Potree.config.view.near, Potree.config.view.near);
+	    this.cameraP = new PerspectiveCamera(this.fov, 1, Potree.config.view.near, Potree.config.view.cameraFar);
 	    this.cameraO = new OrthographicCamera(-1, 1, 1, -1, Potree.config.view.near, Potree.settings.cameraFar);
 	    this.cameraP.limitFar = true; //add
 	    this.initializeExtend();
@@ -21576,7 +21576,7 @@
 	 */
 	//=======================================================================
 
-	function panoEditStart(dom, number, fileServer) {
+	function panoEditStart(dom, number, EditCloudsArgs) {
 	  Potree.settings.editType = 'pano';
 	  Potree.settings.number = number;
 	  Potree.settings.unableNavigate = true;
@@ -21598,6 +21598,15 @@
 	    });
 	    Potree.settings.sizeFitToLevel = true;
 	  }
+	  EditCloudsArgs.forEach((e, i) => {
+	    //加载点云和漫游点
+	    if (e.datasetId == void 0) {
+	      console.error('没有datasetId '); // 看看和看见没有
+	      e.datasetId = i; //经常没有datasetId所以自己加
+	    }
+	    Potree.settings.datasetsPanos[e.datasetId] = null;
+	    Potree.loadPanosDone(e.datasetId, e.clouds);
+	  });
 	  var pointcloudLoadDone = function pointcloudLoadDone() {
 	    //所有点云cloud.js加载完毕后 
 
@@ -21933,6 +21942,8 @@
 	      //model.lastMatrixWorld = model.matrixWorld.clone()
 	      model.lastMatrixWorld = new Matrix4();
 	      MergeEditor.modelTransformCallback(model, true);
+	      prop.scale != void 0 && model.isPointcloud && model.changePointSize(); //有的被缩放的很小导致testMaxNodeLevel时距离较远时被return 但点云过大急需changesize
+
 	      done(model); // 先发送成功,因为2d界面会随机执行changePosition等初始化,然后这边再将模型移到中心地面上
 
 	      if (prop.isFirstLoad) {
@@ -22206,7 +22217,8 @@
 	  view: {
 	    fov: 70,
 	    //navvis:50 
-	    near: 0.1,
+	    near: 0.05,
+	    // too small will result in z-fighting
 	    far: 10000
 	  },
 	  map: {
@@ -35698,7 +35710,7 @@
 
 	    var levels = this.visibleNodes.map(e => e.getLevel());
 	    var actMaxLevel = Math.max.apply(null, levels); //实际加载到的最高的node level
-	    if (actMaxLevel < this.maxLevel) return true; // 还没加载到能加载到的最高。  但在细节设置较低时,排除作用微弱。
+	    if (actMaxLevel < this.maxLevel) return true; // 还没加载到能加载到的最高。  但在细节设置较低时,排除作用微弱。 
 
 	    //尝试加载出更高级的level 
 	    var old = this.maxLevel;
@@ -36077,7 +36089,7 @@
 	  // 设置点大小
 	  changePointSize(num, sizeFitToLevel) {
 	    var size, nodeMaxLevel;
-	    console.error('changePointSize', num);
+	    //console.error('changePointSize',num)
 	    var dontRender = viewer.dealBeforeRender;
 	    if (this.material.pointSizeType != PointSizeType.ATTENUATED) {
 	      num && (size = num / Potree.config.material.realPointSize / 1.3);
@@ -36099,7 +36111,7 @@
 	        var str = this.temp.pointSize + ':' + this.maxLevel + ':' + nodeMaxLevel;
 	        var value = this.temp.sizeFitToLevel[str]; //储存。防止每次渲染(反复切换density)都要算。
 	        if (value) {
-	          size = value;
+	          size = value *= this.scale.x;
 	        } else {
 	          if (this.maxLevel == Infinity) return;
 	          var base = this.material.spacing / Math.pow(2, this.maxLevel); //点云大小在level为0时设置为spacing,每长一级,大小就除以2.  (不同场景还是会有偏差)
@@ -68615,8 +68627,6 @@
 	    //Potree.Utils.updateVisible(viewer.reticule, 'force', false)
 	    viewer.composer.scaleRatio = 1;
 	    viewer.composer.readTarget = false;
-	    viewer.mainViewport.camera.near = 0.05; // too small will result in z-fighting
-
 	    viewer.addEventListener('updateModelBound', e => {
 	      if (this.split) {
 	        this.SplitScreen.updateCameraOutOfModel( /* this.selected && [this.selected] */);
@@ -76184,10 +76194,19 @@
 	      });
 	    };
 	    var scroll = e => {
+	      var _viewer$inputHandler$, _viewer$inputHandler$2;
 	      if (!this.enabled) return;
 	      var resolvedRadius = this.currentViewport.view.radius + this.radiusDelta;
-	      if (resolvedRadius < 0.1 && e.delta > 0) return; //防止缩放太小,导致很慢
+
+	      /* let model = viewer.inputHandler.intersect?.model || viewer.inputHandler.intersect?.pointcloud || viewer.modules.MergeEditor?.selected;  
+	      let min = 0.1
+	      if(model){
+	          min *= model.scale.x            //有的模型太小。注意:如果没有选中模型且没有intersect会无法前进是会有点怪
+	      }
+	      if(resolvedRadius < min && e.delta>0)return; //防止缩放太小,导致很慢 */
 	      this.radiusDelta += -e.delta * resolvedRadius * 0.1;
+	      var model = ((_viewer$inputHandler$ = viewer.inputHandler.intersect) === null || _viewer$inputHandler$ === void 0 ? void 0 : _viewer$inputHandler$.object) || ((_viewer$inputHandler$2 = viewer.inputHandler.intersect) === null || _viewer$inputHandler$2 === void 0 ? void 0 : _viewer$inputHandler$2.pointcloud);
+	      model && this.updateRadiusByModel(model, viewer.inputHandler.intersect.location.distanceTo(this.currentViewport.view.position));
 	      this.stopTweens();
 	    };
 	    var dblclick = e => {
@@ -76370,17 +76389,24 @@
 	    I = I.location;
 	    if (!I || !object) return;
 	    var dis = this.currentViewport.view.position.distanceTo(I);
-	    var bound = object.boundingBox.clone().applyMatrix4(object.matrixWorld);
-	    var size = bound.getSize(new Vector3());
-	    var len = size.length();
-	    var distance = MathUtils.clamp(dis, 0.1, Math.max(len * 0.1, 3));
-	    minRadius = distance;
+	    var distance = this.updateRadiusByModel(object, dis);
 	    viewer.focusOnObject({
 	      position: I
 	    }, 'point', null, {
 	      distance
 	    });
 	  }
+	  updateRadiusByModel(object) {
+	    var dis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
+	    //鼠标到点的距离,如果没有就给个几率最大的距离
+	    var bound = object.boundingBox.clone().applyMatrix4(object.matrixWorld);
+	    var size = bound.getSize(new Vector3());
+	    var len = size.length();
+	    var distance = MathUtils.clamp(dis, 0.8 * object.scale.x, Math.max(len * 0.1, 3 * object.scale.x));
+	    minRadius = distance;
+	    //console.log('updateRadiusByModel',distance)
+	    return distance;
+	  }
 	  stopTweens() {
 	    this.tweens.forEach(e => e.stop());
 	    this.tweens = [];

文件差异内容过多而无法显示
+ 1 - 1
public/lib/potree/potree.js.map


+ 5 - 2
src/sdk/cover/index.js

@@ -44,6 +44,9 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
     Potree.settings.tiles3DMaxMemory = 300 //稍微增加点
     Potree.settings.mergeTransCtlOnClick = true
     Potree.settings.canWalkThroughModel = true
+    Potree.config.view.near = 0.0001 //以防有的漫游场景模型缩放的很小(0.1%)  但似乎会造成z-fighting,不记得之前是否有过bug
+    
+    
     
     let { THREE } = Potree.mergeEditStart(dom, mapDom)
     let MergeEditor = viewer.modules.MergeEditor
@@ -988,7 +991,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                 enterScaleSet() {//设置比例
                     let bus = new mitt()
                     let length, measureBuilded;
-                    viewer.outlinePass.selectedObjects = []
+                    //viewer.outlinePass.selectedObjects = []
                     if (!Potree.Utils.isInsideFrustum(model.boundingBox.clone().applyMatrix4(model.matrixWorld), viewer.scene.getActiveCamera())) {
                         MergeEditor.focusOn(model, 600)
                     }
@@ -1064,7 +1067,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                     }
 
 
-                    viewer.outlinePass.selectedObjects = [model];
+                    //viewer.outlinePass.selectedObjects = [model];
                     MergeEditor.getAllObjects().forEach(m => {//恢复其他的模型
                         if (m != model) Potree.Utils.updateVisible(m, 'enterScaleSet', true)
                     })