import { CADFiler } from '../../src/DatabaseServices/CADFiler'; import { Database } from '../../src/DatabaseServices/Database'; import { DuplicateRecordCloning } from '../../src/Common/Status'; import { PhysicalMaterialRecord } from '../../src/DatabaseServices/PhysicalMaterialRecord'; import { TextureTableRecord } from '../../src/DatabaseServices/Texture'; import { Factory } from '../../src/DatabaseServices/CADFactory'; import { Entity } from '../../src/DatabaseServices/Entity'; import { ObjectId } from '../../src/DatabaseServices/ObjectId'; new CADFiler(); Factory(TextureTableRecord); test('wblockClone', () => { let f = new CADFiler( [1, 102, 1, 2, 1, false, 0, 1, "", 2, 2, false, 0, 0, 2, 4, false, 0, 2, 1, "TextureTableRecord", 2, 101, false, 4, 1, "贴图1", 1, 1000, 1002, 1, 1, 0, "CAD/images/bd/bdfb0d6740912fc3217e3f9bfa4c53fd.png", 2, 3, false, 0, 2, 1, "PhysicalMaterialRecord", 2, 100, false, 3, 1, "材质1", 2, "#ffffff", false, 0.2, 1, true, 101, 101, 0.1, 101, 0.2, true, true, true, "", 1, -1, 0] ); let db = new Database(); db.FileRead(f); //空db导入. let emptyDb = new Database(); emptyDb.WblockCloneObejcts([db.MaterialTable.GetAt("材质1")], emptyDb.MaterialTable, new Map(), DuplicateRecordCloning.Ignore); expect(emptyDb.FileWrite().Data).toMatchSnapshot(); //重命名 emptyDb.WblockCloneObejcts([db.MaterialTable.GetAt("材质1")], emptyDb.MaterialTable, new Map(), DuplicateRecordCloning.Rename); expect(emptyDb.FileWrite().Data).toMatchSnapshot(); //替换. let replaceDb = new Database(); let material = new PhysicalMaterialRecord(); material.Name = "材质1"; replaceDb.MaterialTable.Add(material); replaceDb.WblockCloneObejcts([db.MaterialTable.GetAt("材质1")], emptyDb.MaterialTable, new Map(), DuplicateRecordCloning.Replace); expect(replaceDb.FileWrite().Data).toMatchSnapshot(); }); test('循环引用', () => { @Factory //@ts-ignore class CircleRef extends Entity { constructor() { super(); } ref: ObjectId; setRef(id: ObjectId) { this.ref = id; } ReadFile(file: CADFiler) { let ver = file.Read(); super.ReadFile(file); this.ref = file.ReadObjectId(); } WriteFile(file: CADFiler) { file.Write(1); super.WriteFile(file); file.WriteHardObjectId(this.ref); } } let db = new Database(); let e1 = new CircleRef(); let e2 = new CircleRef(); db.ModelSpace.Append(e1); db.ModelSpace.Append(e2); e1.setRef(e2.Id); e2.setRef(e1.Id); let empDb = new Database(); empDb.WblockCloneObejcts([e1], empDb.ModelSpace, new Map(), DuplicateRecordCloning.Ignore); expect(empDb.ModelSpace.Entitys.length).toBe(2); let db2 = new Database(); db2.WblockCloneObejcts([e1, e2], db2.ModelSpace, new Map(), DuplicateRecordCloning.Ignore); expect(db2.ModelSpace.Entitys.length).toBe(2); });