Add label archive function
This commit is contained in:
parent
276c8c63a1
commit
068acb19a8
@ -33,7 +33,13 @@ class CommandBar extends Component<ICommandBarProps & IMixinSettingProps & IMixi
|
||||
}}
|
||||
>
|
||||
<div>
|
||||
{this.getRenderButton({ iconName: "Save", i18NKey: "Command.Bar.Save.Info" })}
|
||||
{this.getRenderButton({
|
||||
iconName: "Save",
|
||||
i18NKey: "Command.Bar.Save.Info",
|
||||
click: () => {
|
||||
this.props.status?.archive.save(this.props.status.model);
|
||||
}
|
||||
})}
|
||||
{this.getRenderButton({
|
||||
iconName: this.props.status?.actuator.start() ? "Pause" : "Play",
|
||||
i18NKey: "Command.Bar.Play.Info",
|
||||
|
@ -1,10 +1,18 @@
|
||||
import { Emitter, EventType } from "@Model/Emitter";
|
||||
import { Model } from "./Model";
|
||||
import { IArchiveCtrlObject } from "@Model/CtrlObject";
|
||||
import { Model } from "@Model/Model";
|
||||
import { IArchiveLabel } from "@Model/Label";
|
||||
|
||||
interface IArchiveEvent {
|
||||
fileChange: Archive;
|
||||
}
|
||||
|
||||
interface IArchiveObject {
|
||||
nextIndividualId: number;
|
||||
objectPool: IArchiveCtrlObject[];
|
||||
labelPool: IArchiveLabel[];
|
||||
}
|
||||
|
||||
class Archive<
|
||||
M extends any = any,
|
||||
E extends Record<EventType, any> = {}
|
||||
@ -35,17 +43,32 @@ class Archive<
|
||||
* 模型转换为文件
|
||||
*/
|
||||
public save(model: Model): string {
|
||||
let fileData: Record<string, any> = {};
|
||||
|
||||
// 保存对象
|
||||
fileData.objects = [];
|
||||
|
||||
// 记录
|
||||
model.objectPool.map((object) => {
|
||||
|
||||
// 存贮 CtrlObject
|
||||
const objectPool: IArchiveCtrlObject[] = [];
|
||||
model.objectPool.forEach(obj => {
|
||||
objectPool.push(obj.toArchive());
|
||||
})
|
||||
|
||||
return JSON.stringify(model);
|
||||
// 存储 Label
|
||||
const labelPool: IArchiveLabel[] = [];
|
||||
model.labelPool.forEach(obj => {
|
||||
labelPool.push(obj.toArchive());
|
||||
})
|
||||
|
||||
const fileData: IArchiveObject = {
|
||||
nextIndividualId: model.nextIndividualId,
|
||||
objectPool: objectPool,
|
||||
labelPool: labelPool
|
||||
};
|
||||
|
||||
console.log(fileData);
|
||||
console.log({value: JSON.stringify(fileData)});
|
||||
|
||||
this.isSaved = true;
|
||||
this.emit( ...["fileChange", this] as any );
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,8 +1,11 @@
|
||||
import { LabelObject } from "@Model/Label"
|
||||
import { v4 as uuid } from "uuid";
|
||||
import { parameter2ArchiveObject, archiveObject2Parameter, IArchiveParseFn } from "@Model/Parameter";
|
||||
import type { IAnyObject, Model } from "@Model/Model";
|
||||
import type { ObjectID } from "@Model/Model";
|
||||
import {
|
||||
parameter2ArchiveObject, archiveObject2Parameter,
|
||||
IArchiveParseFn, IObjectParamArchiveType, object2ArchiveObject
|
||||
} from "@Model/Parameter";
|
||||
|
||||
interface IArchiveCtrlObject {
|
||||
displayName: CtrlObject["displayName"];
|
||||
@ -12,6 +15,7 @@ interface IArchiveCtrlObject {
|
||||
id: string;
|
||||
renderParameter: any;
|
||||
deleteFlag: CtrlObject["deleteFlag"];
|
||||
labels: IObjectParamArchiveType[];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -117,20 +121,26 @@ class CtrlObject<A extends IAnyObject = IAnyObject> extends LabelObject {
|
||||
update: !!this.update,
|
||||
id: this.id,
|
||||
renderParameter: parameter2ArchiveObject(this.renderParameter),
|
||||
deleteFlag: !!this.deleteFlag
|
||||
deleteFlag: !!this.deleteFlag,
|
||||
labels: this.labels.map((label) => {
|
||||
return object2ArchiveObject(label);
|
||||
})
|
||||
} as any;
|
||||
}
|
||||
|
||||
public fromArchive(archive: IArchiveCtrlObject & A, paster?: IArchiveParseFn): void {
|
||||
public fromArchive(archive: IArchiveCtrlObject & A, paster: IArchiveParseFn): void {
|
||||
this.displayName = archive.displayName;
|
||||
this.color = archive.color.concat([]);
|
||||
this.display = !!archive.display;
|
||||
this.update = !!archive.update;
|
||||
this.id = archive.id;
|
||||
this.renderParameter = archiveObject2Parameter(
|
||||
archive.renderParameter, paster ?? (() => undefined)
|
||||
);
|
||||
this.deleteFlag = !!archive.deleteFlag;
|
||||
this.renderParameter = archiveObject2Parameter(
|
||||
archive.renderParameter, paster
|
||||
);
|
||||
this.labels = archive.labels.map((obj) => {
|
||||
return paster(obj) as any;
|
||||
}).filter((c) => !!c);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -443,7 +443,7 @@ class Group extends CtrlObject<IArchiveGroup> {
|
||||
this.killCount = archive.killCount,
|
||||
this.behaviors = archive.behaviors.map((item) => {
|
||||
return item ? paster(item) as any : undefined;
|
||||
});
|
||||
}).filter(c => !!c);
|
||||
}
|
||||
|
||||
public constructor(model: Model) {
|
||||
|
@ -1,6 +1,14 @@
|
||||
import type { Model, ObjectID } from "@Model/Model";
|
||||
import { v4 as uuid } from "uuid";
|
||||
|
||||
interface IArchiveLabel {
|
||||
isBuildIn: boolean;
|
||||
id: string;
|
||||
name: string;
|
||||
color: number[];
|
||||
deleteFlag: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据标签
|
||||
*/
|
||||
@ -83,6 +91,24 @@ class Label {
|
||||
this.isBuildIn = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public toArchive(): IArchiveLabel {
|
||||
return {
|
||||
isBuildIn: this.isBuildIn,
|
||||
id: this.id,
|
||||
name: this.name,
|
||||
color: this.color.concat([]),
|
||||
deleteFlag: this.deleteFlag
|
||||
} as any;
|
||||
}
|
||||
|
||||
public fromArchive(archive: IArchiveLabel): void {
|
||||
this.isBuildIn = archive.isBuildIn,
|
||||
this.id = archive.id,
|
||||
this.name = archive.name,
|
||||
this.color = archive.color.concat([]),
|
||||
this.deleteFlag = archive.deleteFlag
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -93,7 +119,7 @@ class LabelObject {
|
||||
/**
|
||||
* 标签集合
|
||||
*/
|
||||
private labels: Label[] = [];
|
||||
public labels: Label[] = [];
|
||||
|
||||
/**
|
||||
* 获取全部 Label
|
||||
@ -133,4 +159,4 @@ class LabelObject {
|
||||
}
|
||||
}
|
||||
|
||||
export { Label, LabelObject };
|
||||
export { Label, LabelObject, IArchiveLabel };
|
@ -39,7 +39,7 @@ class Range extends CtrlObject<IArchiveRange> {
|
||||
};
|
||||
}
|
||||
|
||||
public override fromArchive(archive: IArchiveCtrlObject & IArchiveRange, paster?: IArchiveParseFn): void {
|
||||
public override fromArchive(archive: IArchiveCtrlObject & IArchiveRange, paster: IArchiveParseFn): void {
|
||||
super.fromArchive(archive, paster);
|
||||
this.position = archive.position.concat([]),
|
||||
this.radius = archive.radius.concat([])
|
||||
|
Loading…
Reference in New Issue
Block a user