From 33318bbeb8e4454943440f5afc6a5e487988f7a6 Mon Sep 17 00:00:00 2001 From: Cmen <1176967590@qq.com> Date: Fri, 25 Feb 2022 16:38:41 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=88=87=E6=8D=A2overlay?= =?UTF-8?q?=E5=90=8E=E5=88=9B=E5=BB=BA=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/map/editors/BaseOverlayEditor.ts | 1 + src/map/editors/RectangleEditor.ts | 27 ++++++++++++++++++++++++++- src/map/index.ts | 4 +++- src/types/index.ts | 2 ++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/map/editors/BaseOverlayEditor.ts b/src/map/editors/BaseOverlayEditor.ts index 951d4f3..45bccde 100644 --- a/src/map/editors/BaseOverlayEditor.ts +++ b/src/map/editors/BaseOverlayEditor.ts @@ -18,6 +18,7 @@ export abstract class BaseOverlayEditor { finish() { const target = this.editor.getTarget(); this.editor.setTarget(null); + this.editor.close(); return target; } diff --git a/src/map/editors/RectangleEditor.ts b/src/map/editors/RectangleEditor.ts index 336dd9d..ba7aae8 100644 --- a/src/map/editors/RectangleEditor.ts +++ b/src/map/editors/RectangleEditor.ts @@ -2,8 +2,33 @@ import { OverlayTypes } from "@types"; import { BaseOverlayEditor } from "./BaseOverlayEditor"; export class RectangleEditor extends BaseOverlayEditor { + // private _rect: AMap.Rectangle | undefined; + // constructor(map: AMap.Map) { + // super(map); + // this._rect = new AMap.Rectangle({ + // bounds: new AMap.Bounds( + // new AMap.LngLat(0, 0.001), + // new AMap.LngLat(0, 0.001) + // ), + // }); + // } + initEditor(map: AMap.Map) { - return new AMap.RectangleEditor(this.map); + return new AMap.RectangleEditor(map); + } + + finish() { + const target = this.editor.getTarget(); + if (target == null) { + this.editor.close(); + // FixME: 直接close, 切换其他工具会有报错. + (this.editor as any)._creator?.close(); + } else { + this.editor.setTarget(null); + this.editor.close(); + } + + return target; } getType(): OverlayTypes { diff --git a/src/map/index.ts b/src/map/index.ts index 38bab4d..943d476 100644 --- a/src/map/index.ts +++ b/src/map/index.ts @@ -61,6 +61,7 @@ export class MapEditor extends Emitter { update(mapState: IMapState) { const { status, overlayType } = mapState; if (status === "createOverlay") { + this.finishCreateOverlay(); this._currentOverlayEditor = this.overlayEditors.find( (editor) => editor.getType() === overlayType ); @@ -71,6 +72,7 @@ export class MapEditor extends Emitter { finishCreateOverlay() { if (this._currentOverlayEditor == null) return; const target = this._currentOverlayEditor.finish(); + console.log(target); let evt: any = null; if (target != null) { const id = getUuid(); @@ -80,7 +82,7 @@ export class MapEditor extends Emitter { type: this._currentOverlayEditor.getType(), }; } - this.emit(EventTypes.FinishCreateOverlay, evt); + evt && this.emit(EventTypes.FinishCreateOverlay, evt); } initEditors() { diff --git a/src/types/index.ts b/src/types/index.ts index 0b65227..a2cd640 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -12,6 +12,8 @@ declare global { setTarget(target: any): void; getTarget(): MapOverlay; open(): void; + close(): void; + destroy(): void; } class PolygonEditor extends BaseEditor { //