加入测试代码

pull/7/head
ChenX 7 years ago
parent 1f31a8ddb9
commit fbcfd24e29

@ -137,6 +137,8 @@ class CADObject
{
return this._db;
}
//对象在加入数据库时,必须指定一个源数据库,否则无法读取引用id.
SetDefaultDb(db: Database)
{
if (!this._db)
@ -256,6 +258,10 @@ class ObjectId
this.obj = obj;
}
get IsErase(): boolean
{
return !this.obj || this.obj.IsErase;
}
/*
id, dbid,id,,newid,db
使:
@ -264,12 +270,12 @@ class ObjectId
3.redo
4.
*/
static Create(db: Database, index: number): ObjectId
static Create(db: Database, index: number, obj: CADObject): ObjectId
{
let id = db.GetObjectId(index);
if (!id)
{
id = new ObjectId(index);
id = new ObjectId(index, obj);
db.SetObjectId(index, id);
}
return id;
@ -373,7 +379,7 @@ class AppendData extends CADObject
class RemoveData extends CADObject
{
private index: number;
constructor(index: number)
constructor(index?: number)
{
super();
this.index = index;
@ -426,10 +432,13 @@ class ObjectCollection<T> extends CADObject
this._db.hm.UndoData.WriteObjectHistoryPath(this, hisRec);
}
return obj.Id;
}
Remove(obj: CADObject)
{
ArrayRemove(this.objectCol, obj);
obj.Erase();
if (this._db && this._db.hm.UndoData)
{
let hisRec = new HistoricRecord();
@ -444,6 +453,12 @@ class ObjectCollection<T> extends CADObject
return this.objectCol.length;
}
//迭代器
Entries()
{
return this.objectCol.entries;
}
//#region -----------------------------File-----------------------------
//对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化
//类名,保证序列化时得到正确的new
@ -463,6 +478,7 @@ class ObjectCollection<T> extends CADObject
if (undoData instanceof AppendData)
{
let obj = undoData.getObject(this._db);
this.objectCol.push(obj);
}
else if (undoData instanceof RemoveData)
{
@ -613,7 +629,7 @@ class Database
constructor()
{
this.ModelSpace = new BlockTableRecord();
this.ModelSpace.SetDefaultDb(this);
this.ModelSpace.InitObjectId(this);
this.hm = new HistoricManage();
this.hm.SetDefaultDb(this);
}
@ -646,7 +662,7 @@ class Database
if (obj.Db === this)
{
this.idCout++;
let id = ObjectId.Create(this, this.idCout);
let id = ObjectId.Create(this, this.idCout, obj);
return id;
}
else
@ -706,18 +722,6 @@ class BlockTableRecord extends ObjectCollection<Entity>
super.ApplyPartialUndo(file);
}
//#endregion-----------------------------File End-----------------------------
AppendEntity(ent: Entity): ObjectId
{
if (ent.Db)
{
console.warn("同一个对象无法重复加入图纸中!");
return;
}
this.Append(ent);
return ent.Id;
}
}
//所有图元的基类
class Entity extends CADObject
@ -788,42 +792,59 @@ class Line extends Entity
}
}
CADFactory.RegisterObject(Line);
let db = new Database();
let l = CADFactory.CreateObject("Line") as Line;
console.log(l);
CADFactory.RegisterObject(Line);
l.StartPoint = new Vector3(0, 1, 0);
let id = db.ModelSpace.AppendEntity(l);
db.GetObjectId(0).Object.ClassName /*?*/
test('工厂构造实体', () =>
{
let l = CADFactory.CreateObject("Line") as Line;
console.log(id);
expect(l != undefined).toBeTruthy();
expect(l.ClassName).toBe("Line");
expect(l.Id).toBeUndefined();
});
function createLine()
test('id分配', () =>
{
for (let i = 0; i < 5000; i++)
{
let l = CADFactory.CreateObject("Line") as Line;
}
}
let db = new Database();
let line = new Line();
let id = db.ModelSpace.Append(line);
test('create line', () =>
{
expect(id != undefined).toBeTruthy();
expect(id.Object === line).toBeTruthy();
db.hm.Undo();
expect(id.IsErase).toBeTruthy();
expect(db.ModelSpace.Cout()).toBe(0);
db.hm.Redo();
expect(db.ModelSpace.Cout()).toBe(1);
expect(!id.IsErase).toBeTruthy();
});
// createLine(); //?.
// function createLine()
// {
// for (let i = 0; i < 5000; i++)
// {
// let l = CADFactory.CreateObject("Line") as Line;
// }
// }
function undoRedo()
{
for (let i = 0; i < 5000; i++)
{
db.hm.Undo();
db.hm.Redo();
}
}
// // createLine(); //?.
// function undoRedo()
// {
// for (let i = 0; i < 5000; i++)
// {
// db.hm.Undo();
// db.hm.Redo();
// }
// }
// undoRedo(); //?.
// // undoRedo(); //?.

Loading…
Cancel
Save