xzw 7 месяцев назад
Родитель
Сommit
2c955cc131
3 измененных файлов с 99 добавлено и 83 удалено
  1. 96 81
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 2 1
      src/sdk/cover/index.js

+ 96 - 81
public/lib/potree/potree.js

@@ -22908,7 +22908,7 @@
 	  showNeighSetGui: browser.urlHasValue('neighGui'),
 	  selectShowBox: true,
 	  //fastTran: isTest
-	  pathSmooth: false //true//true //smooth曲线, 非折线
+	  pathSmooth: false // window.location.href.includes('192.168.0.59')  //true //smooth曲线, 非折线
 	};
 	Potree.config = config$1;
 	Potree.settings = settings;
@@ -25055,8 +25055,7 @@
 	      // check for a click  
 
 	      if (!Potree.settings.disableClick && pressDistance < Potree.config.clickMaxDragDis && pressTime < Potree.config.clickMaxPressTime && !e.unableClick) {
-	        var clickElement,
-	          _consumed = false;
+	        var clickElement;
 	        if (this.hoveredElements) {
 	          clickElement = this.hoveredElements.find(e => e.object._listeners['click']);
 	          if (clickElement) {
@@ -25069,7 +25068,8 @@
 	            clickElement.object.dispatchEvent($.extend(this.getEventDesc(e, isTouch), {
 	              type: 'click',
 	              pressDistance,
-	              cancel
+	              cancel,
+	              consume
 	            }));
 	            if (canceled) {
 	              //比如只需要右键的话,可以忽视左键的点击
@@ -25090,9 +25090,9 @@
 	                this.deselectAll();
 	                this.toggleSelection(selectable);
 	              }
-	              _consumed = true; //add
+	              consumed = true; //add
 	            } else {
-	              if (this.selection.length > 0) _consumed = true; //add 取消选择后,阻断后续 
+	              if (this.selection.length > 0) consumed = true; //add 取消选择后,阻断后续 
 	              this.deselectAll();
 	            }
 	            //}
@@ -25100,22 +25100,19 @@
 	            this.deselectAll();
 	          }
 	        }
-	        var _consume = () => {
-	          return _consumed = true;
-	        };
 	        var desc = this.getEventDesc(e, isTouch);
