xushiting 2 anni fa
parent
commit
80a0aaf2fa

+ 2 - 2
src/graphic/Geometry/Road.js

@@ -16,8 +16,8 @@ export default class Road extends Geometry {
     //道路中间隔离栏 ,起点和终点与startId和endId方向一致。但是坐标有区别。因为隔离栏要比start-end短一些
     //单向车道没有中间栏
     this.midDivide = {
-      leftMidDivide: null,
-      rightMidDivide: null,
+      leftMidDivide: {},
+      rightMidDivide: {},
       midDivideWidth: Setting.roadMidDivideWidth,
     };
 

+ 7 - 4
src/graphic/History/Change.js

@@ -12,10 +12,13 @@ export default class Change {
 
   // 保存当前记录
   saveCurrentInfo() {
-    this.lastData.points = JSON.parse(
-      JSON.stringify(dataService.getRoadPoints())
-    );
-    this.lastData.roads = JSON.parse(JSON.stringify(dataService.getRoads()));
+    // this.lastData.roadPoints = JSON.parse(
+    //   JSON.stringify(dataService.getRoadPoints())
+    // );
+    //this.lastData.roads = JSON.parse(JSON.stringify(dataService.getRoads()));
+    this.lastData.lines = JSON.parse(JSON.stringify(dataService.getLines()));
+    this.lastData.texts = JSON.parse(JSON.stringify(dataService.getTexts()));
+    this.lastData.points = JSON.parse(JSON.stringify(dataService.getPoints()));
   }
 
   operate() {

+ 0 - 8
src/graphic/History/History.js

@@ -15,14 +15,6 @@ export default class History {
 
   init() {
     change.saveCurrentInfo();
-    const points = dataService.getRoadPoints();
-    // if (Object.keys(points).length > 0) {
-    //   this.layer.$xui.toolbar.clear = true;
-    //   this.layer.$xui.toolbar.download = true;
-    // } else {
-    //   this.layer.$xui.toolbar.clear = false;
-    //   this.layer.$xui.toolbar.download = false;
-    // }
   }
 
   save() {

+ 20 - 7
src/graphic/Service/DataService.js

@@ -44,16 +44,17 @@ export class DataService {
     this.vectorData.curveRoadEdges = {};
     //直路交叉的时候,产生的曲线控制点
     this.vectorData.controlPoints = {};
-    //直线
+    //直线,起点和终点都是point的id
     this.vectorData.lines = {};
+    //简单线段,起点和终点都是坐标
+    this.vectorData.simpleLines = {};
     //弯曲线条
     this.vectorData.curvelines = {};
     //线段(完全或者直线)上的端点
     this.vectorData.points = {};
-    //基准线,只有一条
-    this.vectorData.baseLineId = null;
     //基准点
     this.vectorData.basePointIds = [];
+    this.vectorData.texts = {};
   }
 
   //网格
@@ -106,10 +107,6 @@ export class DataService {
     this.vectorData.lines[line.vectorId] = line;
   }
 
-  addPoint(point) {
-    this.vectorData.points[point.vectorId] = point;
-  }
-
   getLines() {
     return this.vectorData.lines;
   }
@@ -118,6 +115,18 @@ export class DataService {
     return this.vectorData.lines[lineId];
   }
 
+  getSimpleLines() {
+    return this.vectorData.simpleLines;
+  }
+
+  getSimpleLine(simpleLineId) {
+    return this.vectorData.simpleLines[simpleLineId];
+  }
+
+  addSimpleLine(simpleLine) {
+    this.vectorData.simpleLines[simpleLine.vectorId] = simpleLine;
+  }
+
   getPoints() {
     return this.vectorData.points;
   }
@@ -126,6 +135,10 @@ export class DataService {
     return this.vectorData.points[pointId];
   }
 
+  addPoint(point) {
+    this.vectorData.points[point.vectorId] = point;
+  }
+
   //弯曲线条
   addCurveLine(curveLine) {
     this.vectorData.curvelines[curveLine.vectorId] = curveLine;

+ 13 - 6
src/graphic/Service/ElementService.js

@@ -59,6 +59,7 @@ export class ElementService {
     this.hideAll();
   }
 
+  //临时的
   createTempRoad() {
     let p1 = new Point({ x: 0, y: 0 });
     let p2 = new Point({ x: 1, y: 1 });
@@ -66,12 +67,18 @@ export class ElementService {
     this.newRoad.start = p1;
     this.newRoad.end = p2;
 
-    let edgePoints = mathUtil.RectangleVertex(
-      p1,
-      p2,
-      Constant.defaultRoadWidth
-    );
-
+    let edgePoints;
+    if (road.way == Constant.oneWay) {
+      edgePoints = mathUtil.RectangleVertex(p1, p2, newRoad.singleRoadWidth);
+    } else {
+      edgePoints = mathUtil.RectangleVertex(
+        p1,
+        p2,
+        newRoad.leftWidth +
+          newRoad.rightWidth +
+          newRoad.midDivide.midDivideWidth
+      );
+    }
     let leftEdge = new RoadEdge(
       edgePoints.leftEdgeStart,
       edgePoints.leftEdgeEnd,

+ 1 - 1
src/graphic/Service/LineService.js

@@ -28,7 +28,7 @@ export default class LineService {
     }
     let simpleLineline = new SimpleLine(startPoint, endPoint, vectorId);
     simpleLineline.setCategory(category);
-    dataService.addLine(simpleLineline);
+    dataService.addSimpleLine(simpleLineline);
     return simpleLineline;
   }
 }

+ 23 - 9
src/graphic/Service/RoadService.js

@@ -1014,7 +1014,6 @@ export default class RoadService {
         road.singleLanes[i].end.y = rightEdge.end.y + dy2 * (i + 1);
       }
     }
-    this.setMidDivide(road.vectorId);
   }
 
   //双向车道
@@ -1066,22 +1065,25 @@ export default class RoadService {
           road.leftLanes[i].start = {};
           road.leftLanes[i].start.x = startPoint.x + middx1 + leftdx1 * (i + 1);
           road.leftLanes[i].start.y = startPoint.y + middy1 + leftdy1 * (i + 1);
-
-          road.midDivide.leftMidDivide.start = {};
-          road.midDivide.leftMidDivide.start.x = startPoint.x + middx1;
-          road.midDivide.leftMidDivide.start.y = startPoint.y + middy1;
         }
 
         if (dir2 == "end" || !dir2) {
           road.leftLanes[i].end = {};
           road.leftLanes[i].end.x = endPoint.x + middx2 + leftdx2 * (i + 1);
           road.leftLanes[i].end.y = endPoint.y + middy2 + leftdy2 * (i + 1);
-
-          road.midDivide.leftMidDivide.end = {};
-          road.midDivide.leftMidDivide.end.x = endPoint.x + middx2;
-          road.midDivide.leftMidDivide.end.y = endPoint.y + middy2;
         }
       }
+      if (dir2 == "start" || !dir2) {
+        road.midDivide.leftMidDivide.start = {};
+        road.midDivide.leftMidDivide.start.x = startPoint.x + middx1;
+        road.midDivide.leftMidDivide.start.y = startPoint.y + middy1;
+      }
+      if (dir2 == "end" || !dir2) {
+        road.midDivide.leftMidDivide.end = {};
+        road.midDivide.leftMidDivide.end.x = endPoint.x + middx2;
+        road.midDivide.leftMidDivide.end.y = endPoint.y + middy2;
+      }
+
       road.leftLanes.splice(leftCount - 1);
     }
 
@@ -1117,6 +1119,18 @@ export default class RoadService {
           road.midDivide.rightMidDivide.end.y = endPoint.y + middy2;
         }
       }
+
+      if (dir2 == "start" || !dir2) {
+        road.midDivide.rightMidDivide.start = {};
+        road.midDivide.rightMidDivide.start.x = startPoint.x + middx1;
+        road.midDivide.rightMidDivide.start.y = startPoint.y + middy1;
+      }
+      if (dir2 == "end" || !dir2) {
+        road.midDivide.rightMidDivide.end = {};
+        road.midDivide.rightMidDivide.end.x = endPoint.x + middx2;
+        road.midDivide.rightMidDivide.end.y = endPoint.y + middy2;
+      }
+
       road.rightLanes.splice(rightCount - 1);
     }
     this.setMidDivide(road.vectorId);