瀏覽代碼

准备去掉simpleLine。这里先备份一下

xushiting 2 年之前
父節點
當前提交
0efef6a1e1
共有 2 個文件被更改,包括 143 次插入2 次删除
  1. 143 1
      src/graphic/ListenLayer.js
  2. 0 1
      src/graphic/enum/VectorType.js

+ 143 - 1
src/graphic/ListenLayer.js

@@ -65,6 +65,10 @@ export default class ListenLayer {
     //   position,
     //   exceptVectorIds.exceptCurveLineId
     // );
+    selectInfo.simpleLineInfo = this.isSelectSimpleLine(
+      position,
+      exceptVectorIds.exceptSimpleLineId
+    );
     selectInfo.curveLineInfo = {};
     selectInfo.curvePointInfo = {};
     //交叉口拐弯处的控制点
@@ -127,7 +131,7 @@ export default class ListenLayer {
       pointInfo.y = linkedPoint.y;
     } else {
       if (seqInfo.hasOwnProperty("linkedPointIdX")) {
-        pointInfo.linkedPointIdX = seqInfo.linkedPointIdY;
+        pointInfo.linkedPointIdX = seqInfo.linkedPointIdX;
         pointInfo.x = seqInfo.x;
       } else if (seqInfo.hasOwnProperty("linkedPointIdY")) {
         pointInfo.linkedPointIdY = seqInfo.linkedPointIdY;
@@ -668,6 +672,121 @@ export default class ListenLayer {
     return crossControlPointInfo;
   }
 
+  isSelectSimpleLine(position, exceptSimpleLineId) {
+    let simpleLineInfo = {
+      simpleLineId: null,
+      type: null,
+      distance: null,
+    };
+    let seqInfo = {};
+    const simpleLines = dataService.getSimpleLines();
+    for (const simpleLineId in simpleLines) {
+      if (simpleLineId == exceptSimpleLineId) {
+        continue;
+      }
+      const simpleLine = dataService.getSimpleLine(simpleLineId);
+      let distance = mathUtil.getDistance(position, simpleLine.start);
+      //先考虑两个端点
+      if (distance < Constant.minAdsorbPix) {
+        if (
+          simpleLineInfo.simpleLineId == null ||
+          distance < simpleLineInfo.distance
+        ) {
+          simpleLineInfo = {
+            simpleLineId: simpleLineId,
+            type: VectorType.SimpleLine,
+            distance: distance,
+            index: "start",
+          };
+          simpleLineInfo.x = simpleLine.start.x;
+          simpleLineInfo.y = simpleLine.start.y;
+        }
+      } else {
+        distance = mathUtil.getDistance(position, simpleLine.end);
+        if (distance < Constant.minAdsorbPix) {
+          if (
+            simpleLineInfo.simpleLineId == null ||
+            distance < simpleLineInfo.distance
+          ) {
+            simpleLineInfo = {
+              simpleLineId: simpleLineId,
+              type: VectorType.SimpleLine,
+              distance: distance,
+              index: "end",
+            };
+            simpleLineInfo.x = simpleLine.end.x;
+            simpleLineInfo.y = simpleLine.end.y;
+          }
+        }
+      }
+
+      //记录平行和垂直
+      if (Math.abs(position.x - simpleLine.start.x) < Constant.minAdsorbPix) {
+        seqInfo.linkedPointIdX = simpleLineId + "-startX";
+        seqInfo.x = simpleLine.start.x;
+      } else if (
+        Math.abs(position.y - simpleLine.start.y) < Constant.minAdsorbPix
+      ) {
+        seqInfo.linkedPointIdY = simpleLineId + "-startY";
+        seqInfo.y = simpleLine.start.y;
+      } else if (
+        Math.abs(position.x - simpleLine.end.x) < Constant.minAdsorbPix
+      ) {
+        seqInfo.linkedPointIdX = simpleLineId + "-endX";
+        seqInfo.x = simpleLine.end.x;
+      } else if (
+        Math.abs(position.y - simpleLine.end.y) < Constant.minAdsorbPix
+      ) {
+        seqInfo.linkedPointIdY = simpleLineId + "-endY";
+        seqInfo.y = simpleLine.end.y;
+      }
+
+      //再考虑整个线段
+      if (simpleLineInfo.simpleLineId == null) {
+        const line = mathUtil.createLine1(simpleLine.start, simpleLine.end);
+        const join = mathUtil.getJoinLinePoint(position, line);
+        const distance = mathUtil.getDistance(position, join);
+        if (
+          !mathUtil.isContainForSegment(join, simpleLine.start, simpleLine.end)
+        ) {
+          continue;
+        } else if (distance < Constant.minAdsorbPix / 2) {
+          simpleLineInfo = {
+            simpleLineId: simpleLineId,
+            type: VectorType.SimpleLine,
+            distance: distance,
+          };
+          simpleLineInfo.x = join.x;
+          simpleLineInfo.y = join.y;
+        }
+      }
+
+      //最后考虑端点的单个x或者y
+      if (simpleLineInfo.simpleLineId == null) {
+        if (seqInfo.hasOwnProperty("linkedPointIdX")) {
+          simpleLineInfo.linkedPointIdX = seqInfo.linkedPointIdX;
+          simpleLineInfo.x = seqInfo.x;
+        } else if (seqInfo.hasOwnProperty("linkedPointIdY")) {
+          simpleLineInfo.linkedPointIdY = seqInfo.linkedPointIdY;
+          simpleLineInfo.y = seqInfo.y;
+        }
+        if (
+          simpleLineInfo.hasOwnProperty("y") &&
+          !simpleLineInfo.hasOwnProperty("x")
+        ) {
+          simpleLineInfo.x = position.x;
+        }
+        if (
+          simpleLineInfo.hasOwnProperty("x") &&
+          !simpleLineInfo.hasOwnProperty("y")
+        ) {
+          simpleLineInfo.y = position.y;
+        }
+      }
+    }
+    return simpleLineInfo;
+  }
+
   /**
     * 
     * @param info:{ 
@@ -818,6 +937,13 @@ export default class ListenLayer {
         this.modifyPoint.x = info.curveLineInfo.x;
         this.modifyPoint.y = info.curveLineInfo.y;
       }
+    } else if (info && info.simpleLineInfo.simpleLineId) {
+      this.modifyPoint.simpleLineId = info.simpleLineInfo.simpleLineId;
+      this.modifyPoint.x = info.simpleLineInfo.x;
+      this.modifyPoint.y = info.simpleLineInfo.y;
+      if (info.simpleLineInfo.index) {
+        this.modifyPoint.index = info.simpleLineInfo.index;
+      }
     } else if (info && info.roadPointInfo.linkedRoadPointIdX) {
       this.modifyPoint = {};
       this.modifyPoint.linkedRoadPointIdX =
@@ -852,6 +978,16 @@ export default class ListenLayer {
       this.modifyPoint.linkedPointIdY = info.pointInfo.linkedPointIdY;
       this.modifyPoint.y = info.pointInfo.y;
       this.modifyPoint.x = info.pointInfo.x;
+    } else if (info && info.simpleLineInfo.linkedPointIdX) {
+      this.modifyPoint = {};
+      this.modifyPoint.linkedPointIdX = info.simpleLineInfo.linkedPointIdX;
+      this.modifyPoint.x = info.simpleLineInfo.x;
+      this.modifyPoint.y = info.simpleLineInfo.y;
+    } else if (info && info.simpleLineInfo.linkedPointIdY) {
+      this.modifyPoint = {};
+      this.modifyPoint.linkedPointIdY = info.simpleLineInfo.linkedPointIdY;
+      this.modifyPoint.y = info.simpleLineInfo.y;
+      this.modifyPoint.x = info.simpleLineInfo.x;
     } else {
       this.modifyPoint = null;
     }
@@ -932,6 +1068,12 @@ export default class ListenLayer {
         VectorType.CurveLine,
         SelectState.Select
       );
+    } else if (this.modifyPoint.simpleLineId) {
+      stateService.setSelectItem(
+        this.modifyPoint.simpleLineId,
+        VectorType.SimpleLine,
+        this.modifyPoint.index ? this.modifyPoint.index : SelectState.Select
+      );
     }
 
     let newSelectItem = stateService.getSelectItem();

+ 0 - 1
src/graphic/enum/VectorType.js

@@ -4,7 +4,6 @@ const VectorType = {
   Img: "Img",
   Point: "Point",
   Line: "Line",
-  SimpleLine: "SimpleLine",
   CurvePoint: "CurvePoint",
   CurveLine: "CurveLine",
   MeasureArrow: "MeasureArrow",