xushiting 2 years ago
parent
commit
7a7862153f
2 changed files with 65 additions and 152 deletions
  1. 0 135
      src/graphic/Service/CurveRoadService.js
  2. 65 17
      src/graphic/Service/RoadService.js

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

@@ -159,126 +159,14 @@ export default class CurveRoadService extends RoadService {
       rightJoin.y += dy;
       rightJoin.y += dy;
       rightCurveEdge.points.splice(startIndex + 1, 0, rightJoin);
       rightCurveEdge.points.splice(startIndex + 1, 0, rightJoin);
       curveEdgeService.setCurves(rightCurveEdge);
       curveEdgeService.setCurves(rightCurveEdge);
-
-      // for (let i = 0; i < leftCount - 1; ++i) {
-      //   const leftLaneLine = mathUtil.createLine1(
-      //     curveRoad.leftLanes[i][startIndex],
-      //     curveRoad.leftLanes[i][startIndex + 1]
-      //   );
-      //   leftJoin = mathUtil.getJoinLinePoint(position, leftLaneLine);
-      //   leftJoin.x += dx;
-      //   leftJoin.y += dy;
-      //   curveRoad.leftLanes[i].splice(startIndex + 1, 0, leftJoin);
-      //   curveRoad.leftLanesCurves[i] = mathUtil.getCurvesByPoints(
-      //     curveRoad.leftLanes[i]
-      //   );
-      // }
-
-      // const leftMidDivideLine = mathUtil.createLine1(
-      //   curveRoad.midDivide.leftMidDivide[startIndex],
-      //   curveRoad.midDivide.leftMidDivide[startIndex + 1]
-      // );
-      // leftJoin = mathUtil.getJoinLinePoint(position, leftMidDivideLine);
-      // leftJoin.x += dx;
-      // leftJoin.y += dy;
-      // curveRoad.midDivide.leftMidDivide.splice(startIndex + 1, 0, leftJoin);
-      // curveRoad.midDivide.leftMidDivideCurves = mathUtil.getCurvesByPoints(
-      //   curveRoad.midDivide.leftMidDivide
-      // );
-
-      // for (let i = 0; i < rightCount - 1; ++i) {
-      //   const rightLaneLine = mathUtil.createLine1(
-      //     curveRoad.rightLanes[i][startIndex],
-      //     curveRoad.rightLanes[i][startIndex + 1]
-      //   );
-      //   rightJoin = mathUtil.getJoinLinePoint(position, rightLaneLine);
-      //   rightJoin.x += dx;
-      //   rightJoin.y += dy;
-      //   curveRoad.rightLanes[i].splice(startIndex + 1, 0, rightJoin);
-      //   curveRoad.rightLanesCurves[i] = mathUtil.getCurvesByPoints(
-      //     curveRoad.rightLanes[i]
-      //   );
-      // }
-
-      // const rightMidDivideLine = mathUtil.createLine1(
-      //   curveRoad.midDivide.rightMidDivide[startIndex],
-      //   curveRoad.midDivide.rightMidDivide[startIndex + 1]
-      // );
-      // rightJoin = mathUtil.getJoinLinePoint(position, rightMidDivideLine);
-      // rightJoin.x += dx;
-      // rightJoin.y += dy;
-      // curveRoad.midDivide.rightMidDivide.splice(startIndex + 1, 0, rightJoin);
-      // curveRoad.midDivide.rightMidDivideCurves = mathUtil.getCurvesByPoints(
-      //   curveRoad.midDivide.rightMidDivide
-      // );
     } else {
     } else {
       leftJoin = mathUtil.getIntersectionPoint(leftLine1, leftLine2);
       leftJoin = mathUtil.getIntersectionPoint(leftLine1, leftLine2);
       leftCurveEdge.points.splice(startIndex + 1, 0, leftJoin);
       leftCurveEdge.points.splice(startIndex + 1, 0, leftJoin);
       curveEdgeService.setCurves(leftCurveEdge);
       curveEdgeService.setCurves(leftCurveEdge);
 
 
-      // for (let i = 0; i < leftCount - 1; ++i) {
-      //   leftLine1 = mathUtil.createLine3(
-      //     line1,
-      //     curveRoad.leftLanes[i][startIndex]
-      //   );
-      //   leftLine2 = mathUtil.createLine3(
-      //     line2,
-      //     curveRoad.leftLanes[i][startIndex + 1]
-      //   );
-      //   leftJoin = mathUtil.getIntersectionPoint(leftLine1, leftLine2);
-      //   curveRoad.leftLanes[i].splice(startIndex + 1, 0, leftJoin);
-      //   curveRoad.leftLanesCurves[i] = mathUtil.getCurvesByPoints(
-      //     curveRoad.leftLanes[i]
-      //   );
-      // }
-
-      // leftLine1 = mathUtil.createLine3(
-      //   line1,
-      //   curveRoad.midDivide.leftMidDivide[startIndex]
-      // );
-      // leftLine2 = mathUtil.createLine3(
-      //   line2,
-      //   ccurveRoad.midDivide.leftMidDivide[startIndex + 1]
-      // );
-      // leftJoin = mathUtil.getIntersectionPoint(leftLine1, leftLine2);
-      // curveRoad.midDivide.leftMidDivide.splice(startIndex + 1, 0, leftJoin);
-      // curveRoad.midDivide.leftMidDivideCurves = mathUtil.getCurvesByPoints(
-      //   curveRoad.midDivide.leftMidDivide
-      // );
-
       rightJoin = mathUtil.getIntersectionPoint(rightLine1, rightLine2);
       rightJoin = mathUtil.getIntersectionPoint(rightLine1, rightLine2);
       rightCurveEdge.points.splice(startIndex + 1, 0, rightJoin);
       rightCurveEdge.points.splice(startIndex + 1, 0, rightJoin);
       curveEdgeService.setCurves(rightCurveEdge);
       curveEdgeService.setCurves(rightCurveEdge);
-
-      // for (let i = 0; i < rightCount - 1; ++i) {
-      //   rightLine1 = mathUtil.createLine3(
-      //     line1,
-      //     curveRoad.rightLanes[i][startIndex]
-      //   );
-      //   rightLine2 = mathUtil.createLine3(
-      //     line2,
-      //     curveRoad.rightLanes[i][startIndex + 1]
-      //   );
-      //   rightJoin = mathUtil.getIntersectionPoint(rightLine1, rightLine2);
-      //   curveRoad.rightLanes[i].splice(startIndex + 1, 0, rightJoin);
-      //   curveRoad.rightLanesCurves[i] = mathUtil.getCurvesByPoints(
-      //     curveRoad.rightLanes[i]
-      //   );
-      // }
-
-      // rightLine1 = mathUtil.createLine3(
-      //   line1,
-      //   curveRoad.midDivide.rightMidDivide[startIndex]
-      // );
-      // rightLine2 = mathUtil.createLine3(
-      //   line2,
-      //   ccurveRoad.midDivide.rightMidDivide[startIndex + 1]
-      // );
-      // rightJoin = mathUtil.getIntersectionPoint(rightLine1, rightLine2);
-      // curveRoad.midDivide.rightMidDivide.splice(startIndex + 1, 0, rightJoin);
-      // curveRoad.midDivide.rightMidDivideCurves = mathUtil.getCurvesByPoints(
-      //   curveRoad.midDivide.rightMidDivide
-      // );
     }
     }
     this.setCurves(curveRoad);
     this.setCurves(curveRoad);
   }
   }
