|
@@ -65,6 +65,10 @@ export default class ListenLayer {
|
|
|
// position,
|
|
|
// exceptVectorIds.exceptCurveLineId
|
|
|
// );
|
|
|
+ selectInfo.simpleLineInfo = this.isSelectSimpleLine(
|
|
|
+ position,
|
|
|
+ exceptVectorIds.exceptSimpleLineId
|
|
|
+ );
|
|
|
selectInfo.curveLineInfo = {};
|
|
|
selectInfo.curvePointInfo = {};
|
|
|
//交叉口拐弯处的控制点
|
|
@@ -127,7 +131,7 @@ export default class ListenLayer {
|
|
|
pointInfo.y = linkedPoint.y;
|
|
|
} else {
|
|
|
if (seqInfo.hasOwnProperty("linkedPointIdX")) {
|
|
|
- pointInfo.linkedPointIdX = seqInfo.linkedPointIdY;
|
|
|
+ pointInfo.linkedPointIdX = seqInfo.linkedPointIdX;
|
|
|
pointInfo.x = seqInfo.x;
|
|
|
} else if (seqInfo.hasOwnProperty("linkedPointIdY")) {
|
|
|
pointInfo.linkedPointIdY = seqInfo.linkedPointIdY;
|
|
@@ -668,6 +672,121 @@ export default class ListenLayer {
|
|
|
return crossControlPointInfo;
|
|
|
}
|
|
|
|
|
|
+ isSelectSimpleLine(position, exceptSimpleLineId) {
|
|
|
+ let simpleLineInfo = {
|
|
|
+ simpleLineId: null,
|
|
|
+ type: null,
|
|
|
+ distance: null,
|
|
|
+ };
|
|
|
+ let seqInfo = {};
|
|
|
+ const simpleLines = dataService.getSimpleLines();
|
|
|
+ for (const simpleLineId in simpleLines) {
|
|
|
+ if (simpleLineId == exceptSimpleLineId) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ const simpleLine = dataService.getSimpleLine(simpleLineId);
|
|
|
+ let distance = mathUtil.getDistance(position, simpleLine.start);
|
|
|
+ //先考虑两个端点
|
|
|
+ if (distance < Constant.minAdsorbPix) {
|
|
|
+ if (
|
|
|
+ simpleLineInfo.simpleLineId == null ||
|
|
|
+ distance < simpleLineInfo.distance
|
|
|
+ ) {
|
|
|
+ simpleLineInfo = {
|
|
|
+ simpleLineId: simpleLineId,
|
|
|
+ type: VectorType.SimpleLine,
|
|
|
+ distance: distance,
|
|
|
+ index: "start",
|
|
|
+ };
|
|
|
+ simpleLineInfo.x = simpleLine.start.x;
|
|
|
+ simpleLineInfo.y = simpleLine.start.y;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ distance = mathUtil.getDistance(position, simpleLine.end);
|
|
|
+ if (distance < Constant.minAdsorbPix) {
|
|
|
+ if (
|
|
|
+ simpleLineInfo.simpleLineId == null ||
|
|
|
+ distance < simpleLineInfo.distance
|
|
|
+ ) {
|
|
|
+ simpleLineInfo = {
|
|
|
+ simpleLineId: simpleLineId,
|
|
|
+ type: VectorType.SimpleLine,
|
|
|
+ distance: distance,
|
|
|
+ index: "end",
|
|
|
+ };
|
|
|
+ simpleLineInfo.x = simpleLine.end.x;
|
|
|
+ simpleLineInfo.y = simpleLine.end.y;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //记录平行和垂直
|
|
|
+ if (Math.abs(position.x - simpleLine.start.x) < Constant.minAdsorbPix) {
|
|
|
+ seqInfo.linkedPointIdX = simpleLineId + "-startX";
|
|
|
+ seqInfo.x = simpleLine.start.x;
|
|
|
+ } else if (
|
|
|
+ Math.abs(position.y - simpleLine.start.y) < Constant.minAdsorbPix
|
|
|
+ ) {
|
|
|
+ seqInfo.linkedPointIdY = simpleLineId + "-startY";
|
|
|
+ seqInfo.y = simpleLine.start.y;
|
|
|
+ } else if (
|
|
|
+ Math.abs(position.x - simpleLine.end.x) < Constant.minAdsorbPix
|
|
|
+ ) {
|
|
|
+ seqInfo.linkedPointIdX = simpleLineId + "-endX";
|
|
|
+ seqInfo.x = simpleLine.end.x;
|
|
|
+ } else if (
|
|
|
+ Math.abs(position.y - simpleLine.end.y) < Constant.minAdsorbPix
|
|
|
+ ) {
|
|
|
+ seqInfo.linkedPointIdY = simpleLineId + "-endY";
|
|
|
+ seqInfo.y = simpleLine.end.y;
|
|
|
+ }
|
|
|
+
|
|
|
+ //再考虑整个线段
|
|
|
+ if (simpleLineInfo.simpleLineId == null) {
|
|
|
+ const line = mathUtil.createLine1(simpleLine.start, simpleLine.end);
|
|
|
+ const join = mathUtil.getJoinLinePoint(position, line);
|
|
|
+ const distance = mathUtil.getDistance(position, join);
|
|
|
+ if (
|
|
|
+ !mathUtil.isContainForSegment(join, simpleLine.start, simpleLine.end)
|
|
|
+ ) {
|
|
|
+ continue;
|
|
|
+ } else if (distance < Constant.minAdsorbPix / 2) {
|
|
|
+ simpleLineInfo = {
|
|
|
+ simpleLineId: simpleLineId,
|
|
|
+ type: VectorType.SimpleLine,
|
|
|
+ distance: distance,
|
|
|
+ };
|
|
|
+ simpleLineInfo.x = join.x;
|
|
|
+ simpleLineInfo.y = join.y;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //最后考虑端点的单个x或者y
|
|
|
+ if (simpleLineInfo.simpleLineId == null) {
|
|
|
+ if (seqInfo.hasOwnProperty("linkedPointIdX")) {
|
|
|
+ simpleLineInfo.linkedPointIdX = seqInfo.linkedPointIdX;
|
|
|
+ simpleLineInfo.x = seqInfo.x;
|
|
|
+ } else if (seqInfo.hasOwnProperty("linkedPointIdY")) {
|
|
|
+ simpleLineInfo.linkedPointIdY = seqInfo.linkedPointIdY;
|
|
|
+ simpleLineInfo.y = seqInfo.y;
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ simpleLineInfo.hasOwnProperty("y") &&
|
|
|
+ !simpleLineInfo.hasOwnProperty("x")
|
|
|
+ ) {
|
|
|
+ simpleLineInfo.x = position.x;
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ simpleLineInfo.hasOwnProperty("x") &&
|
|
|
+ !simpleLineInfo.hasOwnProperty("y")
|
|
|
+ ) {
|
|
|
+ simpleLineInfo.y = position.y;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return simpleLineInfo;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
*
|
|
|
* @param info:{
|
|
@@ -818,6 +937,13 @@ export default class ListenLayer {
|
|
|
this.modifyPoint.x = info.curveLineInfo.x;
|
|
|
this.modifyPoint.y = info.curveLineInfo.y;
|
|
|
}
|
|
|
+ } else if (info && info.simpleLineInfo.simpleLineId) {
|
|
|
+ this.modifyPoint.simpleLineId = info.simpleLineInfo.simpleLineId;
|
|
|
+ this.modifyPoint.x = info.simpleLineInfo.x;
|
|
|
+ this.modifyPoint.y = info.simpleLineInfo.y;
|
|
|
+ if (info.simpleLineInfo.index) {
|
|
|
+ this.modifyPoint.index = info.simpleLineInfo.index;
|
|
|
+ }
|
|
|
} else if (info && info.roadPointInfo.linkedRoadPointIdX) {
|
|
|
this.modifyPoint = {};
|
|
|
this.modifyPoint.linkedRoadPointIdX =
|
|
@@ -852,6 +978,16 @@ export default class ListenLayer {
|
|
|
this.modifyPoint.linkedPointIdY = info.pointInfo.linkedPointIdY;
|
|
|
this.modifyPoint.y = info.pointInfo.y;
|
|
|
this.modifyPoint.x = info.pointInfo.x;
|
|
|
+ } else if (info && info.simpleLineInfo.linkedPointIdX) {
|
|
|
+ this.modifyPoint = {};
|
|
|
+ this.modifyPoint.linkedPointIdX = info.simpleLineInfo.linkedPointIdX;
|
|
|
+ this.modifyPoint.x = info.simpleLineInfo.x;
|
|
|
+ this.modifyPoint.y = info.simpleLineInfo.y;
|
|
|
+ } else if (info && info.simpleLineInfo.linkedPointIdY) {
|
|
|
+ this.modifyPoint = {};
|
|
|
+ this.modifyPoint.linkedPointIdY = info.simpleLineInfo.linkedPointIdY;
|
|
|
+ this.modifyPoint.y = info.simpleLineInfo.y;
|
|
|
+ this.modifyPoint.x = info.simpleLineInfo.x;
|
|
|
} else {
|
|
|
this.modifyPoint = null;
|
|
|
}
|
|
@@ -932,6 +1068,12 @@ export default class ListenLayer {
|
|
|
VectorType.CurveLine,
|
|
|
SelectState.Select
|
|
|
);
|
|
|
+ } else if (this.modifyPoint.simpleLineId) {
|
|
|
+ stateService.setSelectItem(
|
|
|
+ this.modifyPoint.simpleLineId,
|
|
|
+ VectorType.SimpleLine,
|
|
|
+ this.modifyPoint.index ? this.modifyPoint.index : SelectState.Select
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
let newSelectItem = stateService.getSelectItem();
|