Add label method

This commit is contained in:
MrKBear 2022-02-22 18:00:06 +08:00
parent 407e3061df
commit 2915bd304c
2 changed files with 70 additions and 2 deletions

View File

@ -1,3 +1,6 @@
import type { Model } from "./Model";
import { ObjectID } from "./Renderer";
/** /**
* *
*/ */
@ -6,7 +9,7 @@ class Label {
/** /**
* *
*/ */
public id: string; public id: ObjectID;
/** /**
* *
@ -18,12 +21,18 @@ class Label {
*/ */
public color?: string; public color?: string;
/**
*
*/
public model: Model;
/** /**
* *
* @param id ID * @param id ID
* @param name * @param name
*/ */
public constructor(id: string, name?: string) { public constructor(model:Model, id: ObjectID, name?: string) {
this.model = model;
this.id = id; this.id = id;
this.name = name; this.name = name;
} }
@ -34,6 +43,16 @@ class Label {
public equal(label: Label): boolean { public equal(label: Label): boolean {
return this === label || this.id === label.id; return this === label || this.id === label.id;
} }
/**
*
*/
public isDeleted(): boolean {
for (let i = 0; i < this.model.labelPool.length; i++) {
if (this.model.labelPool[i].equal(this)) return false;
}
return true;
}
} }
/** /**

View File

@ -5,10 +5,14 @@ import { Range } from "./Range";
import { Emitter, EventType, EventMixin } from "./Emitter"; import { Emitter, EventType, EventMixin } from "./Emitter";
import { CtrlObject } from "./CtrlObject"; import { CtrlObject } from "./CtrlObject";
import { ObjectID, AbstractRenderer } from "./Renderer"; import { ObjectID, AbstractRenderer } from "./Renderer";
import { Label } from "./Label";
type ModelEvent = { type ModelEvent = {
groupAdd: Group; groupAdd: Group;
rangeAdd: Range; rangeAdd: Range;
labelAdd: Label;
labelDelete: Label;
labelChange: Label[];
objectAdd: CtrlObject; objectAdd: CtrlObject;
objectDelete: CtrlObject[]; objectDelete: CtrlObject[];
objectChange: CtrlObject[]; objectChange: CtrlObject[];
@ -32,6 +36,51 @@ class Model extends Emitter<ModelEvent> {
*/ */
public objectPool: CtrlObject[] = []; public objectPool: CtrlObject[] = [];
/**
*
*/
public labelPool: Label[] = [];
/**
*
*/
public addLabel(name: string): Label {
console.log(`Model: Creat label with id ${this.idIndex}`);
let label = new Label(this, this.nextId, name);
this.labelPool.push(label);
this.emit("labelAdd", label);
this.emit("labelChange", this.labelPool);
return label;
}
/**
* Label
* @param name
*/
public deleteLabel(name: Label | ObjectID) {
let deletedLabel: Label | undefined;
let index = 0;
for (let i = 0; i < this.labelPool.length; i++) {
if (name instanceof Label) {
if (this.labelPool[i].equal(name)) {
deletedLabel = this.labelPool[i];
index = i;
}
} else if (name === this.labelPool[i].id) {
deletedLabel = this.labelPool[i];
index = i;
}
}
if (deletedLabel) {
this.labelPool.splice(index, 1);
console.log(`Model: Delete label ${deletedLabel.name ?? deletedLabel.id}`);
this.emit("labelDelete", deletedLabel);
this.emit("labelChange", this.labelPool);
}
}
/** /**
* *
*/ */