material-editor/src/common/MaterialSerializer.ts

35 lines
1.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { CADFactory, CADFiler, CADObject, Database, DuplicateRecordCloning, Factory, LayerNode, ObjectId, PhysicalMaterialRecord } from "webcad_ue4_api";
// TODO: Danger: 注意入侵性代码
// 疑似是WebCAD中的漏洞当传入new Database()时,
// Database中的filer.ReadObject方法并不会为CadObject.objectId赋值
// 导致后续的CadObject.Id.Index发生空指针异常
// 因此需要修改CAD中的Database.AllocationObjectId尝试手动赋值
// @ts-ignore
Database.prototype.AllocationObjectId = function (this: Database, object: CADObject) {
if (object.Id === undefined) object.objectId = new ObjectId(undefined, undefined);
// @ts-ignore
object.Id.Index = this.idIndex++;
// @ts-ignore
this.idMap.set(object.Id.Index, object.Id);
}
export function MaterialOut(material: PhysicalMaterialRecord): string
{
let db = new Database();
db.WblockCloneObejcts(
[material],
db.MaterialTable,
new Map(),
DuplicateRecordCloning.Ignore
);
return JSON.stringify(db.FileWrite().Data);
}
export function MaterialIn(fileData: Object[]): PhysicalMaterialRecord
{
let f = new CADFiler(fileData);
let db = new Database().FileRead(f);
db.hm.Enable = false;
return db.MaterialTable.Symbols.entries().next().value[1];
}