-	        if (!_consumed) {
+	        if (!consumed) {
 	          this.viewer.dispatchEvent($.extend(desc, {
 	            type: 'global_click',
 	            pressDistance,
 	            clickElement: clickElement /*  || selectable */,
-	            consume: _consume
+	            consume
 	          }));
 	        }
 
 	        //增加 单击:
 	        this.needSingleClick = true;
-	        _consumed || setTimeout(() => {
+	        consumed || setTimeout(() => {
 	          if (this.needSingleClick) {
 	            this.viewer.dispatchEvent($.extend(desc, {
 	              type: 'global_single_click',
@@ -25127,10 +25124,10 @@
 
 	        //自行执行双击:
 
-	        if (now - this.lastClickTime < Potree.config.doubleClickTime) {
+	        if (!consumed && now - this.lastClickTime < Potree.config.doubleClickTime) {
 	          this.onDoubleClick(e);
 	        }
-	        this.lastClickTime = now;
+	        consumed || (this.lastClickTime = now);
 	      }
 	      this.drag = null;
 	    }
@@ -35310,7 +35307,7 @@
 	    var easeName = arguments.length > 4 ? arguments[4] : undefined;
 	    var callback = arguments.length > 5 ? arguments[5] : undefined;
 	    //前两个参数有xy即可
-	    var z = Math.max(Potree.config.map.cameraHeight, endPosition.z + 1, endPosition.z + ((boundSize === null || boundSize === void 0 ? void 0 : boundSize.z) / 2 || 0));
+	    var z = Math.max(Potree.config.map.cameraHeight, (endPosition.z || 0) + ((boundSize === null || boundSize === void 0 ? void 0 : boundSize.z) || 0) / 2 + 1);
 	    endPosition = new Vector3(endPosition.x, endPosition.y, z);
 	    this.view.moveOrthoCamera(this.viewports[0], {
 	      endPosition,
@@ -35405,7 +35402,7 @@
 	        }
 	        viewer.viewports = [viewer.mainViewport, viewer.mapViewer.viewports[0]]; //因为mainViewer的相机变化会触发map的变化,所以先渲染mainViewer
 	      }
-	      if (desc == 'measure') this.inputHandler.registerInteractiveScene(viewer.measuringTool.scene); //虽然用的是viewer的inputHandler,但借用了this.inputHandler的interactiveScenes
+	      if (desc == 'measure') this.inputHandler.registerInteractiveScene(viewer.scene.overlayScene /* viewer.measuringTool.scene */); //虽然用的是viewer的inputHandler,但借用了this.inputHandler的interactiveScenes
 	      else if (desc == 'split4Screens') {
 	        this.inputHandler.registerInteractiveScene(viewer.scene.scene);
 	      }
@@ -35419,7 +35416,7 @@
 	      this.viewports[0].bottom = 0;
 	      this.viewports[0].height = 1;
 	      this.viewports[0].left = 0;
-	      this.renderMeasure || this.inputHandler.unregisterInteractiveScene(viewer.measuringTool.scene);
+	      this.renderMeasure || this.inputHandler.unregisterInteractiveScene(viewer.scene.overlayScene /* viewer.measuringTool.scene */);
 	      this.inputHandler.unregisterInteractiveScene(viewer.scene.scene);
 	      viewer.viewports = [viewer.mainViewport];
 	      this.updateScreenSize({
@@ -35444,9 +35441,9 @@
 	  setDrawMeasure(draw) {
 	    this.renderMeasure = !!draw;
 	    if (draw) {
-	      this.inputHandler.registerInteractiveScene(viewer.measuringTool.scene);
+	      this.inputHandler.registerInteractiveScene(viewer.scene.overlayScene /* viewer.measuringTool.scene */);
 	    } else {
-	      this.inputHandler.unregisterInteractiveScene(viewer.measuringTool.scene);
+	      this.inputHandler.unregisterInteractiveScene(viewer.scene.overlayScene /* viewer.measuringTool.scene */);
 	    }
 	  }
 	  changeSplitScreenDir(dir, mapRatio) {
@@ -42648,6 +42645,7 @@
 	              prevIndex,
 	              point
 	            } = this.getPosByIntersect(e);
+	            viewer.measuringTool.history.beforeChange(this);
 	            this.addMarker({
 	              index,
 	              point,
@@ -42663,6 +42661,7 @@
 	          } else {
 	            this.isNew || viewer.measuringTool.isAdding || this.setSelected('click'); //viewer.focusOnObject(this, 'measure') //正在添加测量线时不要focus其他线(容易误触)
 	          }
+	          e.consume(); //防止后续双击
 	        });
 	      };
 	      this.edge.addEventListener('addHoverEvent', addHoverEvent, {
@@ -42715,64 +42714,76 @@
 	     */
 	  getPosByIntersect(e, type) {
 	    //intersect落在线上的位置
-	    /* let prevIndex = Math.floor(e.hoveredElement.faceIndex / 2) //端点1(可能是最后一个)
-	    let nextIndex = this.getIndex(prevIndex, 1) //端点2(可能是第一个)
-	    let index = prevIndex + 1 //新点在端点1后
-	    let point = math.getFootPoint(e.hoveredElement.point, this.points[prevIndex], this.points[nextIndex] );
-	    return {index, prevIndex, point }  */
-	    var prevIndex0 = Math.floor(e.hoveredElement.faceIndex / 2); //端点1(可能是最后一个)
-	    var nextIndex0 = prevIndex0 + 1; //端点2(可能是第一个)
-
-	    var point = math.getFootPoint(e.hoveredElement.point, this.geoPoints[prevIndex0], this.geoPoints[nextIndex0]);
-	    //if(type == 'onlyPoint')return point
-
-	    var prevIndex, nextIndex;
-	    var count = this.points.length - 1;
-	    for (var i = 0; i < count; i++) {
-	      if (prevIndex == void 0 && i / count <= this.UtoTMapArr[prevIndex0] && (i + 1) / count > this.UtoTMapArr[prevIndex0]) {
-	        prevIndex = i; //在i之后
-	      }
-	      if (nextIndex == void 0 && i / count <= this.UtoTMapArr[nextIndex0] && (i + 1) / count > this.UtoTMapArr[nextIndex0]) {
-	        nextIndex = i;
-	      }
-	    }
-	    if (nextIndex == void 0) {
-	      //最后一段
-	      nextIndex = count - 1;
-	    }
-	    if (prevIndex != nextIndex) {
-	      //所在区跨点。  
-	      console.log('跨点', prevIndex, nextIndex);
-	      this.geoPoints[prevIndex];
-	      var lengths = [];
-	      var j = prevIndex;
-	      var A = this.geoPoints[prevIndex0];
-	      var B = this.geoPoints[nextIndex0];
-	      var APlen = A.distanceTo(point); // 端点->点击点
-	      var AB = new Vector3().subVectors(B, A);
-	      var searchIndex;
-	      while (j < nextIndex) {
-	        var len = AB.clone().normalize().dot(new Vector3().subVectors(this.points[j + 1], A)); //在AB的投影长度
-	        if (len > APlen) {
-	          searchIndex = j;
-	          break;
+
+	    if (!Potree.settings.pathSmooth) {
+	      var prevIndex = Math.floor(e.hoveredElement.faceIndex / 2); //端点1(可能是最后一个)
+	      var nextIndex = this.getIndex(prevIndex, 1); //端点2(可能是第一个)
+	      var index = prevIndex + 1; //新点在端点1后
+	      var point = math.getFootPoint(e.hoveredElement.point, this.points[prevIndex], this.points[nextIndex]);
+	      return {
+	        index,
+	        prevIndex,
+	        point
+	      };
+	    } else {
+	      var prevIndex0 = Math.floor(e.hoveredElement.faceIndex / 2); //所在的mesh片段的端点1
+	      var nextIndex0 = prevIndex0 + 1; //所在的mesh片段的端点2
+
+	      var _point = math.getFootPoint(e.hoveredElement.point, this.geoPoints[prevIndex0], this.geoPoints[nextIndex0]);
+	      if (type == 'onlyPoint') return {
+	        point: _point
+	      };
+	      var _prevIndex, _nextIndex;
+	      var count = this.points.length - 1;
+	      for (var i = 0; i < count; i++) {
+	        if (_prevIndex == void 0 && i / count <= this.UtoTMapArr[prevIndex0] && (i + 1) / count > this.UtoTMapArr[prevIndex0]) {
+	          _prevIndex = i; //该片段端点1在原先points中哪个点之后(可包含)
+	        }
+	        if (_nextIndex == void 0 && i / count <= this.UtoTMapArr[nextIndex0] && (i + 1) / count > this.UtoTMapArr[nextIndex0]) {
+	          _nextIndex = i; //该片段端点2在原先points中哪个点之后(可包含) 
 	        }
-	        j++;
 	      }
-	      searchIndex || (searchIndex = nextIndex);
-	      nextIndex = searchIndex;
-	      prevIndex = nextIndex - 1;
-	    } else {
-	      nextIndex = prevIndex + 1;
+	      if (_nextIndex == void 0) {
+	        //最后一段
+	        _nextIndex = count - 1;
+	      }
+	      if (_prevIndex == _nextIndex) {
+	        //端点在相同区间。直接+1
+	        _nextIndex = _prevIndex + 1;
+	      } else {
+	        //端点在不同points区间, 需要判断intersect的究竟在哪个区间
+	        //console.log('跨点', prevIndex, nextIndex)
+	        this.geoPoints[_prevIndex];
+	        var lengths = [];
+	        var j = _prevIndex;
+	        var A = this.geoPoints[prevIndex0];
+	        var B = this.geoPoints[nextIndex0];
+	        var APlen = A.distanceTo(_point); // 端点->点击点
+	        var AB = new Vector3().subVectors(B, A);
+	        var searchIndex;
+	        while (j <= _nextIndex) {
+	          var len = AB.clone().normalize().dot(new Vector3().subVectors(this.points[j + 1], A)); //在AB的投影长度
+	          if (len > APlen) {
+	            searchIndex = j;
+	            break;
+	          }
+	          j++;
+	        }
+	        searchIndex == void 0 && (searchIndex = _nextIndex); //最后一个点之后
+	        _prevIndex = searchIndex;
+	        _nextIndex = _prevIndex + 1;
+	      }
+
+	      //console.log(prevIndex, nextIndex)
+	      var _index = _prevIndex + 1; //新点在端点1后
+	      return {
+	        index: _index,
+	        prevIndex: _prevIndex,
+	        point: _point
+	      };
 	    }
-	    console.log(prevIndex, nextIndex);
-	    var index = prevIndex0 + 1; //新点在端点1后
-	    return {
-	      index,
-	      prevIndex,
-	      point
-	    };
-	  }
+	  } //如果后续还出现index错误的问题,可以改为绘制时用折线,完成后用曲线。
+
 	  createMarkerLabel(text, hasHoverEvent) {
 	    var label = new TextSprite$2($.extend({}, depthProps, {
 	      sizeInfo: labelSizeInfo$1,
@@ -43086,8 +43097,7 @@
 	    marker.addEventListener('click', e => {
 	      if (this.isNew || e.button !== MOUSE.LEFT) return;
 	      if (this.addOrRemovePoint) {
-	        //点击删除点 
-
+	        //点击删除点   
 	        this.removePoint(this.markers.indexOf(marker));
 	      } else {
 	        //点击选中点
@@ -43112,6 +43122,7 @@
 	          });
 	        }, 10);
 	      }
+	      e.consume();
 	    });
 	    marker.addEventListener('startDragging', e => {
 	      this.isNew || this.setMarkerSelected(marker, 'click'); //选中
@@ -43243,6 +43254,9 @@
 	    this.isEditing = state;
 	  }
 	  removePoint(index) {
+	    if (index == -1) {
+	      return; //双击会这样,加了迅速删除, 可能因为没来得及删
+	    }
 	    viewer.measuringTool.history.beforeChange(this);
 	    this.removeMarker(index);
 	    this.hideArrowUntilUpdate();
@@ -43278,7 +43292,7 @@
 	    viewer.dispatchEvent('content_changed');
 	  }
 	  setSelected(state, byList) {
-	    if (state == 'click' && this.selectStates.click) return; //重复点击了
+	    if (state == 'click' && this.selectStates.click) return this.setSelected('unclick'); //重复点击了
 
 	    state == 'hover' && (this.selectStates.hover = true, byList || this.dispatchEvent({
 	      type: 'highlight',
@@ -43966,7 +43980,8 @@
 	          data.measure.reDraw();
 	          data.measure.initData(data);
 	          data.measure.isNew = data.isNew;
-	          console.log('changeByHistory points', data.points.length);
+
+	          //console.log('changeByHistory points', data.points.length)
 	          data.measure.dispatchEvent('changeByHistory');
 
 	          /* if(data.measure.isPrism){
@@ -65737,7 +65752,7 @@
 	    }
 	    Potree.settings.unableNavigate = true;
 	    Potree.settings.ifShowMarker = false;
-	    Potree.Utils.updateVisible(viewer.measuringTool.scene, 'clipModel', false);
+	    Potree.Utils.updateVisible(viewer.scene.overlayScene /* viewer.measuringTool.scene */, 'clipModel', false);
 	    //Potree.Utils.updateVisible(viewer.mapViewer.cursor, 'clipModel', false)//隐藏地图游标
 	    viewer.inputHandler.toggleSelection(this.box);
 	    viewer.inputHandler.fixSelection = true;
@@ -65823,7 +65838,7 @@
 	    this.switchView('mainView');
 	    Potree.settings.unableNavigate = false;
 	    Potree.settings.ifShowMarker = this.previousView.ifShowMarker;
-	    Potree.Utils.updateVisible(viewer.measuringTool.scene, 'clipModel', true);
+	    Potree.Utils.updateVisible(viewer.scene.overlayScene /* viewer.measuringTool.scene */, 'clipModel', true);
 	    //Potree.Utils.updateVisible(viewer.mapViewer.cursor, 'clipModel', true) 
 	    viewer.setView(this.previousView);
 	    viewer.setLimitFar(true);
@@ -87613,7 +87628,7 @@
 	    path = sceneCode;
 	  } else {
 	    var prefix = Potree.settings.urls.panoPrefix || 'https://4dkk.4dage.com';
-	    path = "".concat(prefix, "/scene_view_data/").concat(sceneCode, "/images/vision.txt");
+	    path = "".concat(prefix, "/swkk/").concat(sceneCode, "/wwwroot/scene_view_data/").concat(sceneCode, "/images/vision.txt");
 	  }
 	  model.sceneCode = sceneCode;
 	  loadFile(path, {}, data => {

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
public/lib/potree/potree.js.map


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

@@ -745,6 +745,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
             cesImageryProvider = new Cesium.UrlTemplateImageryProvider({ //直接用84坐标,不用转高德
                 url,  
                 crossOrigin: 'anonymous',
+                //tilingScheme: new Cesium.WebMercatorTilingScheme(), // 使用 Web Mercator 投影
                 minimumLevel: 0,
                 maximumLevel 
             }) 
@@ -1880,7 +1881,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
                 //terrainShadows: Cesium.ShadowMode.DISABLED, //terrain地形
             }); 
             
-            let satellite = true
+            let satellite = false
             let imageryProvider = cesImageryProvider || new Cesium.UrlTemplateImageryProvider({ //直接用84坐标,不用转高德
                 url: `//wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=${satellite?6:7}&x={x}&y={y}&z={z}&token=YOUR_API_KEY`, //style=6是卫星,7是标准
                 minimumLevel: 0,