|
@@ -1,6 +1,8 @@
|
|
import Edge from "../Geometry/Edge.js";
|
|
import Edge from "../Geometry/Edge.js";
|
|
|
|
+import Constant from "../Constant.js";
|
|
import { dataService } from "./DataService.js";
|
|
import { dataService } from "./DataService.js";
|
|
import { roadService } from "./RoadService.js";
|
|
import { roadService } from "./RoadService.js";
|
|
|
|
+import { controlPointService } from "./ControlPointService.js";
|
|
import { mathUtil } from "../Util/MathUtil.js";
|
|
import { mathUtil } from "../Util/MathUtil.js";
|
|
|
|
|
|
export default class EdgeService {
|
|
export default class EdgeService {
|
|
@@ -12,7 +14,7 @@ export default class EdgeService {
|
|
return edge;
|
|
return edge;
|
|
}
|
|
}
|
|
|
|
|
|
- getMidLine(edge) {
|
|
|
|
|
|
+ getLine(edge) {
|
|
let line = mathUtil.createLine1(edge.start, edge.end);
|
|
let line = mathUtil.createLine1(edge.start, edge.end);
|
|
return line;
|
|
return line;
|
|
}
|
|
}
|
|
@@ -67,6 +69,7 @@ export default class EdgeService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ //单独的墙的一端
|
|
updateDefaultEdge(roadId, dir) {
|
|
updateDefaultEdge(roadId, dir) {
|
|
//console.log('计算'+roadId+' '+dir+'方向的默认Edge端点');
|
|
//console.log('计算'+roadId+' '+dir+'方向的默认Edge端点');
|
|
console.log("开始执行updateDefaultEdge");
|
|
console.log("开始执行updateDefaultEdge");
|
|
@@ -103,115 +106,6 @@ export default class EdgeService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- computerEdgeForTwoRoad(roadId1, roadId2) {
|
|
|
|
- //console.log('计算'+roadId1+'和'+roadId2+'相交的edge交点');
|
|
|
|
- console.log("开始执行computerEdgeForTwoRoad");
|
|
|
|
- let road1 = dataService.getRoad(roadId1);
|
|
|
|
- let startPoint1 = dataService.getPoint(road1.startId);
|
|
|
|
- let endPoint1 = dataService.getPoint(road1.endId);
|
|
|
|
- this.computerDefaultEdge(roadId1);
|
|
|
|
- let leftEdge1 = dataService.getEdge(road1.leftEdgeId);
|
|
|
|
- let rightEdge1 = dataService.getEdge(road1.rightEdgeId);
|
|
|
|
- let lineLeft1 = this.getMidLine(leftEdge1);
|
|
|
|
- let lineRight1 = this.getMidLine(rightEdge1);
|
|
|
|
-
|
|
|
|
- let road2 = dataService.getRoad(roadId2);
|
|
|
|
- this.computerDefaultEdge(roadId2);
|
|
|
|
- // let startPoint2 = dataService.getPoint(road2.startId);
|
|
|
|
- // let endPoint2 = dataService.getPoint(road2.endId);
|
|
|
|
- let leftEdge2 = dataService.getEdge(road2.leftEdgeId);
|
|
|
|
- let rightEdge2 = dataService.getEdge(road2.rightEdgeId);
|
|
|
|
- let lineLeft2 = this.getMidLine(leftEdge2);
|
|
|
|
- let lineRight2 = this.getMidLine(rightEdge2);
|
|
|
|
-
|
|
|
|
- let angleInfo = roadService.AngleForRoad2(roadId1, roadId2);
|
|
|
|
- let angle = null;
|
|
|
|
- if (angleInfo == null) {
|
|
|
|
- return false;
|
|
|
|
- } else {
|
|
|
|
- angle = angleInfo.angle;
|
|
|
|
- }
|
|
|
|
- let newEdgePoint1, newEdgePoint2;
|
|
|
|
-
|
|
|
|
- //start-start
|
|
|
|
- //left-right,right-left
|
|
|
|
- if (road1.startId == road2.startId) {
|
|
|
|
- //如果墙的角度过大,不能计算edge对应的line的交点
|
|
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
- newEdgePoint1 = mathUtil.getJoinLinePoint(startPoint1, lineLeft1);
|
|
|
|
- newEdgePoint2 = mathUtil.getJoinLinePoint(startPoint1, lineRight1);
|
|
|
|
- } else {
|
|
|
|
- newEdgePoint1 = mathUtil.getIntersectionPoint(lineLeft1, lineRight2);
|
|
|
|
- newEdgePoint2 = mathUtil.getIntersectionPoint(lineLeft2, lineRight1);
|
|
|
|
- }
|
|
|
|
- mathUtil.clonePoint(leftEdge1.start, newEdgePoint1);
|
|
|
|
- mathUtil.clonePoint(rightEdge1.start, newEdgePoint2);
|
|
|
|
-
|
|
|
|
- mathUtil.clonePoint(rightEdge2.start, newEdgePoint1);
|
|
|
|
- mathUtil.clonePoint(leftEdge2.start, newEdgePoint2);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- //start-end
|
|
|
|
- //left-left,right-right
|
|
|
|
- else if (road1.startId == road2.endId) {
|
|
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
- newEdgePoint1 = mathUtil.getJoinLinePoint(startPoint1, lineLeft1);
|
|
|
|
- newEdgePoint2 = mathUtil.getJoinLinePoint(startPoint1, lineRight1);
|
|
|
|
- } else {
|
|
|
|
- newEdgePoint1 = mathUtil.getIntersectionPoint(lineLeft1, lineLeft2);
|
|
|
|
- newEdgePoint2 = mathUtil.getIntersectionPoint(lineRight1, lineRight2);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- mathUtil.clonePoint(leftEdge1.start, newEdgePoint1);
|
|
|
|
- mathUtil.clonePoint(rightEdge1.start, newEdgePoint2);
|
|
|
|
-
|
|
|
|
- mathUtil.clonePoint(leftEdge2.end, newEdgePoint1);
|
|
|
|
- mathUtil.clonePoint(rightEdge2.end, newEdgePoint2);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- //end-start
|
|
|
|
- //left-left,right-right
|
|
|
|
- else if (road1.endId == road2.startId) {
|
|
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
- newEdgePoint1 = mathUtil.getJoinLinePoint(endPoint1, lineLeft1);
|
|
|
|
- newEdgePoint2 = mathUtil.getJoinLinePoint(endPoint1, lineRight1);
|
|
|
|
- } else {
|
|
|
|
- newEdgePoint1 = mathUtil.getIntersectionPoint(lineLeft1, lineLeft2);
|
|
|
|
- newEdgePoint2 = mathUtil.getIntersectionPoint(lineRight1, lineRight2);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- mathUtil.clonePoint(leftEdge1.end, newEdgePoint1);
|
|
|
|
- mathUtil.clonePoint(rightEdge1.end, newEdgePoint2);
|
|
|
|
-
|
|
|
|
- mathUtil.clonePoint(leftEdge2.start, newEdgePoint1);
|
|
|
|
- mathUtil.clonePoint(rightEdge2.start, newEdgePoint2);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- //end-end
|
|
|
|
- //left-right,right-left
|
|
|
|
- else if (road1.endId == road2.endId) {
|
|
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
- newEdgePoint1 = mathUtil.getJoinLinePoint(endPoint1, lineLeft1);
|
|
|
|
- newEdgePoint2 = mathUtil.getJoinLinePoint(endPoint1, lineRight1);
|
|
|
|
- } else {
|
|
|
|
- newEdgePoint1 = mathUtil.getIntersectionPoint(lineLeft1, lineRight2);
|
|
|
|
- newEdgePoint2 = mathUtil.getIntersectionPoint(lineLeft2, lineRight1);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- mathUtil.clonePoint(leftEdge1.end, newEdgePoint1);
|
|
|
|
- mathUtil.clonePoint(rightEdge1.end, newEdgePoint2);
|
|
|
|
-
|
|
|
|
- mathUtil.clonePoint(rightEdge2.end, newEdgePoint1);
|
|
|
|
- mathUtil.clonePoint(leftEdge2.end, newEdgePoint2);
|
|
|
|
- return true;
|
|
|
|
- } else {
|
|
|
|
- console.error(
|
|
|
|
- "computerEdgeForTwoRoad**********************************************************"
|
|
|
|
- );
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
//roadId1,roadId2已经相交,这里只是为了算出两堵墙edge的start和end
|
|
//roadId1,roadId2已经相交,这里只是为了算出两堵墙edge的start和end
|
|
//不纠正edge与墙的中心线平行
|
|
//不纠正edge与墙的中心线平行
|
|
updateEdgeForTwoRoad(roadId1, roadId2) {
|
|
updateEdgeForTwoRoad(roadId1, roadId2) {
|
|
@@ -224,8 +118,8 @@ export default class EdgeService {
|
|
this.computerDefaultEdge(roadId1);
|
|
this.computerDefaultEdge(roadId1);
|
|
let leftEdge1 = dataService.getEdge(road1.leftEdgeId);
|
|
let leftEdge1 = dataService.getEdge(road1.leftEdgeId);
|
|
let rightEdge1 = dataService.getEdge(road1.rightEdgeId);
|
|
let rightEdge1 = dataService.getEdge(road1.rightEdgeId);
|
|
- let lineLeft1 = this.getMidLine(leftEdge1);
|
|
|
|
- let lineRight1 = this.getMidLine(rightEdge1);
|
|
|
|
|
|
+ let lineLeft1 = this.getLine(leftEdge1);
|
|
|
|
+ let lineRight1 = this.getLine(rightEdge1);
|
|
|
|
|
|
let road2 = dataService.getRoad(roadId2);
|
|
let road2 = dataService.getRoad(roadId2);
|
|
this.computerDefaultEdge(roadId2);
|
|
this.computerDefaultEdge(roadId2);
|
|
@@ -233,8 +127,8 @@ export default class EdgeService {
|
|
// let endPoint2 = dataService.getPoint(road2.endId);
|
|
// let endPoint2 = dataService.getPoint(road2.endId);
|
|
let leftEdge2 = dataService.getEdge(road2.leftEdgeId);
|
|
let leftEdge2 = dataService.getEdge(road2.leftEdgeId);
|
|
let rightEdge2 = dataService.getEdge(road2.rightEdgeId);
|
|
let rightEdge2 = dataService.getEdge(road2.rightEdgeId);
|
|
- let lineLeft2 = this.getMidLine(leftEdge2);
|
|
|
|
- let lineRight2 = this.getMidLine(rightEdge2);
|
|
|
|
|
|
+ let lineLeft2 = this.getLine(leftEdge2);
|
|
|
|
+ let lineRight2 = this.getLine(rightEdge2);
|
|
|
|
|
|
let angleInfo = roadService.AngleForRoad2(roadId1, roadId2);
|
|
let angleInfo = roadService.AngleForRoad2(roadId1, roadId2);
|
|
let angle = null;
|
|
let angle = null;
|
|
@@ -244,18 +138,44 @@ export default class EdgeService {
|
|
angle = angleInfo.angle;
|
|
angle = angleInfo.angle;
|
|
}
|
|
}
|
|
let newEdgePoint1, newEdgePoint2;
|
|
let newEdgePoint1, newEdgePoint2;
|
|
|
|
+ let points = [];
|
|
|
|
|
|
//start-start
|
|
//start-start
|
|
//left-right,right-left
|
|
//left-right,right-left
|
|
if (road1.startId == road2.startId) {
|
|
if (road1.startId == road2.startId) {
|
|
//如果墙的角度过大,不能计算edge对应的line的交点
|
|
//如果墙的角度过大,不能计算edge对应的line的交点
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
|
|
+ if (angle > Constant.maxAngle) {
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(startPoint1, lineLeft1);
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(startPoint1, lineLeft1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(startPoint1, lineRight1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(startPoint1, lineRight1);
|
|
} else {
|
|
} else {
|
|
newEdgePoint1 = mathUtil.getIntersectionPoint(lineLeft1, lineRight2);
|
|
newEdgePoint1 = mathUtil.getIntersectionPoint(lineLeft1, lineRight2);
|
|
newEdgePoint2 = mathUtil.getIntersectionPoint(lineLeft2, lineRight1);
|
|
newEdgePoint2 = mathUtil.getIntersectionPoint(lineLeft2, lineRight1);
|
|
|
|
+ points.push(startPoint1);
|
|
|
|
+ points.push(endPoint1);
|
|
|
|
+ points.push(newEdgePoint1);
|
|
|
|
+ if (mathUtil.isClockwise(points)) {
|
|
|
|
+ //需要考虑控制点ControlPointService
|
|
|
|
+ controlPointService.update(
|
|
|
|
+ startPoint1,
|
|
|
|
+ newEdgePoint1,
|
|
|
|
+ leftEdge1,
|
|
|
|
+ rightEdge2,
|
|
|
|
+ "start",
|
|
|
|
+ "start"
|
|
|
|
+ );
|
|
|
|
+ } else {
|
|
|
|
+ //需要考虑控制点ControlPointService
|
|
|
|
+ controlPointService.update(
|
|
|
|
+ startPoint1,
|
|
|
|
+ newEdgePoint1,
|
|
|
|
+ rightEdge1,
|
|
|
|
+ leftEdge2,
|
|
|
|
+ "start",
|
|
|
|
+ "start"
|
|
|
|
+ );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+
|
|
mathUtil.clonePoint(leftEdge1.start, newEdgePoint1);
|
|
mathUtil.clonePoint(leftEdge1.start, newEdgePoint1);
|
|
mathUtil.clonePoint(rightEdge1.start, newEdgePoint2);
|
|
mathUtil.clonePoint(rightEdge1.start, newEdgePoint2);
|
|
|
|
|
|
@@ -266,12 +186,36 @@ export default class EdgeService {
|
|
//start-end
|
|
//start-end
|
|
//left-left,right-right
|
|
//left-left,right-right
|
|
else if (road1.startId == road2.endId) {
|
|
else if (road1.startId == road2.endId) {
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
|
|
+ if (angle > Constant.maxAngle) {
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(startPoint1, lineLeft1);
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(startPoint1, lineLeft1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(startPoint1, lineRight1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(startPoint1, lineRight1);
|
|
} else {
|
|
} else {
|
|
newEdgePoint1 = mathUtil.getIntersectionPoint(lineLeft1, lineLeft2);
|
|
newEdgePoint1 = mathUtil.getIntersectionPoint(lineLeft1, lineLeft2);
|
|
newEdgePoint2 = mathUtil.getIntersectionPoint(lineRight1, lineRight2);
|
|
newEdgePoint2 = mathUtil.getIntersectionPoint(lineRight1, lineRight2);
|
|
|
|
+ points.push(startPoint1);
|
|
|
|
+ points.push(endPoint1);
|
|
|
|
+ points.push(newEdgePoint1);
|
|
|
|
+ if (mathUtil.isClockwise(points)) {
|
|
|
|
+ //需要考虑控制点ControlPointService
|
|
|
|
+ controlPointService.update(
|
|
|
|
+ startPoint1,
|
|
|
|
+ newEdgePoint1,
|
|
|
|
+ leftEdge1,
|
|
|
|
+ leftEdge2,
|
|
|
|
+ "start",
|
|
|
|
+ "end"
|
|
|
|
+ );
|
|
|
|
+ } else {
|
|
|
|
+ //需要考虑控制点ControlPointService
|
|
|
|
+ controlPointService.update(
|
|
|
|
+ startPoint1,
|
|
|
|
+ newEdgePoint1,
|
|
|
|
+ rightEdge1,
|
|
|
|
+ rightEdge2,
|
|
|
|
+ "start",
|
|
|
|
+ "end"
|
|
|
|
+ );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
mathUtil.clonePoint(leftEdge1.start, newEdgePoint1);
|
|
mathUtil.clonePoint(leftEdge1.start, newEdgePoint1);
|
|
@@ -284,7 +228,7 @@ export default class EdgeService {
|
|
//end-start
|
|
//end-start
|
|
//left-left,right-right
|
|
//left-left,right-right
|
|
else if (road1.endId == road2.startId) {
|
|
else if (road1.endId == road2.startId) {
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
|
|
+ if (angle > Constant.maxAngle) {
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(endPoint1, lineLeft1);
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(endPoint1, lineLeft1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(endPoint1, lineRight1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(endPoint1, lineRight1);
|
|
} else {
|
|
} else {
|
|
@@ -302,7 +246,7 @@ export default class EdgeService {
|
|
//end-end
|
|
//end-end
|
|
//left-right,right-left
|
|
//left-right,right-left
|
|
else if (road1.endId == road2.endId) {
|
|
else if (road1.endId == road2.endId) {
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
|
|
+ if (angle > Constant.maxAngle) {
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(endPoint1, lineLeft1);
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(endPoint1, lineLeft1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(endPoint1, lineRight1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(endPoint1, lineRight1);
|
|
} else {
|
|
} else {
|
|
@@ -328,6 +272,7 @@ export default class EdgeService {
|
|
//只是计算roadId1,roadId2之间的一个edge
|
|
//只是计算roadId1,roadId2之间的一个edge
|
|
//roadId1和roadId2相交的交点是join。以join为中心,roadId1逆时针旋转到roadId2,他们之间的那个edge
|
|
//roadId1和roadId2相交的交点是join。以join为中心,roadId1逆时针旋转到roadId2,他们之间的那个edge
|
|
//方法是:join,roadId1另一头的点p1,计算后的edge交点p2。这三个点是逆时针即可
|
|
//方法是:join,roadId1另一头的点p1,计算后的edge交点p2。这三个点是逆时针即可
|
|
|
|
+ //主要用于多个road相交,计算相邻的road之间的edge
|
|
updateSingleEdgeForTwoRoad(roadId1, roadId2) {
|
|
updateSingleEdgeForTwoRoad(roadId1, roadId2) {
|
|
//console.log('更新'+roadId1+'和'+roadId2+'一侧相交的edge交点');
|
|
//console.log('更新'+roadId1+'和'+roadId2+'一侧相交的edge交点');
|
|
console.log("开始执行updateSingleEdgeForTwoRoad");
|
|
console.log("开始执行updateSingleEdgeForTwoRoad");
|
|
@@ -337,8 +282,8 @@ export default class EdgeService {
|
|
this.computerDefaultEdge(roadId1);
|
|
this.computerDefaultEdge(roadId1);
|
|
let leftEdge1 = dataService.getEdge(road1.leftEdgeId);
|
|
let leftEdge1 = dataService.getEdge(road1.leftEdgeId);
|
|
let rightEdge1 = dataService.getEdge(road1.rightEdgeId);
|
|
let rightEdge1 = dataService.getEdge(road1.rightEdgeId);
|
|
- let lineLeft1 = this.getMidLine(leftEdge1);
|
|
|
|
- let lineRight1 = this.getMidLine(rightEdge1);
|
|
|
|
|
|
+ let lineLeft1 = this.getLine(leftEdge1);
|
|
|
|
+ let lineRight1 = this.getLine(rightEdge1);
|
|
|
|
|
|
let road2 = dataService.getRoad(roadId2);
|
|
let road2 = dataService.getRoad(roadId2);
|
|
this.computerDefaultEdge(roadId2);
|
|
this.computerDefaultEdge(roadId2);
|
|
@@ -346,8 +291,8 @@ export default class EdgeService {
|
|
// let endPoint2 = dataService.getPoint(road2.endId);
|
|
// let endPoint2 = dataService.getPoint(road2.endId);
|
|
let leftEdge2 = dataService.getEdge(road2.leftEdgeId);
|
|
let leftEdge2 = dataService.getEdge(road2.leftEdgeId);
|
|
let rightEdge2 = dataService.getEdge(road2.rightEdgeId);
|
|
let rightEdge2 = dataService.getEdge(road2.rightEdgeId);
|
|
- let lineLeft2 = this.getMidLine(leftEdge2);
|
|
|
|
- let lineRight2 = this.getMidLine(rightEdge2);
|
|
|
|
|
|
+ let lineLeft2 = this.getLine(leftEdge2);
|
|
|
|
+ let lineRight2 = this.getLine(rightEdge2);
|
|
|
|
|
|
let angleInfo = roadService.AngleForRoad2(roadId1, roadId2);
|
|
let angleInfo = roadService.AngleForRoad2(roadId1, roadId2);
|
|
let angle = null;
|
|
let angle = null;
|
|
@@ -366,7 +311,7 @@ export default class EdgeService {
|
|
points.push(startPoint1);
|
|
points.push(startPoint1);
|
|
points.push(endPoint1);
|
|
points.push(endPoint1);
|
|
//如果墙的角度过大,不能计算edge对应的line的交点
|
|
//如果墙的角度过大,不能计算edge对应的line的交点
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
|
|
+ if (angle > Constant.maxAngle) {
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(startPoint1, lineLeft1);
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(startPoint1, lineLeft1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(startPoint1, lineRight1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(startPoint1, lineRight1);
|
|
} else {
|
|
} else {
|
|
@@ -389,7 +334,7 @@ export default class EdgeService {
|
|
else if (road1.startId == road2.endId) {
|
|
else if (road1.startId == road2.endId) {
|
|
points.push(startPoint1);
|
|
points.push(startPoint1);
|
|
points.push(endPoint1);
|
|
points.push(endPoint1);
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
|
|
+ if (angle > Constant.maxAngle) {
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(startPoint1, lineLeft1);
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(startPoint1, lineLeft1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(startPoint1, lineRight1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(startPoint1, lineRight1);
|
|
} else {
|
|
} else {
|
|
@@ -411,7 +356,7 @@ export default class EdgeService {
|
|
else if (road1.endId == road2.startId) {
|
|
else if (road1.endId == road2.startId) {
|
|
points.push(endPoint1);
|
|
points.push(endPoint1);
|
|
points.push(startPoint1);
|
|
points.push(startPoint1);
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
|
|
+ if (angle > Constant.maxAngle) {
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(endPoint1, lineLeft1);
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(endPoint1, lineLeft1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(endPoint1, lineRight1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(endPoint1, lineRight1);
|
|
} else {
|
|
} else {
|
|
@@ -433,7 +378,7 @@ export default class EdgeService {
|
|
else if (road1.endID == road2.endId) {
|
|
else if (road1.endID == road2.endId) {
|
|
points.push(endPoint1);
|
|
points.push(endPoint1);
|
|
points.push(startPoint1);
|
|
points.push(startPoint1);
|
|
- if (angle > Setting.Size.MaxAngle) {
|
|
|
|
|
|
+ if (angle > Constant.maxAngle) {
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(endPoint1, lineLeft1);
|
|
newEdgePoint1 = mathUtil.getJoinLinePoint(endPoint1, lineLeft1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(endPoint1, lineRight1);
|
|
newEdgePoint2 = mathUtil.getJoinLinePoint(endPoint1, lineRight1);
|
|
} else {
|
|
} else {
|
|
@@ -545,33 +490,28 @@ export default class EdgeService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- // //pointId1和pointId2是roadId的两个端点,pointId1移动到和pointId2重合的位置
|
|
|
|
- // //这个函数解决:pointId1和pointId2的坐标重合了edge坐标
|
|
|
|
- // updateEdgeForSamePosition(pointId1, pointId2, roadId) {
|
|
|
|
- // let road = dataService.getRoad(roadId);
|
|
|
|
- // let point1 = dataService.getPoint(pointId1);
|
|
|
|
- // let point2 = dataService.getPoint(pointId2);
|
|
|
|
- // if (!mathUtil.equalForPoint(point1, point2)) {
|
|
|
|
- // return;
|
|
|
|
- // }
|
|
|
|
-
|
|
|
|
- // dataService.getEdge
|
|
|
|
-
|
|
|
|
- // let vLeft = globalObjects.managerVectors.getVector(this.leftEdgeId);
|
|
|
|
- // let vRight = globalObjects.managerVectors.getVector(this.rightEdgeId);
|
|
|
|
-
|
|
|
|
- // if (pointId1 == road.geometry.start && pointId2 == road.geometry.end) {
|
|
|
|
- // mathUtil.clonePoint(vLeft.geometry.start, vLeft.geometry.end);
|
|
|
|
- // mathUtil.clonePoint(vRight.geometry.start, vRight.geometry.end);
|
|
|
|
- // } else if (
|
|
|
|
- // pointId1 == road.geometry.end &&
|
|
|
|
- // pointId2 == road.geometry.start
|
|
|
|
- // ) {
|
|
|
|
- // mathUtil.clonePoint(vLeft.geometry.end, vLeft.geometry.start);
|
|
|
|
- // mathUtil.clonePoint(vRight.geometry.end, vRight.geometry.start);
|
|
|
|
- // }
|
|
|
|
- // return;
|
|
|
|
- // }
|
|
|
|
|
|
+ //pointId1和pointId2是roadId的两个端点,pointId1移动到和pointId2重合的位置
|
|
|
|
+ //这个函数解决:pointId1和pointId2的坐标重合了edge坐标
|
|
|
|
+ updateEdgeForSamePosition(pointId1, pointId2, roadId) {
|
|
|
|
+ let road = dataService.getRoad(roadId);
|
|
|
|
+ let point1 = dataService.getPoint(pointId1);
|
|
|
|
+ let point2 = dataService.getPoint(pointId2);
|
|
|
|
+ if (!mathUtil.equalPoint(point1, point2)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let vLeft = dataService.getEdge(this.leftEdgeId);
|
|
|
|
+ let vRight = dataService.getEdge(this.rightEdgeId);
|
|
|
|
+
|
|
|
|
+ if (pointId1 == road.startId && pointId2 == road.endId) {
|
|
|
|
+ mathUtil.clonePoint(vLeft.start, vLeft.end);
|
|
|
|
+ mathUtil.clonePoint(vRight.start, vRight.end);
|
|
|
|
+ } else if (pointId1 == road.endId && pointId2 == road.startId) {
|
|
|
|
+ mathUtil.clonePoint(vLeft.end, vLeft.start);
|
|
|
|
+ mathUtil.clonePoint(vRight.end, vRight.start);
|
|
|
|
+ }
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
const edgeService = new EdgeService();
|
|
const edgeService = new EdgeService();
|