@@ -298,31 +186,8 @@ export default class CurveRoadService extends RoadService {
     const rightCurveEdge = dataService.getCurveRoadEdge(curveRoad.rightEdgeId);
     const rightCurveEdge = dataService.getCurveRoadEdge(curveRoad.rightEdgeId);
     rightCurveEdge.points.splice(index, 1);
     rightCurveEdge.points.splice(index, 1);
     curveEdgeService.setCurves(rightCurveEdge);
     curveEdgeService.setCurves(rightCurveEdge);
-
-    // curveRoad.midDivide.leftMidDivide.splice(index, 1);
-    // curveRoad.midDivide.leftMidDivideCurves =
-    //   mathUtil.getCurvesByPoints(leftMidDivide);
-    // curveRoad.midDivide.rightMidDivide.splice(index, 1);
-    // curveRoad.midDivide.rightMidDivideCurves =
-    //   mathUtil.getCurvesByPoints(rightMidDivide);
-    // this.removeCPointToLanes(curveRoad, index);
   }
   }
 
 
-  // removeCPointToLanes(curveRoad, index) {
-  //   for (let i = 0; i < curveRoad.leftLanes.length; ++i) {
-  //     curveRoad.leftLanes[i].splice(index, 1);
-  //     curveRoad.leftLanesCurves[i] = mathUtil.getCurvesByPoints(
-  //       curveRoad.leftLanes[i]
-  //     );
-  //   }
-  //   for (let i = 0; i < curveRoad.rightLanes.length; ++i) {
-  //     curveRoad.rightLanes[i].splice(index, 1);
-  //     curveRoad.rightLanesCurves[i] = mathUtil.getCurvesByPoints(
-  //       curveRoad.rightLanes[i]
-  //     );
-  //   }
-  // }
-
   //单向车道
   //单向车道
   setOneWayLanes(curveRoad) {
   setOneWayLanes(curveRoad) {
     let points = curveRoad.points;
     let points = curveRoad.points;

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

@@ -854,18 +854,16 @@ export default class RoadService {
     const distance1 = mathUtil.getDistance(startJoin1, mid);
     const distance1 = mathUtil.getDistance(startJoin1, mid);
     const distance2 = mathUtil.getDistance(startJoin2, mid);
     const distance2 = mathUtil.getDistance(startJoin2, mid);
 
 
-    if (road.midDivide == null) {
-      road.midDivide = {};
-    }
+    let laneStart, laneEnd, line, join;
 
 
     if (!dir || dir == "start") {
     if (!dir || dir == "start") {
       if (distance1 > distance2) {
       if (distance1 > distance2) {
-        road.midDivide.start = {
+        laneStart = {
           x: startJoin2.x,
           x: startJoin2.x,
           y: startJoin2.y,
           y: startJoin2.y,
         };
         };
       } else {
       } else {
-        road.midDivide.start = {
+        laneStart = {
           x: startJoin1.x,
           x: startJoin1.x,
           y: startJoin1.y,
           y: startJoin1.y,
         };
         };
@@ -874,28 +872,41 @@ export default class RoadService {
       if (road.way == Constant.twoWay) {
       if (road.way == Constant.twoWay) {
         //更新车道的起点和终点,因为车道的起点和终点的位置与中间隔离栏一致
         //更新车道的起点和终点,因为车道的起点和终点的位置与中间隔离栏一致
         for (let i = 0; i < road.leftLanes.length; ++i) {
         for (let i = 0; i < road.leftLanes.length; ++i) {
-          const line = mathUtil.createLine1(
+          line = mathUtil.createLine1(
             road.leftLanes[i].start,
             road.leftLanes[i].start,
             road.leftLanes[i].end
             road.leftLanes[i].end
           );
           );
-          const join = mathUtil.getJoinLinePoint(road.midDivide.start, line);
+          join = mathUtil.getJoinLinePoint(laneStart, line);
           mathUtil.clonePoint(road.leftLanes[i].start, join);
           mathUtil.clonePoint(road.leftLanes[i].start, join);
         }
         }
         for (let i = 0; i < road.rightLanes.length; ++i) {
         for (let i = 0; i < road.rightLanes.length; ++i) {
-          const line = mathUtil.createLine1(
+          line = mathUtil.createLine1(
             road.rightLanes[i].start,
             road.rightLanes[i].start,
             road.rightLanes[i].end
             road.rightLanes[i].end
           );
           );
-          const join = mathUtil.getJoinLinePoint(road.midDivide.start, line);
+          join = mathUtil.getJoinLinePoint(laneStart, line);
           mathUtil.clonePoint(road.rightLanes[i].start, join);
           mathUtil.clonePoint(road.rightLanes[i].start, join);
         }
         }
+        line = mathUtil.createLine1(
+          road.midDivide.leftMidDivide.start,
+          road.midDivide.leftMidDivide.end
+        );
+        join = mathUtil.getJoinLinePoint(laneStart, line);
+        mathUtil.clonePoint(road.midDivide.leftMidDivide.start, join);
+
+        line = mathUtil.createLine1(
+          road.midDivide.rightMidDivide.start,
+          road.midDivide.rightMidDivide.end
+        );
+        join = mathUtil.getJoinLinePoint(laneStart, line);
+        mathUtil.clonePoint(road.midDivide.rightMidDivide.start, join);
       } else if (road.way == Constant.oneWay) {
       } else if (road.way == Constant.oneWay) {
         for (let i = 0; i < road.singleLanes.length; ++i) {
         for (let i = 0; i < road.singleLanes.length; ++i) {
           const line = mathUtil.createLine1(
           const line = mathUtil.createLine1(
             road.singleLanes[i].start,
             road.singleLanes[i].start,
             road.singleLanes[i].end
             road.singleLanes[i].end
           );
           );
-          const join = mathUtil.getJoinLinePoint(road.midDivide.start, line);
+          const join = mathUtil.getJoinLinePoint(laneStart, line);
           mathUtil.clonePoint(road.singleLanes[i].start, join);
           mathUtil.clonePoint(road.singleLanes[i].start, join);
         }
         }
       }
       }
@@ -907,12 +918,12 @@ export default class RoadService {
     const distance4 = mathUtil.getDistance(endJoin2, mid);
     const distance4 = mathUtil.getDistance(endJoin2, mid);
     if (!dir || dir == "end") {
     if (!dir || dir == "end") {
       if (distance3 > distance4) {
       if (distance3 > distance4) {
-        road.midDivide.end = {
+        laneEnd = {
           x: endJoin2.x,
           x: endJoin2.x,
           y: endJoin2.y,
           y: endJoin2.y,
         };
         };
       } else {
       } else {
-        road.midDivide.end = {
+        laneEnd = {
           x: endJoin1.x,
           x: endJoin1.x,
           y: endJoin1.y,
           y: endJoin1.y,
         };
         };
@@ -921,28 +932,41 @@ export default class RoadService {
       if (road.way == Constant.twoWay) {
       if (road.way == Constant.twoWay) {
         //更新车道的起点和终点,因为车道的起点和终点的位置与中间隔离栏一致
         //更新车道的起点和终点,因为车道的起点和终点的位置与中间隔离栏一致
         for (let i = 0; i < road.leftLanes.length; ++i) {
         for (let i = 0; i < road.leftLanes.length; ++i) {
-          const line = mathUtil.createLine1(
+          line = mathUtil.createLine1(
             road.leftLanes[i].start,
             road.leftLanes[i].start,
             road.leftLanes[i].end
             road.leftLanes[i].end
           );
           );
-          const join = mathUtil.getJoinLinePoint(road.midDivide.end, line);
+          join = mathUtil.getJoinLinePoint(laneEnd, line);
           mathUtil.clonePoint(road.leftLanes[i].end, join);
           mathUtil.clonePoint(road.leftLanes[i].end, join);
         }
         }
         for (let i = 0; i < road.rightLanes.length; ++i) {
         for (let i = 0; i < road.rightLanes.length; ++i) {
-          const line = mathUtil.createLine1(
+          line = mathUtil.createLine1(
             road.rightLanes[i].start,
             road.rightLanes[i].start,
             road.rightLanes[i].end
             road.rightLanes[i].end
           );
           );
-          const join = mathUtil.getJoinLinePoint(road.midDivide.end, line);
+          join = mathUtil.getJoinLinePoint(laneEnd, line);
           mathUtil.clonePoint(road.rightLanes[i].end, join);
           mathUtil.clonePoint(road.rightLanes[i].end, join);
         }
         }
+        line = mathUtil.createLine1(
+          road.midDivide.leftMidDivide.start,
+          road.midDivide.leftMidDivide.end
+        );
+        join = mathUtil.getJoinLinePoint(laneEnd, line);
+        mathUtil.clonePoint(road.midDivide.leftMidDivide.end, join);
+
+        line = mathUtil.createLine1(
+          road.midDivide.rightMidDivide.start,
+          road.midDivide.rightMidDivide.end
+        );
+        join = mathUtil.getJoinLinePoint(laneEnd, line);
+        mathUtil.clonePoint(road.midDivide.rightMidDivide.end, join);
       } else if (road.way == Constant.oneWay) {
       } else if (road.way == Constant.oneWay) {
         for (let i = 0; i < road.singleLanes.length; ++i) {
         for (let i = 0; i < road.singleLanes.length; ++i) {
           const line = mathUtil.createLine1(
           const line = mathUtil.createLine1(
             road.singleLanes[i].start,
             road.singleLanes[i].start,
             road.singleLanes[i].end
             road.singleLanes[i].end
           );
           );
-          const join = mathUtil.getJoinLinePoint(road.midDivide.end, line);
+          const join = mathUtil.getJoinLinePoint(laneEnd, line);
           mathUtil.clonePoint(road.singleLanes[i].end, join);
           mathUtil.clonePoint(road.singleLanes[i].end, join);
         }
         }
       }
       }
@@ -999,6 +1023,14 @@ export default class RoadService {
     let endPoint = dataService.getRoadPoint(road.endId);
     let endPoint = dataService.getRoadPoint(road.endId);
     let leftEdge = dataService.getRoadEdge(road.leftEdgeId);
     let leftEdge = dataService.getRoadEdge(road.leftEdgeId);
     let rightEdge = dataService.getRoadEdge(road.rightEdgeId);
     let rightEdge = dataService.getRoadEdge(road.rightEdgeId);
+
+    if (!road.midDivide) {
+      road.midDivide = {
+        leftMidDivide: {},
+        rightMidDivide: {},
+      };
+    }
+
     const leftCount = road.leftDrivewayCount;
     const leftCount = road.leftDrivewayCount;
     const rightCount = road.rightDrivewayCount;
     const rightCount = road.rightDrivewayCount;
     const leftRatio =
     const leftRatio =
@@ -1034,12 +1066,20 @@ export default class RoadService {
           road.leftLanes[i].start = {};
           road.leftLanes[i].start = {};
           road.leftLanes[i].start.x = startPoint.x + middx1 + leftdx1 * (i + 1);
           road.leftLanes[i].start.x = startPoint.x + middx1 + leftdx1 * (i + 1);
           road.leftLanes[i].start.y = startPoint.y + middy1 + leftdy1 * (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) {
         if (dir2 == "end" || !dir2) {
           road.leftLanes[i].end = {};
           road.leftLanes[i].end = {};
           road.leftLanes[i].end.x = endPoint.x + middx2 + leftdx2 * (i + 1);
           road.leftLanes[i].end.x = endPoint.x + middx2 + leftdx2 * (i + 1);
           road.leftLanes[i].end.y = endPoint.y + middy2 + leftdy2 * (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;
         }
         }
       }
       }
       road.leftLanes.splice(leftCount - 1);
       road.leftLanes.splice(leftCount - 1);
@@ -1061,12 +1101,20 @@ export default class RoadService {
             startPoint.x + middx1 + rightdx1 * (i + 1);
             startPoint.x + middx1 + rightdx1 * (i + 1);
           road.rightLanes[i].start.y =
           road.rightLanes[i].start.y =
             startPoint.y + middy1 + rightdy1 * (i + 1);
             startPoint.y + middy1 + rightdy1 * (i + 1);
+
+          road.midDivide.rightMidDivide.start = {};
+          road.midDivide.rightMidDivide.start.x = startPoint.x + middx1;
+          road.midDivide.rightMidDivide.start.y = startPoint.y + middy1;
         }
         }
 
 
         if (dir2 == "end" || !dir2) {
         if (dir2 == "end" || !dir2) {
           road.rightLanes[i].end = {};
           road.rightLanes[i].end = {};
           road.rightLanes[i].end.x = endPoint.x + middx2 + rightdx2 * (i + 1);
           road.rightLanes[i].end.x = endPoint.x + middx2 + rightdx2 * (i + 1);
           road.rightLanes[i].end.y = endPoint.y + middy2 + rightdy2 * (i + 1);
           road.rightLanes[i].end.y = endPoint.y + middy2 + rightdy2 * (i + 1);
+
+          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);
       road.rightLanes.splice(rightCount - 1);