mirror of https://gitee.com/cf-fz/WebCAD.git
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.
189 lines
4.8 KiB
189 lines
4.8 KiB
import * as THREE from 'three';
|
|
import { AllObjectData } from '../../src/DatabaseServices/AllObjectData';
|
|
import { BlockTableRecord } from '../../src/DatabaseServices/BlockTableRecord';
|
|
import { CADFactory } from '../../src/DatabaseServices/CADFactory';
|
|
import { CADFiler } from '../../src/DatabaseServices/CADFiler';
|
|
import { CADObject } from '../../src/DatabaseServices/CADObject';
|
|
import { CommandHistoryRecord } from '../../src/DatabaseServices/CommandHistoryRecord';
|
|
import { CreateObjectData } from '../../src/DatabaseServices/CreateObjectData';
|
|
import { Database } from '../../src/DatabaseServices/Database';
|
|
import { Entity } from '../../src/DatabaseServices/Entity/Entity';
|
|
import { HistorycRecord } from '../../src/DatabaseServices/HistorycRecord';
|
|
import { Line } from '../../src/DatabaseServices/Entity/Line';
|
|
import { ObjectAllDataHistoryRecord } from '../../src/DatabaseServices/ObjectAllDataHistoryRecord';
|
|
import { RemoveObjectData } from '../../src/DatabaseServices/RemoveObjectData';
|
|
|
|
function CadObjectToString(obj: CADObject)
|
|
{
|
|
let file = new CADFiler();
|
|
file.WriteObject(obj);
|
|
return file.ToString();
|
|
}
|
|
|
|
test('测试创建', () =>
|
|
{
|
|
for (let C of [AllObjectData,
|
|
BlockTableRecord,
|
|
CommandHistoryRecord,
|
|
CreateObjectData,
|
|
HistorycRecord,
|
|
Line,
|
|
ObjectAllDataHistoryRecord,
|
|
RemoveObjectData,
|
|
])
|
|
{
|
|
//确保每个对象都被正确的创建
|
|
let obj = CADFactory.CreateObject(C.name /*?*/);
|
|
let str = CadObjectToString(obj);
|
|
|
|
expect(str).toMatchSnapshot();
|
|
|
|
//确保对象正确的反序列化
|
|
let fileNew = new CADFiler();
|
|
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
|
|
db.ModelSpace.Append(line);
|
|
let id = line.Id;
|
|
|
|
expect(id != undefined).toBeTruthy();//对象已经被创建,所以id被分配
|
|
expect(id.Object === line).toBeTruthy();//对象id指向对象
|
|
|
|
//撤销添加
|
|
db.hm.Undo();
|
|
|
|
expect(id.IsErase).toBeTruthy(); //对象已经被删除
|
|
expect(db.ModelSpace.Entitys.length).toBe(0); //个数应该为0
|
|
|
|
//还原对象
|
|
db.hm.Redo();
|
|
|
|
expect(db.ModelSpace.Entitys.length).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();
|
|
|
|
db.ModelSpace.Append(l1);
|
|
let id = l1.Id;
|
|
|
|
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();
|
|
db.ModelSpace.Append(l1);
|
|
let id1 = l1.Id;
|
|
db.ModelSpace.Append(l2);
|
|
|
|
db.hm.Undo(); //?
|
|
db.hm.Redo(); //?
|
|
|
|
db.hm.StartCmd("");
|
|
db.ModelSpace.Remove(db.GetObjectId(1).Object as Entity);
|
|
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();
|
|
|
|
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 CADFiler();
|
|
db.hm.WriteFile(f);
|
|
|
|
let db2 = new Database();
|
|
f.database = db2;
|
|
db2.hm.ReadFile(f);
|
|
|
|
let f3 = new CADFiler();
|
|
f3.database = db2;
|
|
db2.hm.WriteFile(f3);
|
|
|
|
expect(f3.ToString()).toBe(f.ToString());//对象序列化反序列化后 数据应该一样
|
|
});
|
|
|
|
test('创建 修改 撤销撤销 重做重做 撤销 重做', () =>
|
|
{
|
|
let db = new Database();
|
|
|
|
let line = new Line();
|
|
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();
|
|
});
|