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.
183 lines
3.9 KiB
183 lines
3.9 KiB
import { Vector3 } from 'three';
|
|
import * as THREE from 'three';
|
|
|
|
import
|
|
{
|
|
AllObjectData,
|
|
BlockTableRecord,
|
|
CADFactory,
|
|
CADFile,
|
|
CADObject,
|
|
ColorMaterial,
|
|
CommandHistoryRecord,
|
|
CreateObjectData,
|
|
Database,
|
|
HistorycRecord,
|
|
Line,
|
|
ObjectAllDataHistoryRecord,
|
|
RemoveObjectData,
|
|
} from '../../src/DatabaseServices/FileSystem';
|
|
|
|
function CadObjectToString(obj: CADObject)
|
|
{
|
|
let file = new CADFile();
|
|
obj.WriteFile(file);
|
|
return file.ToString();
|
|
}
|
|
|
|
test('测试创建', () =>
|
|
{
|
|
for (let C of [AllObjectData,
|
|
BlockTableRecord,
|
|
CommandHistoryRecord,
|
|
CreateObjectData,
|
|
HistorycRecord,
|
|
Line,
|
|
ObjectAllDataHistoryRecord,
|
|
RemoveObjectData,
|
|
CADObject])
|
|
{
|
|
//确保每个对象都被正确的创建
|
|
let obj = CADFactory.CreateObject(C.name /*?*/);
|
|
let str = CadObjectToString(obj);
|
|
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 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 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 Vector3(10, 4, 2);
|
|
(id1.Object as Line).EndPoint = new Vector3(2, 2, 2);
|
|
let file = db.FileWrite();
|
|
console.log(file.ToString());
|
|
|
|
db.hm.StartCmd("");
|
|
|
|
(id1.Object as Line).StartPoint = new Vector3(100, 300, 400);
|
|
(id1.Object as Line).EndPoint = new 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('create material', () =>
|
|
{
|
|
let materialRed = new ColorMaterial();
|
|
|
|
materialRed.Color = new THREE.Color(321321);
|
|
|
|
materialRed.ClassName /*?*/
|
|
|
|
let f = new CADFile();
|
|
f.WriteObject(materialRed);
|
|
let materialCopy = f.ReadObject(undefined);
|
|
|
|
f.ToString()/*?*/
|
|
|
|
CadObjectToString(materialRed) /*?*/
|
|
});
|