2025-04-15 09:35:54 +08:00
|
|
|
|
import { CADFactory, CADFiler, CADObject, Database, DuplicateRecordCloning, 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);
|
|
|
|
|
}
|
2025-04-14 16:37:17 +08:00
|
|
|
|
|
|
|
|
|
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];
|
|
|
|
|
}
|