Переглянути джерело

Merge branch 'dev' of http://192.168.0.115:3000/bill/traffic-laser into dev

bill 1 рік тому
батько
коміт
fd0faa8bef

+ 6 - 6
src/graphic/Layer.js

@@ -222,12 +222,12 @@ export default class Layer {
               }
               let leftEdge = dataService.getRoadEdge(road.leftEdgeId);
               let rightEdge = dataService.getRoadEdge(road.rightEdgeId);
-              if (leftEdge.roadSide) {
-                leftEdge.initCurveRoadSide();
-              }
-              if (rightEdge.roadSide) {
-                rightEdge.initCurveRoadSide();
-              }
+              // if (leftEdge.roadSide) {
+              //   leftEdge.initCurveRoadSide();
+              // }
+              // if (rightEdge.roadSide) {
+              //   rightEdge.initCurveRoadSide();
+              // }
             }
           }
 

+ 161 - 299
src/graphic/Service/RoadService.js

@@ -26,31 +26,13 @@ export default class RoadService {
 
     let edgePoints;
     if (road.way == Constant.oneWay) {
-      edgePoints = mathUtil.RectangleVertex(
-        startPoint,
-        endPoint,
-        road.singleRoadWidth
-      );
+      edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, road.singleRoadWidth);
     } else {
-      edgePoints = mathUtil.RectangleVertex(
-        startPoint,
-        endPoint,
-        road.leftWidth + road.rightWidth + road.midDivide.midDivideWidth
-      );
+      edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, road.leftWidth + road.rightWidth + road.midDivide.midDivideWidth);
     }
-    let leftEdge = edgeService.create(
-      edgePoints.leftEdgeStart,
-      edgePoints.leftEdgeEnd,
-      null,
-      vectorId
-    );
-
-    let rightEdge = edgeService.create(
-      edgePoints.rightEdgeStart,
-      edgePoints.rightEdgeEnd,
-      null,
-      vectorId
-    );
+    let leftEdge = edgeService.create(edgePoints.leftEdgeStart, edgePoints.leftEdgeEnd, null, vectorId);
+
+    let rightEdge = edgeService.create(edgePoints.rightEdgeStart, edgePoints.rightEdgeEnd, null, vectorId);
 
     road.setLeftEdge(leftEdge.vectorId);
     road.setRightEdge(rightEdge.vectorId);
