|
@@ -62,12 +62,12 @@ export default class ListenLayer {
|
|
|
position,
|
|
|
exceptVectorIds.exceptLineId
|
|
|
);
|
|
|
- // selectInfo.curveLineInfo = this.isSelectCurveLine(
|
|
|
- // position,
|
|
|
- // exceptVectorIds.exceptCurveLineId
|
|
|
- // );
|
|
|
selectInfo.curveLineInfo = {};
|
|
|
selectInfo.curvePointInfo = {};
|
|
|
+ selectInfo.circleInfo = this.isSelectCircle(
|
|
|
+ position,
|
|
|
+ exceptVectorIds.exceptCircleId
|
|
|
+ );
|
|
|
//交叉口拐弯处的控制点
|
|
|
selectInfo.controlPointInfo = this.isSelectCrossControlPoint(
|
|
|
position,
|
|
@@ -193,6 +193,70 @@ export default class ListenLayer {
|
|
|
return lineInfo;
|
|
|
}
|
|
|
|
|
|
+ isSelectCircle(position, exceptCircleId) {
|
|
|
+ let circleInfo = {
|
|
|
+ circleId: null,
|
|
|
+ type: null,
|
|
|
+ distance: null,
|
|
|
+ };
|
|
|
+ const circles = dataService.getCircles();
|
|
|
+ for (const circleId in circles) {
|
|
|
+ if (circleId == exceptCircleId) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ const circle = dataService.getCircle(circleId);
|
|
|
+ const distance = mathUtil.getDistance(position, circle.center);
|
|
|
+ if (distance < circle.radius - Constant.minAdsorbPix) {
|
|
|
+ if (circleInfo.circleId == null || distance < circleInfo.distance) {
|
|
|
+ circleInfo = {
|
|
|
+ circleId: circleId,
|
|
|
+ type: VectorType.Circle,
|
|
|
+ distance: distance,
|
|
|
+ select: SelectState.Select,
|
|
|
+ x: circle.center.x,
|
|
|
+ y: circle.center.y,
|
|
|
+ };
|
|
|
+ }
|
|
|
+ } else if (
|
|
|
+ distance > circle.radius - Constant.minAdsorbPix &&
|
|
|
+ distance < circle.radius + Constant.minAdsorbPix
|
|
|
+ ) {
|
|
|
+ if (circleInfo.circleId == null || distance < circleInfo.distance) {
|
|
|
+ const joins = mathUtil.getInsertPointBetweenCircleAndLine(
|
|
|
+ circle.center.x,
|
|
|
+ circle.center.y,
|
|
|
+ position.x,
|
|
|
+ position.y,
|
|
|
+ circle.center.x,
|
|
|
+ circle.center.y,
|
|
|
+ circle.radius
|
|
|
+ );
|
|
|
+ let join = {};
|
|
|
+ if (
|
|
|
+ mathUtil.getDistance(joins[0], position) <
|
|
|
+ mathUtil.getDistance(joins[1], position)
|
|
|
+ ) {
|
|
|
+ join.x = joins[0].x;
|
|
|
+ join.y = joins[0].y;
|
|
|
+ } else {
|
|
|
+ join.x = joins[1].x;
|
|
|
+ join.y = joins[1].y;
|
|
|
+ }
|
|
|
+ circleInfo = {
|
|
|
+ circleId: circleId,
|
|
|
+ type: VectorType.Circle,
|
|
|
+ distance: Math.abs(distance - circle.radius),
|
|
|
+ select: SelectState.CircleRing, //选中环
|
|
|
+ x: join.x,
|
|
|
+ y: join.y,
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return circleInfo;
|
|
|
+ }
|
|
|
+
|
|
|
// isSelectCurveLine(position, exceptCurveLineId) {
|
|
|
// let curveLineInfo = {
|
|
|
// curveLineId: null,
|
|
@@ -892,6 +956,12 @@ export default class ListenLayer {
|
|
|
this.modifyPoint.x = info.curveLineInfo.x;
|
|
|
this.modifyPoint.y = info.curveLineInfo.y;
|
|
|
}
|
|
|
+ } else if (info && info.circleInfo.circleId) {
|
|
|
+ this.modifyPoint = {};
|
|
|
+ this.modifyPoint.linkedCircleId = info.circleInfo.circleId;
|
|
|
+ this.modifyPoint.select = info.circleInfo.select;
|
|
|
+ this.modifyPoint.x = info.circleInfo.x;
|
|
|
+ this.modifyPoint.y = info.circleInfo.y;
|
|
|
} else if (info && info.roadPointInfo.linkedRoadPointIdX) {
|
|
|
this.modifyPoint = {};
|
|
|
this.modifyPoint.linkedRoadPointIdX =
|
|
@@ -1018,6 +1088,12 @@ export default class ListenLayer {
|
|
|
VectorType.CurveLine,
|
|
|
SelectState.Select
|
|
|
);
|
|
|
+ } else if (this.modifyPoint.linkedCircleId) {
|
|
|
+ stateService.setSelectItem(
|
|
|
+ this.modifyPoint.linkedCircleId,
|
|
|
+ VectorType.Circle,
|
|
|
+ this.modifyPoint.select
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
let newSelectItem = stateService.getSelectItem();
|