You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WebCAD/__test__/FileSystem/wblockClone.test.ts

92 lines
3.0 KiB

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);
});