import * as THREE from 'three'; import { BlockTableRecord } from '../../src/DatabaseServices/BlockTableRecord'; import { CADFactory } from '../../src/DatabaseServices/CADFactory'; import { CADFile } from '../../src/DatabaseServices/CADFile'; import { CommandHistoryRecord } from '../../src/DatabaseServices/CommandHistoryRecord'; import { CreateObjectData } from '../../src/DatabaseServices/CreateObjectData'; import { Database } from '../../src/DatabaseServices/Database'; import { HistorycRecord } from '../../src/DatabaseServices/HistorycRecord'; import { Line } from '../../src/DatabaseServices/Line'; import { ObjectAllDataHistoryRecord } from '../../src/DatabaseServices/ObjectAllDataHistoryRecord'; import { RemoveObjectData } from '../../src/DatabaseServices/RemoveObjectData'; import { CADObject, AllObjectData } from '../../src/DatabaseServices/CADObject'; function CadObjectToString(obj: CADObject) { let file = new CADFile(); file.WriteObject(obj) return file.ToString(); } test('测试创建', () => { for (let C of [AllObjectData, BlockTableRecord, CommandHistoryRecord, CreateObjectData, HistorycRecord, Line, ObjectAllDataHistoryRecord, RemoveObjectData, ]) { console.log(C); //确保每个对象都被正确的创建 let obj = CADFactory.CreateObject(C.name /*?*/); let str = CadObjectToString(obj); console.log(obj.constructor.name); expect(str).toMatchSnapshot(); //确保对象正确的反序列化 let fileNew = new CADFile(); fileNew.Data = JSON.parse(str); let objNew = CADFactory.CreateObject(C.name); let str2 = CadObjectToString(objNew); //确保反序列化之后的数据是正确的 expect(str).toBe(str2); } }); test('id分配', () => { let db = new Database(); let line = new Line(); //对象添加到模型空间 分配id let id = db.ModelSpace.Append(line); expect(id != undefined).toBeTruthy();//对象已经被创建,所以id被分配 expect(id.Object === line).toBeTruthy();//对象id指向对象 //撤销添加 db.hm.Undo(); expect(id.IsErase).toBeTruthy(); //对象已经被删除 expect(db.ModelSpace.Cout()).toBe(0); //个数应该为0 //还原对象 db.hm.Redo(); expect(db.ModelSpace.Cout()).toBe(1); //对象还原 expect(!id.IsErase).toBeTruthy(); //id指向的对象不被删除 }); test('clone object', () => { let db = new Database(); let line = new Line(); db.ModelSpace.Append(line); line.StartPoint = new THREE.Vector3(9, 9, 8); CadObjectToString(line)/*?*/ let line2 = line.Clone(); CadObjectToString(line2) /*?*/ }); test('changev', () => { let db = new Database(); let l1 = new Line(); let id = db.ModelSpace.Append(l1); db.hm.Undo(); db.hm.Redo(); expect(id.Object !== l1).toBeTruthy(); //创建对象的撤销和重做后 id指向了新的实体 (id.Object as Line).StartPoint = new THREE.Vector3(2, 3, 4); let file = db.FileWrite(); expect(file.ToString()/*?*/).toMatchSnapshot(); }); test('xxx', () => { let db = new Database(); db.hm.StartCmd(""); let l1 = new Line(); let l2 = new Line(); let id1 = db.ModelSpace.Append(l1); let in2 = db.ModelSpace.Append(l2); db.hm.Undo(); //? db.hm.Redo(); //? db.hm.StartCmd(""); db.ModelSpace.Remove(db.GetObjectId(1).Object); db.hm.Undo(); //? db.hm.Undo(); //? db.hm.Redo(); //? // db.hm.StartCmd(""); (id1.Object as Line).StartPoint = new THREE.Vector3(10, 4, 2); (id1.Object as Line).EndPoint = new THREE.Vector3(2, 2, 2); let file = db.FileWrite(); console.log(file.ToString()); db.hm.StartCmd(""); (id1.Object as Line).StartPoint = new THREE.Vector3(100, 300, 400); (id1.Object as Line).EndPoint = new THREE.Vector3(2000, 3000, 4000); db.hm.Undo(); db.hm.Redo(); let f = new CADFile(); db.hm.WriteFile(f); let db2 = new Database(); db2.hm.ReadFile(f); let f3 = new CADFile(); db2.hm.WriteFile(f3); expect(f3.ToString()).toBe(f.ToString());//对象序列化反序列化后 数据应该一样 }); test('创建 修改 撤销撤销 重做重做 撤销 重做', () => { let db = new Database(); let line = new Line(); let id = db.ModelSpace.Append(line); db.hm.StartCmd("U"); line.StartPoint = new THREE.Vector3(1, 2, 3); db.hm.EndCmd(); db.hm.Undo(); /*?*/ db.hm.Undo();/*?*/ db.hm.Redo();/*?*/ db.hm.Redo();/*?*/ db.hm.Undo();/*?*/ db.hm.Redo();/*?*/ expect(db.FileWrite().ToString()).toMatchSnapshot(); expect(CadObjectToString(db.hm)).toMatchSnapshot(); });