|
@@ -23,6 +23,8 @@ import History from "./History/History";
|
|
|
import mitt from "mitt";
|
|
|
import { roadService } from "./Service/RoadService";
|
|
|
|
|
|
+const minDragDis = 10;
|
|
|
+
|
|
|
export default class Layer {
|
|
|
constructor(canvas) {
|
|
|
this.canvas = canvas;
|
|
@@ -32,9 +34,7 @@ export default class Layer {
|
|
|
this.renderer = new Render(this);
|
|
|
this.history = new History(this);
|
|
|
|
|
|
- this.display = false;
|
|
|
- this.mousePosition = null;
|
|
|
-
|
|
|
+ this.dragging = false; // 当前是否正在拖拽
|
|
|
this.start();
|
|
|
|
|
|
Object.setPrototypeOf(Object.getPrototypeOf(this), mitt());
|
|
@@ -63,13 +63,16 @@ export default class Layer {
|
|
|
this.canvas.addEventListener("mouseup", this.onMouseUp.bind(this));
|
|
|
this.canvas.addEventListener("mousewheel", this.onWheel.bind(this));
|
|
|
this.canvas.addEventListener("DOMMouseScroll", this.onWheel.bind(this));
|
|
|
+ this.canvas.addEventListener("resize", this.reSize.bind(this));
|
|
|
}
|
|
|
|
|
|
- onMouseDown(e) {
|
|
|
- if (coordinate.center == null) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ reSize = function () {
|
|
|
+ console.log("resize");
|
|
|
+ coordinate.updateForCanvas();
|
|
|
+ this.renderer.autoRedraw();
|
|
|
+ };
|
|
|
|
|
|
+ onMouseDown(e) {
|
|
|
this.startX = e.offsetX || e.layerX;
|
|
|
this.startY = e.offsetY || e.layerY;
|
|
|
|
|
@@ -84,53 +87,10 @@ export default class Layer {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- const eventName = stateService.getEventName();
|
|
|
- //点击第一次
|
|
|
- if (eventName == LayerEvents.AddRoad) {
|
|
|
- let flag = addRoad.setNewRoadPoint(
|
|
|
- "start",
|
|
|
- coordinate.getXYFromScreen({
|
|
|
- x: this.startX,
|
|
|
- y: this.startY,
|
|
|
- }),
|
|
|
- listenLayer.modifyPoint
|
|
|
- );
|
|
|
- if (!flag) {
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- //点击第二次
|
|
|
- else if (eventName == LayerEvents.AddingRoad) {
|
|
|
- let flag = addRoad.setNewRoadPoint(
|
|
|
- "end",
|
|
|
- elementService.newRoad.end,
|
|
|
- listenLayer.modifyPoint
|
|
|
- );
|
|
|
- if (!flag) {
|
|
|
- return;
|
|
|
- }
|
|
|
- if (addRoad.canAdd) {
|
|
|
- addRoad.buildRoad();
|
|
|
- addRoad.clear();
|
|
|
- this.renderer.autoRedraw();
|
|
|
- this.history.save();
|
|
|
- stateService.clearEventName();
|
|
|
- elementService.hideAll();
|
|
|
- } else {
|
|
|
- return;
|
|
|
- }
|
|
|
- } else {
|
|
|
- const selectItem = stateService.getSelectItem();
|
|
|
- if (eventName == null && selectItem) {
|
|
|
- stateService.setDraggingItem(selectItem);
|
|
|
- stateService.setFocusItem(selectItem);
|
|
|
- //this.uiControl.showAttributes(); //弹出
|
|
|
- this.uiControl.currentUI = selectItem.type;
|
|
|
- } else if (eventName == null) {
|
|
|
- this.uiControl.currentUI = null;
|
|
|
- }
|
|
|
- }
|
|
|
this.setEventName("mouseDown");
|
|
|
+ const selectItem = stateService.getSelectItem();
|
|
|
+ const eventName = stateService.getEventName();
|
|
|
+ stateService.setDraggingItem(selectItem);
|
|
|
// 清除上一个状态
|
|
|
// 设置当前事件名称
|
|
|
e.preventDefault();
|
|
@@ -140,10 +100,7 @@ export default class Layer {
|
|
|
onMouseMove(e) {
|
|
|
const X = e.offsetX || e.layerX;
|
|
|
const Y = e.offsetY || e.layerY;
|
|
|
- this.mousePosition = {
|
|
|
- x: X,
|
|
|
- y: Y,
|
|
|
- };
|
|
|
+
|
|
|
let dx = X - this.lastX;
|
|
|
let dy = Y - this.lastY;
|
|
|
|
|
@@ -152,12 +109,21 @@ export default class Layer {
|
|
|
y: Y,
|
|
|
});
|
|
|
|
|
|
+ if (
|
|
|
+ Math.abs(X - this.startX) > minDragDis ||
|
|
|
+ Math.abs(Y - this.startY) > minDragDis
|
|
|
+ ) {
|
|
|
+ // 是否拖拽了
|
|
|
+ this.dragging = true;
|
|
|
+ } else {
|
|
|
+ this.dragging = false;
|
|
|
+ }
|
|
|
const eventName = stateService.getEventName();
|
|
|
|
|
|
// 是否需要重绘
|
|
|
let needAutoRedraw = false;
|
|
|
-
|
|
|
const draggingItem = stateService.getDraggingItem();
|
|
|
+
|
|
|
switch (eventName) {
|
|
|
case null:
|
|
|
//监控
|
|
@@ -174,8 +140,6 @@ export default class Layer {
|
|
|
needAutoRedraw = true;
|
|
|
break;
|
|
|
case LayerEvents.AddRoad:
|
|
|
- stateService.clearDraggingItem();
|
|
|
- stateService.clearFocusItem();
|
|
|
needAutoRedraw = true;
|
|
|
listenLayer.start(position);
|
|
|
if (listenLayer.modifyPoint) {
|
|
@@ -184,19 +148,15 @@ export default class Layer {
|
|
|
y: listenLayer.modifyPoint.y,
|
|
|
};
|
|
|
}
|
|
|
- elementService.execute(null, position);
|
|
|
- elementService.setStartAddRoad(position);
|
|
|
+
|
|
|
+ elementService.setAddingRoadPoint(position);
|
|
|
elementService.showStartAddRoad();
|
|
|
+
|
|
|
+ addRoad.setNewRoadPoint("start", position);
|
|
|
break;
|
|
|
case LayerEvents.AddingRoad:
|
|
|
- stateService.clearDraggingItem();
|
|
|
- stateService.clearFocusItem();
|
|
|
needAutoRedraw = true;
|
|
|
listenLayer.start(position);
|
|
|
- let startPosition = {
|
|
|
- x: addRoad.startInfo.position.x,
|
|
|
- y: addRoad.startInfo.position.y,
|
|
|
- };
|
|
|
if (listenLayer.modifyPoint) {
|
|
|
position = {
|
|
|
x: listenLayer.modifyPoint.x,
|
|
@@ -204,27 +164,13 @@ export default class Layer {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
- elementService.execute(startPosition, position);
|
|
|
- elementService.setStartAddRoad(position);
|
|
|
- if (!elementService.newRoad.display) {
|
|
|
- elementService.setNewRoad(startPosition, position);
|
|
|
- elementService.showNewRoad();
|
|
|
- } else {
|
|
|
- if (!listenLayer.modifyPoint && addRoad.startInfo.linkedPointId) {
|
|
|
- let newEndPosition = elementService.checkAngle(
|
|
|
- position,
|
|
|
- addRoad.startInfo.linkedPointId,
|
|
|
- null
|
|
|
- );
|
|
|
- if (newEndPosition) {
|
|
|
- mathUtil.clonePoint(position, newEndPosition);
|
|
|
- elementService.execute(startPosition, position);
|
|
|
- }
|
|
|
- }
|
|
|
- elementService.setNewRoadGeoType(VectorType.Road);
|
|
|
- elementService.setNewRoadEndPosition(position); //改变end位置
|
|
|
- }
|
|
|
+ elementService.execute(addRoad.startInfo.position, position);
|
|
|
+ elementService.setAddingRoadPoint(position);
|
|
|
+ elementService.setNewRoad(addRoad.startInfo.position, position);
|
|
|
+ elementService.showNewRoad();
|
|
|
+ elementService.setNewRoadGeoType(VectorType.Road);
|
|
|
|
|
|
+ addRoad.setNewRoadPoint("end", position);
|
|
|
addRoad.canAdd = addRoad.canAddRoadForEnd(position);
|
|
|
if (!addRoad.canAdd) {
|
|
|
elementService.setNewRoadState("error");
|
|
@@ -233,6 +179,9 @@ export default class Layer {
|
|
|
}
|
|
|
break;
|
|
|
case LayerEvents.MoveRoad:
|
|
|
+ if (!this.dragging) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
dx = (dx * coordinate.defaultZoom) / coordinate.zoom;
|
|
|
dy = (dy * coordinate.defaultZoom) / coordinate.zoom;
|
|
|
// 1表示可以继续移动,2表示不能移动(启动距离还不够),3表示roadId被删除了,4表示重新开始移动(需要达到一定距离才能启动),5表示不能移动(不合适)
|
|
@@ -268,6 +217,9 @@ export default class Layer {
|
|
|
}
|
|
|
break;
|
|
|
case LayerEvents.MoveRoadPoint:
|
|
|
+ if (!this.dragging) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
let point = dataService.getPoint(draggingItem.vectorId);
|
|
|
listenLayer.start(position, draggingItem.vectorId, point.parent);
|
|
|
if (listenLayer.modifyPoint) {
|
|
@@ -350,15 +302,17 @@ export default class Layer {
|
|
|
|
|
|
let eventName = stateService.getEventName();
|
|
|
const draggingItem = stateService.getDraggingItem();
|
|
|
+ const selectItem = stateService.getSelectItem();
|
|
|
let focusItem = null;
|
|
|
|
|
|
- if (draggingItem && draggingItem.vectorId) {
|
|
|
+ if (!this.dragging && selectItem) {
|
|
|
focusItem = {
|
|
|
- vectorId: draggingItem.vectorId,
|
|
|
- type: draggingItem.type,
|
|
|
+ vectorId: selectItem.vectorId,
|
|
|
+ type: selectItem.type,
|
|
|
cursor: { x: this.lastX, y: this.lastY },
|
|
|
};
|
|
|
stateService.setFocusItem(focusItem);
|
|
|
+ stateService.clearDraggingItem();
|
|
|
}
|
|
|
|
|
|
let position = coordinate.getXYFromScreen({
|
|
@@ -423,18 +377,11 @@ export default class Layer {
|
|
|
break;
|
|
|
case LayerEvents.AddingRoad:
|
|
|
needAutoRedraw = true;
|
|
|
- if (addRoad.startInfo && addRoad.startInfo.linkedPointId) {
|
|
|
- let addRoadStartPoint = dataService.getPoint(
|
|
|
- addRoad.startInfo.linkedPointId
|
|
|
- );
|
|
|
- if (
|
|
|
- addRoad.endInfo.position &&
|
|
|
- Object.keys(addRoadStartPoint.parent).length > 1
|
|
|
- ) {
|
|
|
- stateService.clearEventName();
|
|
|
- addRoad.clear();
|
|
|
- elementService.hideAll();
|
|
|
- }
|
|
|
+ if (addRoad.canAdd) {
|
|
|
+ addRoad.buildRoad();
|
|
|
+ addRoad.clear();
|
|
|
+ this.history.save();
|
|
|
+ elementService.hideAll();
|
|
|
}
|
|
|
break;
|
|
|
case LayerEvents.MoveRoad:
|
|
@@ -506,17 +453,14 @@ export default class Layer {
|
|
|
} else if (selectItem.type == VectorType.Tag) {
|
|
|
stateService.setEventName(LayerEvents.MoveTag);
|
|
|
}
|
|
|
- } else if (eventName == LayerEvents.AddRoad) {
|
|
|
- stateService.setEventName(LayerEvents.AddingRoad);
|
|
|
}
|
|
|
} else if (eventType == "mouseUp") {
|
|
|
if (eventName == LayerEvents.AddTag) {
|
|
|
//可连续添加
|
|
|
//stateService.clearEventName()
|
|
|
- } else if (
|
|
|
- eventName != LayerEvents.AddRoad &&
|
|
|
- eventName != LayerEvents.AddingRoad
|
|
|
- ) {
|
|
|
+ } else if (eventName == LayerEvents.AddRoad) {
|
|
|
+ stateService.setEventName(LayerEvents.AddingRoad);
|
|
|
+ } else {
|
|
|
stateService.clearEventName();
|
|
|
}
|
|
|
}
|