xushiting il y a 2 ans
Parent
commit
c327be3472

+ 3 - 3
src/graphic/Constant.js

@@ -24,13 +24,13 @@ const Constant = {
   // miniMap_Width: 1200,
   // miniMap_Height: 1200,
   minLen: 0.2, //挨着,比如:点是否在线段上
-  minAdsorbPix: 10, //最小吸附像素
-  minRealDis: 10,
+  minAdsorbPix: 20, //最小吸附像素
+  minRealDis: 20,
   defaultRoadWidth: 100, //默认公路宽度
   ratio: 1,
   minAngle: 10,
   maxAngle: 170,
-  minRoadSideWidth: 20,
+  minRoadSideWidth: 30,
   maxRoadSideWidth: 800,
 };
 export default Constant;

+ 13 - 0
src/graphic/Geometry/CurveLine.js

@@ -0,0 +1,13 @@
+import VectorType from "../enum/VectorType.js";
+import SelectState from "../enum/SelectState.js";
+import Geometry from "./Geometry";
+import Constant from "../Constant.js";
+
+export default class CurveLine extends Geometry {
+  constructor(points, vectorId) {
+    super();
+    this.points = points;
+    this.geoType = VectorType.CurveLine;
+    this.setId(vectorId);
+  }
+}

+ 0 - 1
src/graphic/History/Change.js