@@ -99,31 +81,13 @@ export default class RoadService {
 
     let edgePoints;
     if (newRoad.way == Constant.oneWay) {
-      edgePoints = mathUtil.RectangleVertex(
-        newStartPoint,
-        newEndPoint,
-        road.singleRoadWidth
-      );
+      edgePoints = mathUtil.RectangleVertex(newStartPoint, newEndPoint, road.singleRoadWidth);
     } else {
-      edgePoints = mathUtil.RectangleVertex(
-        newStartPoint,
-        newEndPoint,
-        road.leftWidth + road.rightWidth + road.midDivide.midDivideWidth
-      );
+      edgePoints = mathUtil.RectangleVertex(newStartPoint, newEndPoint, road.leftWidth + road.rightWidth + road.midDivide.midDivideWidth);
     }
-    let leftEdge = edgeService.create(
-      edgePoints.leftEdgeStart,
-      edgePoints.leftEdgeEnd,
-      null,
-      vectorId
-    );
-
-    let rightEdge = edgeService.create(
-      edgePoints.rightEdgeStart,
-      edgePoints.rightEdgeEnd,
-      null,
-      vectorId
-    );
+    let leftEdge = edgeService.create(edgePoints.leftEdgeStart, edgePoints.leftEdgeEnd, null, vectorId);
+
+    let rightEdge = edgeService.create(edgePoints.rightEdgeStart, edgePoints.rightEdgeEnd, null, vectorId);
 
     newRoad.setLeftEdge(leftEdge.vectorId);
     newRoad.setRightEdge(rightEdge.vectorId);
@@ -151,9 +115,11 @@ export default class RoadService {
     newRoad.rightDrivewayCount = road.rightDrivewayCount;
     if (oldLeftEdge.roadSide) {
       leftEdge.initRoadSide();
+      leftEdge.setRoadSideWidth(oldLeftEdge.roadSide.width);
     }
     if (oldRightEdge.roadSide) {
       rightEdge.initRoadSide();
+      rightEdge.setRoadSideWidth(oldLeftEdge.roadSide.width);
     }
     this.setLanes(newRoad.vectorId);
     this.initRoadWidthTipsPos(newRoad);
@@ -174,10 +140,7 @@ export default class RoadService {
     const startPoint = dataService.getRoadPoint(road.startId);
     const endPoint = dataService.getRoadPoint(road.endId);
     const point = dataService.getRoadPoint(pointId);
-    if (
-      mathUtil.getDistance(startPoint, point) < Constant.minAdsorbPix ||
-      mathUtil.getDistance(endPoint, point) < Constant.minAdsorbPix
-    ) {
+    if (mathUtil.getDistance(startPoint, point) < Constant.minAdsorbPix || mathUtil.getDistance(endPoint, point) < Constant.minAdsorbPix) {
     }
 
     let leftEdge = dataService.getRoadEdge(road.leftEdgeId);
@@ -235,11 +198,7 @@ export default class RoadService {
       crossPointService.replaceEdgeId(cpt, road.leftEdgeId, newRoad.leftEdgeId);
 
       cpt = dataService.getCrossPointForEdgeId(road.rightEdgeId, "end");
-      crossPointService.replaceEdgeId(
-        cpt,
-        road.rightEdgeId,
-        newRoad.rightEdgeId
-      );
+      crossPointService.replaceEdgeId(cpt, road.rightEdgeId, newRoad.rightEdgeId);
 
       let newRoadLeftEdge = dataService.getRoadEdge(newRoad.leftEdgeId);
       mathUtil.clonePoint(newRoadLeftEdge.end, oldLeftEdgeEndPoint);
@@ -256,11 +215,7 @@ export default class RoadService {
       crossPointService.replaceEdgeId(cpt, road.leftEdgeId, newRoad.leftEdgeId);
 
       cpt = dataService.getCrossPointForEdgeId(road.rightEdgeId, "start");
-      crossPointService.replaceEdgeId(
-        cpt,
-        road.rightEdgeId,
-        newRoad.rightEdgeId
-      );
+      crossPointService.replaceEdgeId(cpt, road.rightEdgeId, newRoad.rightEdgeId);
 
       let newRoadLeftEdge = dataService.getRoadEdge(newRoad.leftEdgeId);
       mathUtil.clonePoint(newRoadLeftEdge.start, oldLeftEdgeStartPoint);
@@ -323,12 +278,7 @@ export default class RoadService {
     const road1 = dataService.getRoad(id1);
     const road2 = dataService.getRoad(id2);
 
-    if (
-      road1 == null ||
-      road2 == null ||
-      typeof road1 === "undefined" ||
-      typeof road2 === "undefined"
-    ) {
+    if (road1 == null || road2 == null || typeof road1 === "undefined" || typeof road2 === "undefined") {
       return null;
     }
 
@@ -379,12 +329,7 @@ export default class RoadService {
     const road1 = dataService.getRoad(id1);
     const road2 = dataService.getRoad(id2);
 
-    if (
-      road1 == null ||
-      road2 == null ||
-      typeof road1 === "undefined" ||
-      typeof road2 === "undefined"
-    ) {
+    if (road1 == null || road2 == null || typeof road1 === "undefined" || typeof road2 === "undefined") {
       return null;
     }
 
@@ -439,12 +384,7 @@ export default class RoadService {
     const road1 = dataService.getRoad(id1);
     const road2 = dataService.getRoad(id2);
 
-    if (
-      road1 == null ||
-      road2 == null ||
-      typeof road1 === "undefined" ||
-      typeof road2 === "undefined"
-    ) {
+    if (road1 == null || road2 == null || typeof road1 === "undefined" || typeof road2 === "undefined") {
       return null;
     }
 
@@ -483,9 +423,7 @@ export default class RoadService {
       _start1.y = start1.y + end2.y - end1.y;
       return mathUtil.Angle(end2, _start1, start2);
     } else {
-      console.error(
-        "RoadService.AngleForRoad3************************************1"
-      );
+      console.error("RoadService.AngleForRoad3************************************1");
       return null;
     }
   }
@@ -563,9 +501,7 @@ export default class RoadService {
 
       return result;
     } else {
-      console.error(
-        "roadIdForMinAngle*********************************************************"
-      );
+      console.error("roadIdForMinAngle*********************************************************");
       return null;
     }
   }
@@ -574,12 +510,7 @@ export default class RoadService {
     let road1 = dataService.getRoad(roadId1);
     let road2 = dataService.getRoad(roadId2);
 
-    if (
-      road1.startId == road2.startId ||
-      road1.startId == road2.endId ||
-      road1.endId == road2.startId ||
-      road1.endId == road2.endId
-    ) {
+    if (road1.startId == road2.startId || road1.startId == road2.endId || road1.endId == road2.startId || road1.endId == road2.endId) {
       return true;
     } else {
       return false;
@@ -601,9 +532,7 @@ export default class RoadService {
     } else if (road.endId == pointId) {
       return "end";
     } else {
-      console.error(
-        "RoadService.getDirction*******************************************************************************************"
-      );
+      console.error("RoadService.getDirction*******************************************************************************************");
       return null;
     }
   }
@@ -617,10 +546,7 @@ export default class RoadService {
       return;
     } else if (Object.keys(parent).length > 2) {
       const info = this.roadIdForMinAngle(pointId, roadId);
-      edgeService.updateSingleEdgeForTwoRoad(
-        info.min0.roadId,
-        info.min1.roadId
-      );
+      edgeService.updateSingleEdgeForTwoRoad(info.min0.roadId, info.min1.roadId);
     }
 
     // 第一步先断开链接
@@ -657,10 +583,7 @@ export default class RoadService {
 
   setRoadInfo(vectorInfo) {
     const road = dataService.getRoad(vectorInfo.roadId);
-    if (
-      vectorInfo.hasOwnProperty("edgeId") &&
-      vectorInfo.hasOwnProperty("dir")
-    ) {
+    if (vectorInfo.hasOwnProperty("edgeId") && vectorInfo.hasOwnProperty("dir")) {
       if (vectorInfo.dir == "left") {
         road.leftEdgeId = vectorInfo.edgeId;
       } else if (vectorInfo.dir == "right") {
@@ -668,10 +591,7 @@ export default class RoadService {
       }
     }
 
-    if (
-      vectorInfo.hasOwnProperty("pointId") &&
-      vectorInfo.hasOwnProperty("dir")
-    ) {
+    if (vectorInfo.hasOwnProperty("pointId") && vectorInfo.hasOwnProperty("dir")) {
       if (vectorInfo.dir == "start") {
         road.startId = vectorInfo.pointId;
       } else if (vectorInfo.dir == "end") {
@@ -684,12 +604,7 @@ export default class RoadService {
     let road1 = dataService.getRoad(id1);
     let road2 = dataService.getRoad(id2);
 
-    if (
-      road1 == null ||
-      road2 == null ||
-      typeof road1 == "undefined" ||
-      typeof road2 == "undefined"
-    ) {
+    if (road1 == null || road2 == null || typeof road1 == "undefined" || typeof road2 == "undefined") {
       return null;
     }
 
@@ -812,9 +727,7 @@ export default class RoadService {
 
       return result;
     } else {
-      console.error(
-        "roadIdForMinAngle*********************************************************"
-      );
+      console.error("roadIdForMinAngle*********************************************************");
       return null;
     }
   }
@@ -826,9 +739,7 @@ export default class RoadService {
     } else if (road.endId == pointId) {
       return "end";
     } else {
-      console.error(
-        "getDirction*******************************************************************************************"
-      );
+      console.error("getDirction*******************************************************************************************");
       return null;
     }
   }
@@ -906,9 +817,7 @@ export default class RoadService {
 
       return result;
     } else {
-      console.error(
-        "roadIdForMinAngle*********************************************************"
-      );
+      console.error("roadIdForMinAngle*********************************************************");
       return null;
     }
   }
@@ -986,40 +895,25 @@ export default class RoadService {
       if (road.way == Constant.twoWay) {
         //更新车道的起点和终点,因为车道的起点和终点的位置与中间隔离栏一致
         for (let i = 0; i < road.leftLanes.length; ++i) {
-          line = mathUtil.createLine1(
-            road.leftLanes[i].start,
-            road.leftLanes[i].end
-          );
+          line = mathUtil.createLine1(road.leftLanes[i].start, road.leftLanes[i].end);
           join = mathUtil.getJoinLinePoint(laneStart, line);
           mathUtil.clonePoint(road.leftLanes[i].start, join);
         }
         for (let i = 0; i < road.rightLanes.length; ++i) {
-          line = mathUtil.createLine1(
-            road.rightLanes[i].start,
-            road.rightLanes[i].end
-          );
+          line = mathUtil.createLine1(road.rightLanes[i].start, road.rightLanes[i].end);
           join = mathUtil.getJoinLinePoint(laneStart, line);
           mathUtil.clonePoint(road.rightLanes[i].start, join);
         }
-        line = mathUtil.createLine1(
-          road.midDivide.leftMidDivide.start,
-          road.midDivide.leftMidDivide.end
-        );
+        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
-        );
+        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) {
         for (let i = 0; i < road.singleLanes.length; ++i) {
-          const line = mathUtil.createLine1(
-            road.singleLanes[i].start,
-            road.singleLanes[i].end
-          );
+          const line = mathUtil.createLine1(road.singleLanes[i].start, road.singleLanes[i].end);
           const join = mathUtil.getJoinLinePoint(laneStart, line);
           mathUtil.clonePoint(road.singleLanes[i].start, join);
         }
@@ -1046,40 +940,25 @@ export default class RoadService {
       if (road.way == Constant.twoWay) {
         //更新车道的起点和终点,因为车道的起点和终点的位置与中间隔离栏一致
         for (let i = 0; i < road.leftLanes.length; ++i) {
-          line = mathUtil.createLine1(
-            road.leftLanes[i].start,
-            road.leftLanes[i].end
-          );
+          line = mathUtil.createLine1(road.leftLanes[i].start, road.leftLanes[i].end);
           join = mathUtil.getJoinLinePoint(laneEnd, line);
           mathUtil.clonePoint(road.leftLanes[i].end, join);
         }
         for (let i = 0; i < road.rightLanes.length; ++i) {
-          line = mathUtil.createLine1(
-            road.rightLanes[i].start,
-            road.rightLanes[i].end
-          );
+          line = mathUtil.createLine1(road.rightLanes[i].start, road.rightLanes[i].end);
           join = mathUtil.getJoinLinePoint(laneEnd, line);
           mathUtil.clonePoint(road.rightLanes[i].end, join);
         }
-        line = mathUtil.createLine1(
-          road.midDivide.leftMidDivide.start,
-          road.midDivide.leftMidDivide.end
-        );
+        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
-        );
+        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) {
         for (let i = 0; i < road.singleLanes.length; ++i) {
-          const line = mathUtil.createLine1(
-            road.singleLanes[i].start,
-            road.singleLanes[i].end
-          );
+          const line = mathUtil.createLine1(road.singleLanes[i].start, road.singleLanes[i].end);
           const join = mathUtil.getJoinLinePoint(laneEnd, line);
           mathUtil.clonePoint(road.singleLanes[i].end, join);
         }
@@ -1150,10 +1029,8 @@ export default class RoadService {
 
     const leftCount = road.leftDrivewayCount;
     const rightCount = road.rightDrivewayCount;
-    const leftRatio =
-      road.leftWidth / (road.leftWidth + road.midDivide.midDivideWidth / 2);
-    const rightRatio =
-      road.rightWidth / (road.rightWidth + road.midDivide.midDivideWidth / 2);
+    const leftRatio = road.leftWidth / (road.leftWidth + road.midDivide.midDivideWidth / 2);
+    const rightRatio = road.rightWidth / (road.rightWidth + road.midDivide.midDivideWidth / 2);
 
     let leftdx1 = ((leftEdge.start.x - startPoint.x) * leftRatio) / leftCount;
     let leftdy1 = ((leftEdge.start.y - startPoint.y) * leftRatio) / leftCount;
@@ -1161,10 +1038,8 @@ export default class RoadService {
     let leftdx2 = ((leftEdge.end.x - endPoint.x) * leftRatio) / leftCount;
     let leftdy2 = ((leftEdge.end.y - endPoint.y) * leftRatio) / leftCount;
 
-    let rightdx1 =
-      ((rightEdge.start.x - startPoint.x) * rightRatio) / rightCount;
-    let rightdy1 =
-      ((rightEdge.start.y - startPoint.y) * rightRatio) / rightCount;
+    let rightdx1 = ((rightEdge.start.x - startPoint.x) * rightRatio) / rightCount;
+    let rightdy1 = ((rightEdge.start.y - startPoint.y) * rightRatio) / rightCount;
 
     let rightdx2 = ((rightEdge.end.x - endPoint.x) * rightRatio) / rightCount;
     let rightdy2 = ((rightEdge.end.y - endPoint.y) * rightRatio) / rightCount;
@@ -1225,10 +1100,8 @@ export default class RoadService {
 
         if (dir2 == "start" || !dir2) {
           road.rightLanes[i].start = {};
-          road.rightLanes[i].start.x =
-            startPoint.x + middx1 + rightdx1 * (i + 1);
-          road.rightLanes[i].start.y =
-            startPoint.y + middy1 + rightdy1 * (i + 1);
+          road.rightLanes[i].start.x = startPoint.x + middx1 + rightdx1 * (i + 1);
+          road.rightLanes[i].start.y = startPoint.y + middy1 + rightdy1 * (i + 1);
 
           road.midDivide.rightMidDivide.start = {};
           road.midDivide.rightMidDivide.start.x = startPoint.x + middx1;
@@ -1288,19 +1161,7 @@ export default class RoadService {
   //需要考虑车道个数是0(左或者右)的情况
   //单向车道不考虑dir,即:均匀的增加或者删除车道
   updateForAddSubtractLanesCount(roadId, newCount, dir) {
-    let dx1,
-      dy1,
-      dx2,
-      dy2,
-      oldCount,
-      edgeStartPosition,
-      edgeEndPosition,
-      leftRatio,
-      rightRatio,
-      middx1,
-      middy1,
-      middx2,
-      middy2;
+    let dx1, dy1, dx2, dy2, oldCount, edgeStartPosition, edgeEndPosition, leftRatio, rightRatio, middx1, middy1, middx2, middy2;
     let road = dataService.getRoad(roadId);
 
     if (newCount < 1) {
@@ -1313,10 +1174,8 @@ export default class RoadService {
     let rightEdge = dataService.getRoadEdge(road.rightEdgeId);
 
     if (road.way == Constant.twoWay) {
-      leftRatio =
-        road.leftWidth / (road.leftWidth + road.midDivide.midDivideWidth / 2);
-      rightRatio =
-        road.rightWidth / (road.rightWidth + road.midDivide.midDivideWidth / 2);
+      leftRatio = road.leftWidth / (road.leftWidth + road.midDivide.midDivideWidth / 2);
+      rightRatio = road.rightWidth / (road.rightWidth + road.midDivide.midDivideWidth / 2);
       if (dir == "left") {
         oldCount = road.leftDrivewayCount;
         if (oldCount != 0) {
@@ -1382,18 +1241,10 @@ export default class RoadService {
       let line = this.getMidLine(road);
       if (dir == "left") {
         let join = mathUtil.getJoinLinePoint(leftEdge.start, line);
-        road.setWidth(
-          mathUtil.getDistance(leftEdge.start, join) -
-            road.midDivide.midDivideWidth / 2,
-          dir
-        );
+        road.setWidth(mathUtil.getDistance(leftEdge.start, join) - road.midDivide.midDivideWidth / 2, dir);
       } else if (dir == "right") {
         let join = mathUtil.getJoinLinePoint(rightEdge.start, line);
-        road.setWidth(
-          mathUtil.getDistance(rightEdge.start, join) -
-            road.midDivide.midDivideWidth / 2,
-          dir
-        );
+        road.setWidth(mathUtil.getDistance(rightEdge.start, join) - road.midDivide.midDivideWidth / 2, dir);
       }
     } else if (road.way == Constant.oneWay) {
       oldCount = road.singleRoadDrivewayCount;
@@ -1459,50 +1310,26 @@ export default class RoadService {
       road.setWidth(newWidth * 2);
     } else if (road.way == Constant.twoWay) {
       if (dir == "left") {
-        edgePoints = mathUtil.RectangleVertex(
-          startPoint,
-          endPoint,
-          newWidth + road.midDivide.midDivideWidth / 2
-        );
+        edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, newWidth + road.midDivide.midDivideWidth / 2);
         mathUtil.clonePoint(leftEdge.start, edgePoints.leftEdgeStart);
         mathUtil.clonePoint(leftEdge.end, edgePoints.leftEdgeEnd);
         road.setWidth(newWidth, dir);
       } else if (dir == "right") {
-        edgePoints = mathUtil.RectangleVertex(
-          startPoint,
-          endPoint,
-          newWidth + road.midDivide.midDivideWidth / 2
-        );
+        edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, newWidth + road.midDivide.midDivideWidth / 2);
         mathUtil.clonePoint(rightEdge.start, edgePoints.rightEdgeStart);
         mathUtil.clonePoint(rightEdge.end, edgePoints.rightEdgeEnd);
         road.setWidth(newWidth, dir);
       }
       //左右两边的edge同时变宽或者变窄
       else {
-        edgePoints = mathUtil.RectangleVertex(
-          startPoint,
-          endPoint,
-          (newWidth * road.leftWidth) / (road.leftWidth + road.rightWidth) +
-            road.midDivide.midDivideWidth / 2
-        );
+        edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, (newWidth * road.leftWidth) / (road.leftWidth + road.rightWidth) + road.midDivide.midDivideWidth / 2);
         mathUtil.clonePoint(leftEdge.start, edgePoints.leftEdgeStart);
         mathUtil.clonePoint(leftEdge.end, edgePoints.leftEdgeEnd);
-        road.setWidth(
-          (newWidth * road.leftWidth) / (road.leftWidth + road.rightWidth),
-          "left"
-        );
-        edgePoints = mathUtil.RectangleVertex(
-          startPoint,
-          endPoint,
-          (newWidth * road.rightWidth) / (road.leftWidth + road.rightWidth) +
-            road.midDivide.midDivideWidth / 2
-        );
+        road.setWidth((newWidth * road.leftWidth) / (road.leftWidth + road.rightWidth), "left");
+        edgePoints = mathUtil.RectangleVertex(startPoint, endPoint, (newWidth * road.rightWidth) / (road.leftWidth + road.rightWidth) + road.midDivide.midDivideWidth / 2);
         mathUtil.clonePoint(rightEdge.start, edgePoints.rightEdgeStart);
         mathUtil.clonePoint(rightEdge.end, edgePoints.rightEdgeEnd);
-        road.setWidth(
-          (newWidth * road.rightWidth) / (road.leftWidth + road.rightWidth),
-          "right"
-        );
+        road.setWidth((newWidth * road.rightWidth) / (road.leftWidth + road.rightWidth), "right");
       }
     }
 
@@ -1524,46 +1351,50 @@ export default class RoadService {
     rightLine.setWeight(rightEdge.getWeight());
     if (road.way == Constant.oneWay) {
       for (let i = 0; i < road.singleLanes.length; ++i) {
-        let laneLine = lineService.create(
-          road.singleLanes[i].start,
-          road.singleLanes[i].end
-        );
+        let laneLine = lineService.create(road.singleLanes[i].start, road.singleLanes[i].end);
         laneLine.setStyle(VectorStyle.SingleDashedLine);
       }
     } else if (road.way == Constant.twoWay) {
       for (let i = 0; i < road.leftLanes.length; ++i) {
-        let laneLine = lineService.create(
-          road.leftLanes[i].start,
-          road.leftLanes[i].end
-        );
+        let laneLine = lineService.create(road.leftLanes[i].start, road.leftLanes[i].end);
         laneLine.setStyle(VectorStyle.SingleDashedLine);
       }
       for (let i = 0; i < road.rightLanes.length; ++i) {
-        let laneLine = lineService.create(
-          road.rightLanes[i].start,
-          road.rightLanes[i].end
-        );
+        let laneLine = lineService.create(road.rightLanes[i].start, road.rightLanes[i].end);
         laneLine.setStyle(VectorStyle.SingleDashedLine);
       }
-      lineService.create(
-        road.midDivide.leftMidDivide.start,
-        road.midDivide.leftMidDivide.end
-      );
-      lineService.create(
-        road.midDivide.rightMidDivide.start,
-        road.midDivide.rightMidDivide.end
-      );
+      lineService.create(road.midDivide.leftMidDivide.start, road.midDivide.leftMidDivide.end);
+      lineService.create(road.midDivide.rightMidDivide.start, road.midDivide.rightMidDivide.end);
     }
   }
 
   initRoadWidthTipsPos(road) {
     let leftEdge = dataService.getRoadEdge(road.leftEdgeId);
     let rightEdge = dataService.getRoadEdge(road.rightEdgeId);
-    let leftEdgePoint = mathUtil.getLinePointPos(leftEdge.start, leftEdge.end);
-    let rightEdgePoint = mathUtil.getLinePointPos(
-      rightEdge.start,
-      rightEdge.end
-    );
+    // let leftEdgePoint = mathUtil.getLinePointPos(leftEdge.start, leftEdge.end);
+
+    let roadStartPoint = dataService.getRoadPoint(road.startId);
+    let roadEndPoint = dataService.getRoadPoint(road.endId);
+    let roadInfo = {
+      start: {
+        x: roadStartPoint.x,
+        y: roadStartPoint.y,
+      },
+      end: {
+        x: roadEndPoint.x,
+        y: roadEndPoint.y,
+      },
+    };
+
+    // let roadLine = mathUtil.createLine1(road.startId, road.endId);
+    let roadLineCrossPoint = mathUtil.getLinePointPos(roadInfo.start, roadInfo.end);
+
+    let leftEdgeLine = mathUtil.createLine1(leftEdge.start, leftEdge.end);
+    let rightEdgeLine = mathUtil.createLine1(rightEdge.start, rightEdge.end);
+    let leftEdgePoint = mathUtil.getJoinLinePoint(roadLineCrossPoint, leftEdgeLine);
+    let rightEdgePoint = mathUtil.getJoinLinePoint(roadLineCrossPoint, rightEdgeLine);
+
+    // let rightEdgePoint = mathUtil.getLinePointPos(rightEdge.start, rightEdge.end);
     let edgeLine = mathUtil.createLine1(leftEdgePoint, rightEdgePoint);
     let roadWidthTipsPos = [];
     if (road.way == Constant.oneWay) {
@@ -1572,76 +1403,97 @@ export default class RoadService {
         //单向多车道
         let crossList = [];
         for (let i = 0; i < road.singleLanes.length; i++) {
-          let crossLine = mathUtil.createLine1(
-            road.singleLanes[i].start,
-            road.singleLanes[i].end
-          );
-          let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
-          crossList.push(crossPoint);
+          let crossLine = mathUtil.createLine1(road.singleLanes[i].start, road.singleLanes[i].end);
+          // let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
+          // crossList.push(crossPoint);
+          crossList.push(crossLine);
         }
         for (let i = 0; i < crossList.length; i++) {
           if (i == 0) {
             //第一个位置
-            roadWidthTipsPos.push({ start: rightEdgePoint, end: crossList[i] });
+            // roadWidthTipsPos.push({ start: rightEdgePoint, end: crossList[i] });
+            roadWidthTipsPos.push({ start: rightEdgePoint, end: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]) });
           } else {
             //以此类推
+
+            let middleEdgePoint1 = mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i - 1]);
+            let middleEdgePoint2 = mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]);
+            // roadWidthTipsPos.push({
+            //   start: crossList[i - 1],
+            //   end: crossList[i],
+            // });
+            console.error(middleEdgePoint1);
             roadWidthTipsPos.push({
-              start: crossList[i - 1],
-              end: crossList[i],
+              start: middleEdgePoint1,
+              end: middleEdgePoint2,
             });
           }
         }
         //最后一个位置
+        // roadWidthTipsPos.push({
+        //   start: crossList[crossList.length - 1],
+        //   end: leftEdgePoint,
+        // });
+        let a = mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[crossList.length - 1]);
         roadWidthTipsPos.push({
-          start: crossList[crossList.length - 1],
+          start: a,
           end: leftEdgePoint,
         });
         road.setRoadWidthTipsPos(roadWidthTipsPos);
       } else {
-          //单向单车道
+        //单向单车道
+
         roadWidthTipsPos.push({ start: leftEdgePoint, end: rightEdgePoint });
         road.setRoadWidthTipsPos(roadWidthTipsPos);
       }
     } else if (road.way == Constant.twoWay) {
       //双单车道
-      let leftMidDividePoint = mathUtil.getLinePointPos(
-        road.midDivide.leftMidDivide.start,
-        road.midDivide.leftMidDivide.end
-      );
-      let rightMidDividePoint = mathUtil.getLinePointPos(
-        road.midDivide.rightMidDivide.start,
-        road.midDivide.rightMidDivide.end
-      );
+      // let leftMidDividePoint = mathUtil.getLinePointPos(road.midDivide.leftMidDivide.start, road.midDivide.leftMidDivide.end);
+      // let rightMidDividePoint = mathUtil.getLinePointPos(road.midDivide.rightMidDivide.start, road.midDivide.rightMidDivide.end);
+
+      let leftMidDivideLine = mathUtil.createLine1(road.midDivide.leftMidDivide.start, road.midDivide.leftMidDivide.end);
+      let rightMidDividePointLine = mathUtil.createLine1(road.midDivide.rightMidDivide.start, road.midDivide.rightMidDivide.end);
+      let leftMidDividePoint = mathUtil.getJoinLinePoint(roadLineCrossPoint, leftMidDivideLine);
+      let rightMidDividePoint = mathUtil.getJoinLinePoint(roadLineCrossPoint, rightMidDividePointLine);
 
       // leftLanes,rightLanes
       if (road.leftLanes.length) {
         let crossList = [];
         for (let i = 0; i < road.leftLanes.length; i++) {
-          let crossLine = mathUtil.createLine1(
-            road.leftLanes[i].start,
-            road.leftLanes[i].end
-          );
-          let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
-          crossList.push(crossPoint);
+          let crossLine = mathUtil.createLine1(road.leftLanes[i].start, road.leftLanes[i].end);
+          // let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
+          // crossList.push(crossPoint);
+
+          crossList.push(crossLine);
         }
         for (let i = 0; i < crossList.length; i++) {
           if (i == 0) {
             //第一个位置
-            roadWidthTipsPos.push({
-              start: leftMidDividePoint,
-              end: crossList[i],
-            });
+            // roadWidthTipsPos.push({
+            //   start: leftMidDividePoint,
+            //   end: crossList[i],
+            // });
+
+            roadWidthTipsPos.push({ start: leftMidDividePoint, end: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]) });
           } else {
             //以此类推
+            // roadWidthTipsPos.push({
+            //   start: crossList[i - 1],
+            //   end: crossList[i],
+            // });
             roadWidthTipsPos.push({
-              start: crossList[i - 1],
-              end: crossList[i],
+              start: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i - 1]),
+              end: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]),
             });
           }
         }
         //最后一个位置
+        // roadWidthTipsPos.push({
+        //   start: crossList[crossList.length - 1],
+        //   end: leftEdgePoint,
+        // });
         roadWidthTipsPos.push({
-          start: crossList[crossList.length - 1],
+          start: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[crossList.length - 1]),
           end: leftEdgePoint,
         });
         road.setRoadWidthTipsPos(roadWidthTipsPos);
@@ -1655,33 +1507,43 @@ export default class RoadService {
       if (road.rightLanes.length) {
         let crossList = [];
         for (let i = 0; i < road.rightLanes.length; i++) {
-          let crossLine = mathUtil.createLine1(
-            road.rightLanes[i].start,
-            road.rightLanes[i].end
-          );
-          let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
-          crossList.push(crossPoint);
+          let crossLine = mathUtil.createLine1(road.rightLanes[i].start, road.rightLanes[i].end);
+          // let crossPoint = mathUtil.getIntersectionPoint(edgeLine, crossLine);
+          // crossList.push(crossPoint);
+          crossList.push(crossLine);
         }
         for (let i = 0; i < crossList.length; i++) {
           if (i == 0) {
             //第一个位置
-            roadWidthTipsPos.push({
-              start: rightMidDividePoint,
-              end: crossList[i],
-            });
+            // roadWidthTipsPos.push({
+            //   start: rightMidDividePoint,
+            //   end: crossList[i],
+            // });
+
+            roadWidthTipsPos.push({ start: rightMidDividePoint, end: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]) });
           } else {
             //以此类推
+            // roadWidthTipsPos.push({
+            //   start: crossList[i - 1],
+            //   end: crossList[i],
+            // });
+
             roadWidthTipsPos.push({
-              start: crossList[i - 1],
-              end: crossList[i],
+              start: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i - 1]),
+              end: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[i]),
             });
           }
         }
         //最后一个位置
+        // roadWidthTipsPos.push({
+        //   start: crossList[crossList.length - 1],
+        //   end: rightEdgePoint,
+        // });
         roadWidthTipsPos.push({
-          start: crossList[crossList.length - 1],
+          start: mathUtil.getJoinLinePoint(roadLineCrossPoint, crossList[crossList.length - 1]),
           end: rightEdgePoint,
         });
+
         road.setRoadWidthTipsPos(roadWidthTipsPos);
       } else {
         roadWidthTipsPos.push({

+ 3 - 1
src/store/sync.ts

@@ -248,12 +248,14 @@ const syncSceneStore = () => {
       tables: tables.value,
     }),
     (data) => {
+      console.error("收到数据源更新")
       updateSceneStore(data);
     },
-    { deep: true }
+    { deep: true, flush: 'sync' }
   );
 };
 
+
 loadStore().catch((e) => {
   console.error(e);
   alert("场景数据加载失败");

+ 2 - 0
src/store/tables.ts

@@ -1,3 +1,5 @@
 import { ref } from "vue";
 
 export const tables = ref({});
+
+(window as any).tables = tables

+ 18 - 18
src/views/tables/author/author-one.vue

@@ -43,37 +43,37 @@
       <div class="item" style="margin-top: 100px">
         <span>受委托人姓名:</span>
         <div style="flex: 1" class="input-box">
-          <input style="width: 100%" v-model="data.authorBy.name" />
-          <div class="content-box">{{ data.authorBy.name }}</div>
+          <input style="width: 100%" v-model="data.authorByName" />
+          <div class="content-box">{{ data.authorByName }}</div>
         </div>
         <span>性别:</span>
         <div class="input-box" style="min-width: 60px">
-          <input style="width: 60px" v-model="data.authorBy.sex" />
-          <div class="content-box">{{ data.authorBy.sex }}</div>
+          <input style="width: 60px" v-model="data.authorBySex" />
+          <div class="content-box">{{ data.authorBySex }}</div>
         </div>
         <span>年龄:</span>
         <div class="input-box" style="min-width: 60px">
-          <input style="width: 60px" v-model="data.authorBy.age" />
-          <div class="content-box">{{ data.authorBy.age }}</div>
+          <input style="width: 60px" v-model="data.authorByAge" />
+          <div class="content-box">{{ data.authorByAge }}</div>
         </div>
         <span>身份证号:</span>
       </div>
       <div class="item">
         <div style="flex: 1" class="input-box">
-          <input style="width: 100%" v-model="data.authorBy.id" />
-          <div class="content-box">{{ data.authorBy.id }}</div>
+          <input style="width: 100%" v-model="data.authorById" />
+          <div class="content-box">{{ data.authorById }}</div>
         </div>
         <span>工作单位:</span>
         <div class="input-box" style="min-width: 330px">
-          <input style="width: 330px" v-model="data.authorBy.company" />
-          <div class="content-box">{{ data.authorBy.company }}</div>
+          <input style="width: 330px" v-model="data.authorByCompany" />
+          <div class="content-box">{{ data.authorByCompany }}</div>
         </div>
         <span>住址及联系方式:</span>
       </div>
       <div class="item">
         <div style="flex: 1" class="input-box">
-          <input style="width: 100%" v-model="data.authorBy.addressPhoneNum" />
-          <div class="content-box">{{ data.authorBy.addressPhoneNum }}</div>
+          <input style="width: 100%" v-model="data.authorByPhoneNum" />
+          <div class="content-box">{{ data.authorByPhoneNum }}</div>
         </div>
       </div>
 
@@ -91,8 +91,8 @@
       <div class="item" style="margin-top: 100px">
         <span>受托人:</span>
         <div class="input-box">
-          <input style="width: 100%" v-model="data.authorBy.name" />
-          <div class="content-box">{{ data.authorBy.name }}</div>
+          <input style="width: 100%" v-model="data.authorByName" />
+          <div class="content-box">{{ data.authorByName }}</div>
         </div>
         <span>代理权限为:</span>
       </div>
@@ -136,18 +136,18 @@ const checkData = ref({
 });
 
 const saveHandler = () => {
-  return { type: "author", data: data.value };
+  return { type: "authorOne", data: data.value };
 };
 
 defineExpose({ saveHandler, data });
 onMounted(() => {
   if (props.isDownloadShow) {
   } else {
-    setData("author");
+    setData("authorOne");
   }
 
-  if (tablesInfo.author) {
-    data.value = tablesInfo.author;
+  if (tablesInfo.authorOne) {
+    data.value = tablesInfo.authorOne;
   }
 });
 </script>

+ 4 - 4
src/views/tables/author/author-two.vue

@@ -82,18 +82,18 @@ const checkData = ref({
 });
 
 const saveHandler = () => {
-  return { type: "author", data: data.value };
+  return { type: "authorTwo", data: data.value };
 };
 
 defineExpose({ saveHandler, data });
 onMounted(() => {
   if (props.isDownloadShow) {
   } else {
-    setData("author");
+    setData("authorTwo");
   }
 
-  if (tablesInfo.author) {
-    data.value = tablesInfo.author;
+  if (tablesInfo.authorTwo) {
+    data.value = tablesInfo.authorTwo;
   }
 });
 </script>

+ 13 - 10
src/views/tables/data/index.ts

@@ -189,23 +189,26 @@ let data = {
       ["", "", "", "", "", "", ""],
     ],
   },
-  author: {
+  authorTwo: {
+    options: { check: "", value: "" },
+    authorSign: "",
+    authorBySign: "",
+  },
+
+  authorOne: {
     authorList: [
       { name: "", sex: "", age: "", id: "", address: "", phoneNum: "" },
       { name: "", sex: "", age: "", id: "", address: "", phoneNum: "" },
       { name: "", sex: "", age: "", id: "", address: "", phoneNum: "" },
     ],
-    authorBy: {
-      sex: "",
-      age: "",
-      id: "",
-      company: "",
-      addressPhoneNum: "",
-    },
+    authorByName: "",
+    authorBySex: "",
+    authorByAge: "",
+    authorById: "",
+    authorByCompany: "",
+    authorByPhoneNum: "",
     message: "",
     options: { check: "", value: "" },
-    authorSign: "",
-    authorBySign: "",
   },
 };
 

+ 4 - 3
src/views/tables/explorate-one.vue

@@ -67,7 +67,7 @@
                             <span>{{ i.title }}</span>
                             <div class="input-box" style="flex: 1" v-if="i.id == 5">
                               <input type="text" v-model="data.administrativeLevel.value" />
-                              <div class="content-box left border-bottom">{{ data.administrativeLevel.value }}</div>
+                              <div style="height: 24px;" class="content-box left border-bottom">{{ data.administrativeLevel.value }}</div>
                             </div>
                           </div>
                         </div>
@@ -187,7 +187,7 @@
                     </div>
                     <div class="input-box" style="flex: none; width: 80%" v-if="!i.options.length">
                       <input type="text" v-model="data.environments[index].value" />
-                      <div class="content-box left">{{ data.environments[index].value }}</div>
+                      <div class="content-box left"  style="height: 24px;">{{ data.environments[index].value }}</div>
                     </div>
                   </div>
                   <!-- <div class="input-box" v-if="index == environments.length - 1">
@@ -667,7 +667,8 @@ div {
     display: grid;
     grid-template-columns: 14% 86%;
     grid-template-rows: repeat(1, 100%);
-    height: 35px;
+    // height: 35px;
+    min-height: 35px;
     > div {
       border-bottom: 1px solid #000;
       border-right: 1px solid #000;

+ 3 - 3
src/views/tables/explorate-two.vue

@@ -13,7 +13,7 @@
               <span>{{ i.title }}</span>
               <div v-if="i.id == 2" style="flex: 1">
                 <input type="text" v-model="data.cameraInfo.value" />
-                <div class="content-box left" style="border-bottom: 1px solid #000">{{ data.cameraInfo.value }}</div>
+                <div class="content-box left" style="height: 24px; border-bottom: 1px solid #000">{{ data.cameraInfo.value }}</div>
               </div>
             </div>
           </div>
@@ -44,14 +44,14 @@
           <div class="item column">
             <span>伤亡人员去向:</span>
             <div style="min-height: 60px; width: 100%">
-              <textarea style="height: 60px;" v-model="data.hurtDieGo" name="" id="" cols="30" rows="10"></textarea>
+              <textarea style="height: 60px" v-model="data.hurtDieGo" name="" id="" cols="30" rows="10"></textarea>
               <div class="content-box top-left">{{ data.hurtDieGo }}</div>
             </div>
           </div>
           <div class="item column">
             <span>其他需求说明的情况:</span>
             <div style="min-height: 60px; width: 100%">
-              <textarea style="height: 60px;" v-model="data.desc" name="" id="" cols="30" rows="10"></textarea>
+              <textarea style="height: 60px" v-model="data.desc" name="" id="" cols="30" rows="10"></textarea>
               <div class="content-box top-left">{{ data.desc }}</div>
             </div>
           </div>

+ 5 - 4
src/views/tables/extract.vue

@@ -47,7 +47,7 @@
         <tr>
           <td colspan="2">血样(尿样)提取时间</td>
           <td colspan="6">
-            <div>
+            <div style="white-space: normal; line-height: 24px">
               <input v-model="data.extractTime" />
               <div class="content-box">{{ data.extractTime }}</div>
             </div>
@@ -56,7 +56,7 @@
         <tr>
           <td colspan="2">血样(尿样)提取地点</td>
           <td colspan="6">
-            <div>
+            <div style="white-space: normal; line-height: 24px">
               <input v-model="data.extractAdress" />
               <div class="content-box">{{ data.extractAdress }}</div>
             </div>
@@ -137,7 +137,7 @@
         <tr>
           <td>通知家属情况</td>
           <td colspan="7">
-            <div>
+            <div style="white-space: normal; line-height: 24px">
               <input v-model="data.notice" />
               <div class="content-box">{{ data.notice }}</div>
             </div>
@@ -169,7 +169,7 @@
         <tr>
           <td>办案单位</td>
           <td colspan="7">
-            <div>
+            <div style="white-space: normal; line-height: 24px">
               <input v-model="data.company" />
               <div class="content-box">{{ data.company }}</div>
             </div>
@@ -213,6 +213,7 @@ onMounted(() => {
   display: flex;
   align-items: center;
   justify-content: center;
+  word-break: break-all;
   &.left {
     justify-content: flex-start;
   }

+ 2 - 2
src/views/tables/identification.vue

@@ -95,8 +95,8 @@
           <div class="sign-box">
             <span>交通警察:</span>
             <div style="flex: 1">
-              <input v-model="data.optionsOne.police" />
-              <div class="content-box">{{ data.optionsOne.police }}</div>
+              <input v-model="data.optionsTwo.police" />
+              <div class="content-box">{{ data.optionsTwo.police }}</div>
             </div>
           </div>
         </div>

+ 3 - 3
src/views/tables/index.vue

@@ -3,7 +3,7 @@
   <MainPanel>
     <template v-slot:header>
       <Header :title="headerTitle" :on-back="onBack" type="return">
-        <ui-button v-if="!isWrite" style="margin-right: 16px" class="download-btn" type="null" width="96px" @click="downloadHandler"> 下载 </ui-button>
+        <ui-button v-if="!isWrite && tableType != 'law'" style="margin-right: 16px" class="download-btn" type="null" width="96px" @click="downloadHandler"> 下载 </ui-button>
         <ui-button v-if="tableType != 'law'" type="primary" width="96px" @click="saveHandler"> {{ isWrite ? "确定" : "保存" }} </ui-button>
       </Header>
     </template>
@@ -36,7 +36,7 @@
 </template>
 
 <script setup lang="ts">
-import { reactive, ref, watch, onMounted, nextTick, onActivated, onDeactivated, provide } from "vue";
+import { reactive, ref, watch, onMounted, nextTick, onActivated, onDeactivated, provide, watchEffect } from "vue";
 import { router } from "@/router";
 import Swiper from "swiper";
 import html2canvas from "html2canvas";
@@ -181,7 +181,7 @@ const getLayoutImage = async () => {
         return canvas.toBlob(resolve, "image/jpeg", 0.95);
       });
       await downloadImage(blob, `tables_${index}.jpg`);
-            Message.success({ msg: "已保存至相册", time: 2000 });
+      Message.success({ msg: "已保存至相册", time: 2000 });
       num++;
 
       if (num == eleList.value.length) {

+ 9 - 7
src/views/tables/legacy.vue

@@ -100,17 +100,19 @@ const handlerInput = (e, index, j_index) => {
   data.value.list[index][j_index] = e.target.innerText;
 };
 
-const saveHandler = async () => {
-  await saveStore();
+const saveHandler = () => {
+  return { type: "legacy", data: data.value };
 };
-const saveStore = genUseLoading(async () => {
+const saveStore = () => {
   // return new Promise((res, rej) => {
-  const origin = tables.value;
-  console.log(data.value);
-  origin["legacy"] = JSON.parse(JSON.stringify(data.value));
+  // const origin = tables.value;
+  // console.log(data.value);
+  // return { type: "legacy", data: data.value };
+  // origin["legacy"] = JSON.parse(JSON.stringify(data.value));
   // });
-});
+};
 defineExpose({ saveHandler, data });
+
 onMounted(() => {
   if (props.isDownloadShow) {
   } else {