Add group ctrl method in model class

This commit is contained in:
MrKBear 2022-02-18 17:09:52 +08:00
parent e15cc0e410
commit c5014dc838
3 changed files with 81 additions and 9 deletions

View File

@ -1,11 +1,17 @@
import { LabelObject } from "./Label" import { LabelObject } from "./Label"
import type { Model } from "./Model"; import type { Model } from "./Model";
import type { ObjectID } from "./Renderer";
/** /**
* *
*/ */
class CtrlObject extends LabelObject { class CtrlObject extends LabelObject {
/**
*
*/
public id: ObjectID;
/** /**
* *
*/ */
@ -14,9 +20,10 @@ class CtrlObject extends LabelObject {
/** /**
* *
*/ */
public constructor(model: Model) { public constructor(model: Model, id: ObjectID) {
super(); super();
this.model = model; this.model = model;
this.id = id;
} }
} }

View File

@ -2,12 +2,73 @@
import { Individual } from "./Individual"; import { Individual } from "./Individual";
import { Group } from "./Group"; import { Group } from "./Group";
import { Emitter, EventType, EventMixin } from "./Emitter"; import { Emitter, EventType, EventMixin } from "./Emitter";
import { CtrlObject } from "./CtrlObject";
import { ObjectID } from "./Renderer";
type ModelEvent = {
addGroup: Group;
deleteGroup: Group[];
};
/** /**
* *
*/ */
class Model extends Emitter<{}> { class Model extends Emitter<ModelEvent> {
/**
* ID
*/
private idIndex: number = 1;
public get nextId(): number {
return this.idIndex ++;
}
/**
*
*/
public objectPool: CtrlObject[] = [];
/**
*
*/
public addGroup(): void {
console.log(`Model: Creat group with id ${this.idIndex}`);
let group = new Group(this, this.nextId);
this.objectPool.push(group);
this.emit("addGroup", group);
}
/**
*
*/
public deleteGroup(groups: Group[] | ObjectID[]): void {
let deletedGroups: Group[] = [];
this.objectPool = this.objectPool.filter((object) => {
if (!(object instanceof Group)) return true;
let deletedGroup: Group | undefined;
for (let i = 0; i < groups.length; i++) {
if (groups[i] instanceof Group) {
if (groups[i] === object) {
deletedGroup = object;
}
} else {
if (groups[i] === object.id) {
deletedGroup = object;
}
}
}
if (deletedGroup) {
deletedGroups.push(deletedGroup);
return false;
} else {
return true;
}
});
this.emit("deleteGroup", deletedGroups);
}
} }
export { export {
@ -16,5 +77,7 @@ export {
Emitter, Emitter,
EventType, EventType,
EventMixin, EventMixin,
Model Model,
CtrlObject,
ObjectID
} }

View File

@ -1,6 +1,7 @@
import { Component, ReactNode, createRef } from "react"; import { Component, ReactNode, createRef } from "react";
import { ClassicRenderer } from "@GLRender/ClassicRenderer"; import { ClassicRenderer } from "@GLRender/ClassicRenderer";
import { Entry } from "../Entry/Entry"; import { Entry } from "../Entry/Entry";
import { Model } from "@Model/Model";
import "./Laboratory.scss"; import "./Laboratory.scss";
class Laboratory extends Component { class Laboratory extends Component {
@ -21,13 +22,15 @@ class Laboratory extends Component {
} }
const canvas = document.createElement("canvas"); const canvas = document.createElement("canvas");
const renderer = new ClassicRenderer(canvas, { className: "canvas" });
const renderer = new ClassicRenderer(canvas, { this.canvasContRef.current.appendChild(renderer.canvas.dom);
className: "canvas"
});
renderer.onLoad(); renderer.onLoad();
let model = new Model();
model.addGroup();
model.addGroup();
// 测试渲染器 // 测试渲染器
if (true) { if (true) {
renderer.points("0"); renderer.points("0");
@ -49,8 +52,7 @@ class Laboratory extends Component {
} }
(window as any).renderer = renderer; (window as any).renderer = renderer;
(window as any).model = model;
this.canvasContRef.current.appendChild(renderer.canvas.dom);
} }
} }