@@ -14,7 +14,6 @@ export default class Change {
   saveCurrentInfo() {
     this.lastData.points = JSON.parse(JSON.stringify(dataService.getPoints()));
     this.lastData.roads = JSON.parse(JSON.stringify(dataService.getRoads()));
-    this.lastData.tags = JSON.parse(JSON.stringify(dataService.getTags()));
   }
 
   operate() {

+ 31 - 19
src/graphic/Layer.js

@@ -83,6 +83,11 @@ export default class Layer {
     this.lastX = e.offsetX || e.layerX;
     this.lastY = e.offsetY || e.layerY;
 
+    let position = coordinate.getXYFromScreen({
+      x: this.startX,
+      y: this.startY,
+    });
+
     // 右键
     if (e.button == 2) {
       this.stopAddVector();
@@ -94,6 +99,16 @@ export default class Layer {
     this.setEventName("mouseDown");
     const selectItem = stateService.getSelectItem();
     const eventName = stateService.getEventName();
+    switch (eventName) {
+      case LayerEvents.AddRoad:
+        stateService.setEventName(LayerEvents.AddingRoad);
+        addRoad.setNewRoadPoint("start", position);
+        break;
+      case LayerEvents.AddCurveRoad:
+        stateService.setEventName(LayerEvents.AddingCurveRoad);
+        addRoad.setNewRoadPoint("start", position);
+        break;
+    }
     stateService.setDraggingItem(selectItem);
     // 清除上一个状态
     // 设置当前事件名称
@@ -496,9 +511,9 @@ export default class Layer {
           this.history.save();
         }
         break;
-      case LayerEvents.AddRoad:
-        addRoad.setNewRoadPoint("start", position);
-        break;
+      // case LayerEvents.AddRoad:
+      //   addRoad.setNewRoadPoint("start", position);
+      //   break;
       case LayerEvents.AddingRoad:
         needAutoRedraw = true;
         if (addRoad.canAdd) {
@@ -508,9 +523,9 @@ export default class Layer {
           elementService.hideAll();
         }
         break;
-      case LayerEvents.AddCurveRoad:
-        addRoad.setNewRoadPoint("start", position);
-        break;
+      // case LayerEvents.AddCurveRoad:
+      //   addRoad.setNewRoadPoint("start", position);
+      //   break;
       case LayerEvents.AddingCurveRoad:
         needAutoRedraw = true;
         if (addRoad.canAdd) {
@@ -777,25 +792,22 @@ export default class Layer {
         } else if (selectItem.type == VectorType.CurveEdge) {
           stateService.setEventName(LayerEvents.MoveCurveEdge);
         }
-        // else if (selectItem.type == VectorType.Tag) {
-        //   stateService.setEventName(LayerEvents.MoveTag);
-        // } else if (selectItem.type == VectorType.MeasureLine) {
-        //   stateService.setEventName(LayerEvents.MoveMeasureLine);
-        // } else if (selectItem.type == VectorType.MeasureArrow) {
-        //   stateService.setEventName(LayerEvents.MoveMeasureArrow);
-        // }
       }
     } else if (eventType == "mouseUp") {
       if (eventName == LayerEvents.AddTag) {
         //可连续添加
         //stateService.clearEventName()
-      } else if (eventName == LayerEvents.AddRoad) {
-        stateService.setEventName(LayerEvents.AddingRoad);
-      } else if (eventName == LayerEvents.AddingRoad) {
+      }
+      // else if (eventName == LayerEvents.AddRoad) {
+      //   stateService.setEventName(LayerEvents.AddingRoad);
+      // }
+      else if (eventName == LayerEvents.AddingRoad) {
         stateService.setEventName(LayerEvents.AddRoad);
-      } else if (eventName == LayerEvents.AddCurveRoad) {
-        stateService.setEventName(LayerEvents.AddingCurveRoad);
-      } else if (eventName == LayerEvents.AddingCurveRoad) {
+      }
+      // else if (eventName == LayerEvents.AddCurveRoad) {
+      //   stateService.setEventName(LayerEvents.AddingCurveRoad);
+      // }
+      else if (eventName == LayerEvents.AddingCurveRoad) {
         stateService.setEventName(LayerEvents.AddCurveRoad);
       } else if (eventName == LayerEvents.AddMeasureLine) {
         stateService.setEventName(LayerEvents.AddingMeasureLine);

+ 1 - 1
src/graphic/ListenLayer.js

@@ -217,7 +217,7 @@ export default class ListenLayer {
       const join = mathUtil.getJoinLinePoint(position, roadLine);
       const distance = mathUtil.getDistance(position, join);
       if (!mathUtil.isContainForSegment(join, startPoint, endPoint)) {
-        return roadInfo;
+        continue;
       }
       if (distance < Constant.minAdsorbPix / 2) {
         roadInfo = {

+ 23 - 0
src/graphic/Service/CurveRoadService.js

@@ -658,6 +658,29 @@ export default class CurveRoadService extends RoadService {
   setCurves(curveRoad) {
     curveRoad.curves = mathUtil.getCurvesByPoints(curveRoad.points);
   }
+
+  unlock(curveRoadId) {
+    let curveRoad = dataService.getCurveRoad(curveRoadId);
+    let leftCurveEdge = dataService.getCurveEdge(curveRoad.leftEdgeId);
+    let rightCurveEdge = dataService.getCurveEdge(curveRoad.rightEdgeId);
+    let lanes = curveRoad.lanes;
+
+    for (let i = 0; i < curveRoad.curves.length; ++i) {
+      dataService.createCurveLine(curveRoad.curves[i]);
+    }
+    for (let i = 0; i < leftCurveEdge.curves.length; ++i) {
+      dataService.createCurveLine(leftCurveEdge.curves[i]);
+    }
+    for (let i = 0; i < rightCurveEdge.curves.length; ++i) {
+      dataService.createCurveLine(rightCurveEdge.curves[i]);
+    }
+    for (let i = 0; i < lanes.length; ++i) {
+      for (let j = 0; j < lanes[i].curves.length; ++j) {
+        dataService.createCurveLine(lanes[i].curves[j]);
+      }
+    }
+    dataService.deleteCurveRoad(curveRoadId);
+  }
 }
 
 const curveRoadService = new CurveRoadService();

+ 38 - 3
src/graphic/Service/DataService.js

@@ -1,3 +1,6 @@
+import Line from "../Geometry/Line.js";
+import CurveLine from "../Geometry/CurveLine.js";
+
 export class DataService {
   constructor() {
     this.grid = {
@@ -69,7 +72,26 @@ export class DataService {
     this.vectorData.curveRoads = {};
     this.vectorData.curveEdges = {};
     this.vectorData.controlPoints = {};
-    this.vectorData.tags = {};
+    this.vectorData.lines = {};
+    this.vectorData.curvelines = {};
+  }
+
+  createLine(start, end) {
+    let line = new Line(start, end);
+    this.addLine(line);
+  }
+
+  createCurveLine(points) {
+    let curveLine = new CurveLine(points);
+    this.addCurveLine(curveLine);
+  }
+
+  addLine(line) {
+    this.vectorData.lines[line.vectorId] = line;
+  }
+
+  addCurveLine(curveLine) {
+    this.vectorData.curvelines[curveLine.vectorId] = curveLine;
   }
 
   getCurvePoints() {
@@ -108,8 +130,11 @@ export class DataService {
 
   deleteCurveRoad(curveRoadId) {
     let curveRoad = this.getCurveRoad(curveRoadId);
-    this.deletePoint(curveRoad.startId, curveRoadId);
-    this.deletePoint(curveRoad.endId, curveRoadId);
+    for (let i = 0; i < curveRoad.points.length; ++i) {
+      this.deleteCurvePoint(curveRoad.points[i].vectorId);
+    }
+    this.deleteCurveEdge(curveRoad.leftEdgeId);
+    this.deleteCurveEdge(curveRoad.rightEdgeId);
     delete this.vectorData.curveRoads[curveRoadId];
   }
 
@@ -121,6 +146,10 @@ export class DataService {
     this.vectorData.curveEdges[curveEdge.vectorId] = curveEdge;
   }
 
+  deleteCurveEdge(curveEdgeId) {
+    delete this.vectorData.curveEdges[curveEdgeId];
+  }
+
   addCurvePoint(curvePoint) {
     this.vectorData.curvePoints[curvePoint.vectorId] = curvePoint;
   }
@@ -145,9 +174,15 @@ export class DataService {
     let road = this.getRoad(roadId);
     this.deletePoint(road.startId, roadId);
     this.deletePoint(road.endId, roadId);
+    this.deleteEdge(road.leftEdgeId);
+    this.deleteEdge(road.rightEdgeId);
     delete this.vectorData.roads[roadId];
   }
 
+  deleteEdge(edgeId) {
+    delete this.vectorData.edges[edgeId];
+  }
+
   /**
    * 对端点的操作
    */

+ 17 - 0
src/graphic/Service/RoadService.js

@@ -1149,6 +1149,23 @@ export default class RoadService {
     roadService.setMidDivideForPointId(road.startId);
     roadService.setMidDivideForPointId(road.endId);
   }
+
+  unlock(roadId) {
+    let road = dataService.getRoad(roadId);
+    let startPoint = dataService.getPoint(road.startId);
+    let endPoint = dataService.getPoint(road.endId);
+    let leftEdge = dataService.getEdge(road.leftEdgeId);
+    let rightEdge = dataService.getEdge(road.rightEdgeId);
+    let lanes = road.lanes;
+
+    dataService.createLine(startPoint, endPoint);
+    dataService.createLine(leftEdge.start, leftEdge.end);
+    dataService.createLine(rightEdge.start, rightEdge.end);
+    for (let i = 0; i < lanes.length; ++i) {
+      dataService.createLine(lanes[i].start, lanes[i].end);
+    }
+    dataService.deleteRoad(roadId);
+  }
   /****************************************************************************************************************************************************************/
 }
 

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

@@ -5,6 +5,7 @@ const VectorType = {
   Circle: "Circle",
   Img: "Img",
   Line: "Line",
+  CurveLine: "CurveLine",
   MeasureLine: "MeasureLine",
   MeasureArrow: "MeasureArrow",
   Edge: "Edge",