|
@@ -517,82 +517,7 @@ export default class RoadService {
|
|
this.setRoadPointId(roadId, pointId, dir);
|
|
this.setRoadPointId(roadId, pointId, dir);
|
|
// 第四步更新Edge
|
|
// 第四步更新Edge
|
|
edgeService.updateDefaultEdge(roadId, dir);
|
|
edgeService.updateDefaultEdge(roadId, dir);
|
|
- }
|
|
|
|
-
|
|
|
|
- // pointId1移动到pointId2
|
|
|
|
- // 如果有一堵墙(roadId)的两头是pointId1和pointId2,那么这堵墙会被删除
|
|
|
|
- moveTo(pointId1, pointId2) {
|
|
|
|
- const roadId = this.getRoadId(pointId1, pointId2);
|
|
|
|
- // 不能重合
|
|
|
|
- let point1 = dataService.getPoint(pointId1);
|
|
|
|
- let point2 = dataService.getPoint(pointId2);
|
|
|
|
- if (!point2) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- const dx = point1.x - point2.x;
|
|
|
|
- const dy = point1.y - point2.y;
|
|
|
|
- let parent1 = point1.getParent();
|
|
|
|
- const parent2 = point2.getParent();
|
|
|
|
- //确保pointId1与pointId2重合后,墙的角度不能太小
|
|
|
|
- for (const roadId1 in parent1) {
|
|
|
|
- if (roadId1 == roadId) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const road1 = dataService.getRoad(roadId1);
|
|
|
|
- const otherPointId1 = road1.getOtherPointId(pointId1);
|
|
|
|
- const otherPoint1 = dataService.getPoint(otherPointId1);
|
|
|
|
-
|
|
|
|
- for (const roadId2 in parent2) {
|
|
|
|
- if (roadId2 == roadId) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- const road2 = dataService.getRoad(roadId2);
|
|
|
|
- const otherPointId2 = road2.getOtherPointId(pointId2);
|
|
|
|
- const otherPoint2 = dataService.getPoint(otherPointId2);
|
|
|
|
- const angle = mathUtil.Angle(point2, otherPoint1, otherPoint2);
|
|
|
|
- if (Math.abs(angle) < Constant.minAngle) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- // pointId1,pointId2属于同一堵墙
|
|
|
|
- if (roadId != null) {
|
|
|
|
- dataService.deleteRoad(roadId);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- point1 = dataService.getPoint(pointId1);
|
|
|
|
- point2 = dataService.getPoint(pointId2);
|
|
|
|
- if (!point1 || !point2) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- //准备合并
|
|
|
|
- for (const roadId1 in parent1) {
|
|
|
|
- const road1 = dataService.getRoad(roadId1);
|
|
|
|
- const otherPointId = road1.getOtherPointId(pointId1);
|
|
|
|
- const _roadId = this.getRoadId(otherPointId, pointId2);
|
|
|
|
- if (_roadId != null) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // road1上pointId1被pointId2取代
|
|
|
|
- if (road1.startId == pointId1) {
|
|
|
|
- dataService.deletePoint(road1.startId, roadId1);
|
|
|
|
- road1.startId = pointId2;
|
|
|
|
- point2.setPointParent(roadId1, "start");
|
|
|
|
- } else if (road1.endId == pointId1) {
|
|
|
|
- dataService.deletePoint(road1.endId, roadId1);
|
|
|
|
- road1.endId = pointId2;
|
|
|
|
- point2.setPointParent(roadId1, "end");
|
|
|
|
- } else {
|
|
|
|
- console.error(
|
|
|
|
- "roadService.moveTo****************************************************"
|
|
|
|
- );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- edgeService.updateEdgeForMovePoint(pointId2);
|
|
|
|
- return true;
|
|
|
|
|
|
+ roadService.setLanes(roadId, dir);
|
|
}
|
|
}
|
|
|
|
|
|
setRoadPointId = function (roadId, pointId, dir) {
|
|
setRoadPointId = function (roadId, pointId, dir) {
|
|
@@ -901,7 +826,7 @@ export default class RoadService {
|
|
// }
|
|
// }
|
|
|
|
|
|
//设置车道
|
|
//设置车道
|
|
- setLanes(roadId) {
|
|
|
|
|
|
+ setLanes(roadId, dir) {
|
|
let road = dataService.getRoad(roadId);
|
|
let road = dataService.getRoad(roadId);
|
|
let startPoint = dataService.getPoint(road.startId);
|
|
let startPoint = dataService.getPoint(road.startId);
|
|
let endPoint = dataService.getPoint(road.endId);
|
|
let endPoint = dataService.getPoint(road.endId);
|
|
@@ -964,25 +889,33 @@ export default class RoadService {
|
|
rightdy2 = rightdy2 / rightCount;
|
|
rightdy2 = rightdy2 / rightCount;
|
|
|
|
|
|
for (let i = 1; i < leftCount; ++i) {
|
|
for (let i = 1; i < leftCount; ++i) {
|
|
- road.leftLanes[i] = {};
|
|
|
|
- road.leftLanes[i].start = {};
|
|
|
|
- road.leftLanes[i].start.x = point1.x + leftdx1 * i;
|
|
|
|
- road.leftLanes[i].start.y = point1.y + leftdy1 * i;
|
|
|
|
-
|
|
|
|
- road.leftLanes[i].end = {};
|
|
|
|
- road.leftLanes[i].end.x = point2.x + leftdx2 * i;
|
|
|
|
- road.leftLanes[i].end.y = point2.y + leftdy2 * i;
|
|
|
|
|
|
+ if (!dir) {
|
|
|
|
+ road.leftLanes[i] = {};
|
|
|
|
+ }
|
|
|
|
+ if (dir == "start" || !dir) {
|
|
|
|
+ road.leftLanes[i].start = {};
|
|
|
|
+ road.leftLanes[i].start.x = point1.x + leftdx1 * i;
|
|
|
|
+ road.leftLanes[i].start.y = point1.y + leftdy1 * i;
|
|
|
|
+ } else if (dir == "end" || !dir) {
|
|
|
|
+ road.leftLanes[i].end = {};
|
|
|
|
+ road.leftLanes[i].end.x = point2.x + leftdx2 * i;
|
|
|
|
+ road.leftLanes[i].end.y = point2.y + leftdy2 * i;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
for (let i = 1; i < rightCount; ++i) {
|
|
for (let i = 1; i < rightCount; ++i) {
|
|
- road.rightLanes[i] = {};
|
|
|
|
- road.rightLanes[i].start = {};
|
|
|
|
- road.rightLanes[i].start.x = point1.x + leftdx1 * i;
|
|
|
|
- road.rightLanes[i].start.y = point1.y + leftdy1 * i;
|
|
|
|
-
|
|
|
|
- road.rightLanes[i].end = {};
|
|
|
|
- road.rightLanes[i].end.x = point2.x + leftdx2 * i;
|
|
|
|
- road.rightLanes[i].end.y = point2.y + leftdy2 * i;
|
|
|
|
|
|
+ if (!dir) {
|
|
|
|
+ road.rightLanes[i] = {};
|
|
|
|
+ }
|
|
|
|
+ if (dir == "start" || !dir) {
|
|
|
|
+ road.rightLanes[i].start = {};
|
|
|
|
+ road.rightLanes[i].start.x = point1.x + leftdx1 * i;
|
|
|
|
+ road.rightLanes[i].start.y = point1.y + leftdy1 * i;
|
|
|
|
+ } else if (dir == "end" || !dir) {
|
|
|
|
+ road.rightLanes[i].end = {};
|
|
|
|
+ road.rightLanes[i].end.x = point2.x + leftdx2 * i;
|
|
|
|
+ road.rightLanes[i].end.y = point2.y + leftdy2 * i;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|