xzw 8 mesi fa
parent
commit
7181eb0e7e

+ 145 - 73
public/lib/potree/potree.js

@@ -42343,10 +42343,12 @@
 	var labelSizeInfo$1 = {
 	  width2d: 200
 	};
-	var halfPathWidth = 0.4;
 	var titleLineHeight = 2;
 	//const edgeExtrudePoints = [new THREE.Vector2(0,-0.4), new THREE.Vector2(0,0.4)]
-
+	var renderOrders = {
+	  line: 3,
+	  title: 4
+	};
 	var planeGeo$2 = new PlaneBufferGeometry(1, 1);
 	var voidGeometry = new BufferGeometry();
 	var getMarkerMat = function () {
@@ -42374,6 +42376,10 @@
 	    return mats[name];
 	  };
 	}();
+	var setMarkerScale = (marker, halfPathWidth) => {
+	  var s = halfPathWidth * 2.9;
+	  marker.scale.set(s, s, s);
+	};
 	var mainLabelProp$1 = {},
 	  subLabelProp$1 = {};
 	class Path$1 extends ctrlPolygon {
@@ -42386,7 +42392,6 @@
 	      var group = new Object3D();
 	      group.name = 'titleGroup';
 	      this.titleLabel = new TextSprite$2(Object.assign({}, {} /* depthMatProp */, {
-	        root: group,
 	        text: '',
 	        sizeInfo: {
 	          width2d: 200
@@ -42413,51 +42418,70 @@
 	      var line = LineDraw.createLine([new Vector3(0, 0, 0), new Vector3(0, 0, titleLineHeight)], {
 	        color: '#ffffff'
 	      });
+	      line.renderOrder = renderOrders.line;
 	      group.add(line);
 	      group.add(this.titleLabel);
+	      this.titleLabel.position.z = titleLineHeight;
 	      this.add(group);
-	      group.visible = false;
+	      this.setTitle(this.title);
 	    }
 	    {
 	      //和measure不同的是它的边是连在一起的一整条
 	      this.edge = new Mesh(voidGeometry, new MeshBasicMaterial({
 	        depthWrite: false,
 	        transparent: true,
-	        color: '#fff',
+	        color: this.pathColor || '#fff',
 	        opacity: 0.5,
 	        side: 2
 	      }));
 	      this.add(this.edge);
 	      this.edge.renderOrder = Potree.config.renderOrders.line;
 	      this.edge.name = 'pathEdge';
-	      this.edge.addEventListener('click', e => {
-	        var now = Date.now();
-	        if (now - this.lastDropTime < 100 || this.isNew) return; //防止拖拽marker时误触导致focus, 以及点到marker不focus
-
-	        if (this.enableEdit /* viewer.measuringTool.editMode == 'addPoint' */) {
-	          viewer.measuringTool.history.beforeChange(this);
-	          var index = e.hoveredElement.faceIndex / 2;
-	          var nextIndex = this.getIndex(index, 1);
-	          var point = math.getFootPoint(e.hoveredElement.point, this.points[index - 1], this.points[nextIndex]);
-	          this.addMarker({
-	            index,
-	            point,
-	            dataset_point: this.dataset_points && new Vector3(),
-	            //初始化
-	            points_dataset: this.points_datasets[index - 1] //使用前一个的
-	          });
-	          this.updateDatasetBelong(index); //获取dataset_point
-	          viewer.measuringTool.history.afterChange(this);
-	          this.dispatchEvent('changed');
-	          //this.update({})       
-	        } else {
-	          //this.isNew || viewer.measuringTool.isAdding || viewer.focusOnObject(this, 'measure') //正在添加测量线时不要focus其他线(容易误触)
-	        }
+	      var addHoverEvent = () => {
+	        var mouseover = e => {
+	          this.setSelected(true, 'edge');
+	        };
+	        var mouseleave = e => {
+	          this.setSelected(false, 'edge');
+	        };
+	        this.edge.addEventListener('mouseover', mouseover);
+	        this.edge.addEventListener('mouseleave', mouseleave);
+	        this.edge.addEventListener('click', e => {
+	          var now = Date.now();
+	          if (now - this.lastDropTime < 100 || this.isNew) return; //防止拖拽marker时误触导致focus, 以及点到marker不focus
+
+	          if (this.enableEdit) {
+	            viewer.measuringTool.history.beforeChange(this);
+	            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]);
+	            this.addMarker({
+	              index,
+	              point,
+	              dataset_point: this.dataset_points && new Vector3(),
+	              //初始化
+	              points_dataset: this.points_datasets[prevIndex] //使用前一个的
+	            });
+	            this.updateDatasetBelong(index); //获取dataset_point
+	            viewer.measuringTool.history.afterChange(this);
+	            this.updateEdge();
+	            this.dispatchEvent('changed');
+	          } else {
+	            //this.isNew || viewer.measuringTool.isAdding || viewer.focusOnObject(this, 'measure') //正在添加测量线时不要focus其他线(容易误触)
+	          }
+	        });
+	      };
+	      this.edge.addEventListener('addHoverEvent', addHoverEvent, {
+	        once: true
 	      });
 	    }
 	    this.addEventListener('marker_dropped', e => {
 	      this.updateDatasetBelong(e.index);
 	    });
+	    this.setPathWidth(prop.width || 0.7);
+	    this.setPathColor(prop.color || '#fff');
+	    this.selectStates = {};
 	    this.setEditEnable(true);
 	    this.lastDropTime = 0;
 	    Potree.Utils.setObjectLayers(this, 'measure');
@@ -42469,7 +42493,8 @@
 	      name: name || 'label'
 	    };
 	    var label = new TextSprite$2($.extend({
-	      text: inf.name
+	      text: inf.name,
+	      fontsize: this.fontsize
 	    }, hasHoverEvent ? mainLabelProp$1 : subLabelProp$1, inf));
 	    if (hasHoverEvent) {
 	      label.addEventListener('mouseover', () => {
@@ -42496,6 +42521,17 @@
 	      this.titleLabel.parent.position.copy(pos);
 	    }
 	  }
+	  setPathWidth(w) {
+	    this.halfPathWidth = w / 2;
+	    this.markers.forEach(e => setMarkerScale(e, this.halfPathWidth));
+	    this.updateEdge();
+	    viewer.dispatchEvent('content_changed');
+	  }
+	  setPathColor(color) {
+	    this.pathColor = color;
+	    this.edge.material.color.set(color);
+	    viewer.dispatchEvent('content_changed');
+	  }
 	  updateEdge(index, p1, p2) {
 	    if (this.lastUpdatePoints_ && Potree.Common.ifSame(this.lastUpdatePoints_, this.points)) return; //没变 不更新
 	    //this.edge.geometry = MeshDraw.getExtrudeGeo(edgeExtrudePoints, null,  {extrudePath: this.points, openEnded:true, shapeDontClose:true/* , dontSmooth:true, steps: this.points.length-1 */})
@@ -42522,12 +42558,12 @@
 	          sideVec = new Vector3().copy(math.getNormal2d({
 	            p1: O,
 	            p2: A || B
-	          })).setZ(0).multiplyScalar(halfPathWidth); //垂线
+	          })).setZ(0).multiplyScalar(this.halfPathWidth); //垂线
 	        } else {
 	          var OA = new Vector3().subVectors(A, O).setZ(0).normalize();
 	          var OB = new Vector3().subVectors(B, O).setZ(0).normalize();
 	          var angle = Math.acos(MathUtils.clamp(OA.dot(OB), -1, 1)); //小于180度的那边的角度
-	          var midVecLength = halfPathWidth / Math.sin(angle / 2);
+	          var midVecLength = this.halfPathWidth / Math.sin(angle / 2);
 	          sideVec = new Vector3().addVectors(OA, OB).normalize().multiplyScalar(midVecLength); //角平分线  
 	        }
 	        if (lastSideVec && sideVec.dot(lastSideVec) < 0) {
@@ -42558,10 +42594,32 @@
 
 	    var marker = new Mesh(planeGeo$2, getMarkerMat('default'));
 	    marker.add(this.createMarkerLabel());
+	    setMarkerScale(marker, this.halfPathWidth);
 	    marker.markerSelectStates = {};
 	    Potree.Utils.setObjectLayers(marker, 'measure');
 	    marker.renderOrder = Potree.config.renderOrders.measureMarker;
-	    marker.addEventListener('startDragging', e => {});
+	    marker.addEventListener('click', e => {
+	      this.dispatchEvent({
+	        type: 'markerSelect',
+	        marker
+	      });
+	      this.setMarkerSelected(marker, 'click');
+	      setTimeout(() => {
+	        viewer.addEventListener('global_click', () => {
+	          this.dispatchEvent({
+	            type: 'markerSelect',
+	            marker,
+	            cancel: true
+	          });
+	          this.setMarkerSelected(marker, 'unclick');
+	        }, {
+	          once: true
+	        });
+	      }, 1);
+	    });
+	    marker.addEventListener('startDragging', e => {
+	      this.setMarkerSelected(marker, 'click');
+	    });
 	    marker.addEventListener('drop', e => {
 	      if (e.button != MOUSE.LEFT) return;
 	      viewer.inputHandler.dispatchEvent({
@@ -42573,6 +42631,7 @@
 	      });
 	      this.lastDropTime = Date.now();
 	      this.isNew || viewer.measuringTool.history.afterChange(this);
+	      this.setMarkerSelected(marker, 'unclick');
 	    });
 	    super.addMarker(Object.assign(o, {
 	      marker
@@ -42586,9 +42645,21 @@
 	    this.enableEdit = !!state;
 	    this.markers.forEach(e => Potree.Utils.updateVisible(e, 'editEnable', this.enableEdit));
 	  }
-	  setTitleVisi(v) {
-	    var reason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
-	    Potree.Utils.updateVisible(this.titleLabel.parent, 'hideTitle-' + reason, v);
+	  setTitleVisi(label, v) {
+	    var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
+	    Potree.Utils.updateVisible(label, 'hideTitle-' + reason, v);
+	    viewer.dispatchEvent('content_changed');
+	  }
+	  setTitle() {
+	    var title = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
+	    this.titleLabel.setText(title);
+	    this.setTitleVisi(this.titleLabel.parent, title instanceof Array || title.trim() != '', 'noText');
+	    viewer.dispatchEvent('content_changed');
+	  }
+	  setMarkerTitle(index, title) {
+	    this.markerLabels[index].setText(title);
+	    this.setTitleVisi(this.markerLabels[index], title instanceof Array || title.trim() != '', 'noText');
+	    viewer.dispatchEvent('content_changed');
 	  }
 	  editStateChange(state) {
 	    //拖动时被调用
@@ -42613,25 +42684,24 @@
 	    }
 	    this.isEditing = state;
 	  }
-	  setMarkerSelected(marker, state, hoverObject) {
-	    //console.warn(marker.id , state, hoverObject)
-
-	    marker.markerSelectStates[hoverObject] = state;
-	    var absoluteState = false;
-	    for (var i in marker.markerSelectStates) {
-	      if (marker.markerSelectStates[i] == 'hover') {
-	        absoluteState = true;
-	        break;
-	      }
-	    }
-	    if (absoluteState) {
+	  setMarkerSelected(marker, state) {
+	    state == 'hover' && (marker.markerSelectStates.hover = true);
+	    state == 'unhover' && (marker.markerSelectStates.hover = false);
+	    state == 'click' && (marker.markerSelectStates.click = true); //click or drag
+	    state == 'unclick' && (marker.markerSelectStates.click = false);
+	    if (marker.markerSelectStates.click) {
+	      marker.material = getMarkerMat('drag');
+	      marker.renderOrder = marker.pickOrder = Potree.config.renderOrders.measureMarker + 2;
+	    } else if (marker.markerSelectStates.hover) {
 	      marker.material = getMarkerMat('delete');
 	      marker.renderOrder = marker.pickOrder = Potree.config.renderOrders.measureMarker + 1;
 	    } else {
 	      marker.material = getMarkerMat('default');
 	      marker.renderOrder = marker.pickOrder = Potree.config.renderOrders.measureMarker;
 	    }
-	    marker.selected = absoluteState;
+
+	    //marker.selected = absoluteState
+
 	    viewer.mapViewer && viewer.mapViewer.dispatchEvent('content_changed');
 	    viewer.dispatchEvent('content_changed');
 	  }
@@ -42649,13 +42719,6 @@
 	        }
 	      }
 	    }
-
-	    /* if(absoluteState){
-	        this.markers.forEach(e=>this.setMarkerSelected(e, 'hover', 'selectAll' ) ) 
-	    }else{
-	        this.markers.forEach(e=>this.setMarkerSelected(e, 'unhover', 'selectAll' )) 
-	    } */
-
 	    this.selected = absoluteState;
 	    if (hoverObject != 'byList') {
 	      //this.bus && this.bus.emit('highlight', this.selected)
@@ -42738,7 +42801,7 @@
 	   */
 
 	  setFontSize(fontsize) {
-	    this.fontSize = fontsize;
+	    this.fontsize = fontsize;
 	    this.markerLabels.concat(this.titleLabel).forEach(e => {
 	      e.fontsize = fontsize;
 	      e.updateTexture();
@@ -43181,6 +43244,8 @@
 	          measure.edges.forEach(edge => {
 	            edge.dispatchEvent('addHoverEvent');
 	          });
+	        } else {
+	          measure.edge.dispatchEvent('addHoverEvent');
 	        }
 	        measure.markers.forEach(marker => {
 	          marker.dispatchEvent('addHoverEvent');
@@ -55972,7 +56037,7 @@
 	  maxOcclusionFactor: 0.7,
 	  maxClipFactor: 1
 	};
-	var renderOrders = {
+	var renderOrders$1 = {
 	  line: 3,
 	  spot: 15,
 	  //高过模型
@@ -56016,7 +56081,7 @@
 	      map: texLoader$8.load(Potree.resourcePath + '/textures/spot_default.png')
 	    })));
 	    this.spot.scale.set(defaultSpotScale, defaultSpotScale, defaultSpotScale);
-	    this.spot.renderOrder = renderOrders.spot;
+	    this.spot.renderOrder = renderOrders$1.spot;
 	    this.line = LineDraw.createFatLine([], {
 	      mat: lineMat
 	    });
@@ -56043,8 +56108,8 @@
 	      fontsize: this.fontsize || 13,
 	      fontWeight: '',
 	      //thick
-	      renderOrder: renderOrders.label,
-	      pickOrder: renderOrders.label,
+	      renderOrder: renderOrders$1.label,
+	      pickOrder: renderOrders$1.label,
 	      useDepth: true
 	    })); //更新sprite时,实际更新的是root: spot的矩阵
 	    this.setTitle(this.title);
@@ -56178,13 +56243,13 @@
 	      this.titleLabel.position.y = 0;
 	      this.spot.position.set(0, 0, 0.01); //在mesh之上偏移一点
 	      this.setNorQua();
-	      this.line.renderOrder = renderOrders.spot + 1; //比spot高,但比label低
+	      this.line.renderOrder = renderOrders$1.spot + 1; //比spot高,但比label低
 	    } else {
 	      this.titleLabel.parent.add(this.spot);
 	      this.updateTitlePos();
 	      this.spot.position.set(0, 0, 0);
 	      this.spot.quaternion.set(0, 0, 0, 1); //this.titleLabel.update()
-	      this.line.renderOrder = renderOrders.line; //还原
+	      this.line.renderOrder = renderOrders$1.line; //还原
 	    }
 	    Potree.Utils.updateVisible(this.line, 'hideTitle', !this.titleLabel.visible && onMesh ? false : true);
 	    this.updateDepthParams();
@@ -56202,6 +56267,7 @@
 	    //tag.onMesh && Potree.Utils.updateVisible(tag.line, 'hideTitle-'+reason, v)
 	    //line的可见性比较复杂,所以干脆跟随title的,reason不记录那么多
 	    this.onMesh && Potree.Utils.updateVisible(this.line, 'hideTitle', this.titleLabel.visible);
+	    viewer.dispatchEvent('content_changed');
 	  }
 	  setFontSize(fontsize) {
 	    this.titleLabel.fontsize = this.fontsize = fontsize;
@@ -63533,6 +63599,12 @@
 	  }, {
 	    'hoverTranHandle': 'grab'
 	  }, {
+	    pen_delPoint: "url({Potree.resourcePath}/images/polygon_mark/pic_pen_sub.png),auto"
+	  }, {
+	    pen_addPoint: "url({Potree.resourcePath}/images/polygon_mark/pic_pen_add.png),auto"
+	  }, {
+	    pen: "url({Potree.resourcePath}/images/polygon_mark/pic_pen.png),auto"
+	  }, {
 	    "movePointcloud": 'move'
 	  }, {
 	    "polygon_isIntersectSelf": 'not-allowed'
@@ -73011,7 +73083,7 @@
 	var rotQua2$1 = new Quaternion().setFromAxisAngle(new Vector3(0, 0, 1), -Math.PI);
 	var lineMats$3 = {};
 	var circleMats = {};
-	var renderOrders$1 = {
+	var renderOrders$2 = {
 	  circleSelected: 3,
 	  circle: 2,
 	  line: 1
@@ -73247,7 +73319,7 @@
 	        this.linkGuideLine.visible = false;
 	        this.linkGuideLine.name = 'linkGuideLine';
 	        viewer.scene.scene.add(this.linkGuideLine);
-	        this.linkGuideLine.renderOrder = renderOrders$1.line;
+	        this.linkGuideLine.renderOrder = renderOrders$2.line;
 	        var update = e => {
 	          if (this.operation != 'addLink' || this.activeViewName != 'top' && this.activeViewName != 'mainView' || !this.selectedPano) {
 	            return this.linkGuideLine.visible = false;
@@ -73914,7 +73986,7 @@
 	        mat: lineMats$3.default
 	      });
 	      line.name = "".concat(pano0.id, "-").concat(pano1.id);
-	      line.renderOrder = line.pickOrder = renderOrders$1.line;
+	      line.renderOrder = line.pickOrder = renderOrders$2.line;
 	      this.lineMeshes.add(line);
 	      this.panoLink[pano0.id][pano1.id].line = this.panoLink[pano1.id][pano0.id].line = line;
 	      line.addEventListener('mouseover', () => {
@@ -74057,8 +74129,8 @@
 	          nearBound: 2,
 	          farBound: 10
 	        },
-	        renderOrder: renderOrders$1.circle,
-	        pickOrder: renderOrders$1.circle
+	        renderOrder: renderOrders$2.circle,
+	        pickOrder: renderOrders$2.circle
 	      });
 	      circle.pickDontCheckDis = true;
 	      circle.name = 'panoCircle';
@@ -74151,7 +74223,7 @@
 	    var opaProp = this.activeViewName == 'top' ? opacitys.topView : opacitys.sideView;
 	    if (this.selectedPano) {
 	      this.selectedPano.circle.material = circleMats['default' + '_' + this.getPanoRtkState(this.selectedPano)];
-	      this.selectedPano.circle.renderOrder = renderOrders$1.circle;
+	      this.selectedPano.circle.renderOrder = renderOrders$2.circle;
 	      this.selectedPano.removeEventListener('rePos', this.panoReposCallback);
 	      if (this.activeViewName == 'mainView') {} else {
 	        this.selectedClouds.forEach(e => {
@@ -74164,7 +74236,7 @@
 	    this.updateSelectGroup();
 	    if (pano) {
 	      this.selectedPano.circle.material = circleMats['selected' + '_' + this.getPanoRtkState(this.selectedPano)];
-	      this.selectedPano.circle.renderOrder = this.selectedPano.circle.pickOrder = renderOrders$1.circleSelected; //侧视图能显示在最前
+	      this.selectedPano.circle.renderOrder = this.selectedPano.circle.pickOrder = renderOrders$2.circleSelected; //侧视图能显示在最前
 
 	      //viewer.controls.setTarget(this.selectedPano.position) //3d时绕其为中心转动 (注释原因:不想变来变去不习惯,难以查看任意角落细节)
 	      this.selectedPano.addEventListener('rePos', this.panoReposCallback);
@@ -74352,7 +74424,7 @@
 	        mat: lineMats$3.suggestLink
 	      });
 	      this.suggestLines.push(line);
-	      line.renderOrder = renderOrders$1.line;
+	      line.renderOrder = renderOrders$2.line;
 	      viewer.scene.scene.add(line);
 	    });
 	  }
@@ -77446,9 +77518,9 @@
 	      if (!viewport /* || viewport.camera.type == "OrthographicCamera"  */) return;
 	      //let camera = viewport.camera 
 
-	      if (e.drag.object !== null) {
-	        return;
-	      }
+	      /* if (e.drag.object !== null) {
+	      	return;
+	      } */
 	      var mode;
 	      if (e.isTouch) {
 	        if (e.touches.length == 1) {

File diff suppressed because it is too large
+ 1 - 1
public/lib/potree/potree.js.map


BIN
public/lib/potree/resources/textures/arrows.png


BIN
public/lib/potree/resources/textures/dot_n.png


BIN
public/lib/potree/resources/textures/dot_r.png


BIN
public/lib/potree/resources/textures/dot_s.png


BIN
public/lib/potree/resources/textures/polygon_mark/pic_pen.png


BIN
public/lib/potree/resources/textures/polygon_mark/pic_pen_add.png


BIN
public/lib/potree/resources/textures/polygon_mark/pic_pen_sub.png


+ 23 - 36
src/sdk/cover/index.js

@@ -1257,11 +1257,11 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
             
         
             let path
-            let info = {measureType : 'Path', minMarkers : 2}
+            let info = {measureType : 'Path', minMarkers : 2, title:props.name}
             if(props.points.length == 0){
 
                 path = viewer.measuringTool.startInsertion( info, () => { 
-                    bus.emit("end", ret); //完成  
+                    bus.emit("end", functions); //完成  
                 }) 
             }else{
                 info.dataset_points = props.points.map(e=>e.modelId)
@@ -1269,54 +1269,43 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                 path = viewer.measuringTool.createMeasureFromData(info);
                 
             }
+            
+            
+            
+            path.dispatchEvent('markerSelect',(e)=>{
+                bus.emit('activePoint', index:  e.cancel ? -1 : e.marker   )
+            }) 
+            
+            
+            
             let funs = getMeasureFunction(path, bus) 
-            /* path.dispatchEvent('',()=>{
-                
-            }) */
-
 
 
 
             let functions = Object.assign(funs,{
+                bus,
                 changeCanEdit(state){
                     path.setEditEnable(state)
                 }, 
-                visibility(v){// 标注可见性
-                    Potree.Utils.updateVisible(path,'user', v)
+                visibility(v){ 
+                    //Potree.Utils.updateVisible(path,'user', v)
                 },
                 visibilityName(v){ 
-                    tag.setTitleVisi(v, 'user')
+                    path.setTitleVisi(v, 'user')
+                },
+                changeName(name){
+                    path.settitle(name)
+                },
+                changePointName(index,name){
+                    path.setMarkerTitle(index,name)
                 },
                 changePathPoints(points){
                     
                 }  
             })
-        
+            return functions
+         
          
-        
-        /* export type Path = {
-          
-          // 飞向路径
-          fly: () => void,
-          // 更改路径点
-          changePathPoints: (points: PathProps['points']) => void
-          // 播放路径,相机沿着路径运动,传入播放完毕回调
-          play: (playedHandler: () => void) => void
-          // 停止播放路径
-          pause: () => void
-          // 是否可编辑
-          changeCanEdit: (canMove: boolean) => void
-          // 可见性
-          visibility: (visibility: boolean) => void
-          // 气泡是否可见
-          visibilityName: (visibility: boolean) => void
-          // 更改标题气泡属性
-          changeLine: (props: Partial<PathProps['line']>) => void
-          // 距离相机位置
-          toCameraDistance: number
-          // 线段销毁
-          destory: () => void
-                       */
               
               
         },
@@ -1790,8 +1779,6 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
 
 
-/* class path = */
- 
  
 /*