实现了部分序列化

pull/7/head
cx 7 years ago
parent 32f48dd8bb
commit 997512d3c7

@ -1,5 +1,5 @@
import { Vector3 } from "three";
import { Database, Line, CADFactory, BlockTableRecord } from '../../src/DatabaseServices/FileSystem';
import { Database, Line, CADFactory, BlockTableRecord, CADFile } from '../../src/DatabaseServices/FileSystem';
test('id分配', () =>
{
CADFactory.RegisterObject(Line);
@ -96,7 +96,13 @@ test('xxx', () =>
console.log((id1.Object as Line).StartPoint);
console.log((id1.Object as Line).EndPoint);
console.log(db.hm.historyRecord);
let f = new CADFile();
db.hm.WriteFile(f);
console.log(f.Data);
console.log(f.ToString());
});

@ -252,8 +252,7 @@ export class CADObject
//#endregion
private WriteObjectId(file: CADFile)
protected WriteObjectId(file: CADFile)
{
if (this.objectId)
{
@ -262,7 +261,7 @@ export class CADObject
else
file.Write(-1);
}
private ReadObjectId(file: CADFile): ObjectId
protected ReadObjectId(file: CADFile): ObjectId
{
let index = file.Read();
if (index >= 0 && this._db)
@ -365,6 +364,11 @@ export class CADFile
}
WriteObject(obj: CADObject)
{
if (!obj)
{
this.Write("");
return;
}
let tempFile = new CADFile();
tempFile.WriteString(obj.ClassName);
obj.WriteFile(tempFile);
@ -378,11 +382,14 @@ export class CADFile
tempFile.Data = data;
let className = tempFile.ReadString();
obj = obj ? obj : CADFactory.CreateObject(className);
obj.SetDefaultDb(db);
obj.ReadFile(tempFile);
tempFile.Destroy();
return obj;
if (className)
{
obj = obj ? obj : CADFactory.CreateObject(className);
obj.SetDefaultDb(db);
obj.ReadFile(tempFile);
tempFile.Destroy();
return obj;
}
}
Write(data: any)
@ -429,14 +436,14 @@ export class CreateObjectData extends CADObject
//对象从文件中读取数据,初始化自身
ReadFile(file: CADFile)
{
file.Write(1);//ver
file.Read();//ver;
let data = file.Read();
this.cadFile.Data = data;
}
//对象将自身数据写入到文件.
WriteFile(file: CADFile)
{
file.Read();//ver;
file.Write(1);//ver
file.Write(this.cadFile.Data);
}
//局部撤销
@ -492,6 +499,35 @@ export class AllObjectData extends CADObject
if (obj)
obj.WriteFile(this.file);
}
//#region -------------------------File-------------------------
//对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化
//类名,保证序列化时得到正确的new
get ClassName(): string
{
return "AllObjectData";
}
//对象从文件中读取数据,初始化自身
ReadFile(file: CADFile)
{
super.ReadFile(file);
let ver = file.Read();
let data = file.Read();
}
//对象将自身数据写入到文件.
WriteFile(file: CADFile)
{
super.WriteFile(file);
file.Write(1);
file.Write(this.file.Data);
}
//局部撤销
ApplyPartialUndo(undoData: CADObject)
{
}
//#endregion
}
//对象集合.
@ -663,11 +699,38 @@ export class CommandHistoryRecord extends CADObject
ReadFile(file: CADFile)
{
let ver = file.Read();
this.commandName = file.Read();
let cout = file.Read();
this.historyCol.clear();
for (let i = 0; i < cout; i++)
{
let id = this.ReadObjectId(file);
let length = file.Read();
let recs = [];
this.historyCol.set(id, recs);
for (let j = 0; j < length; j++)
{
let rec = file.ReadObject(this._db);
recs.push(rec);
}
}
}
//对象将自身数据写入到文件.
WriteFile(file: CADFile)
{
file.Write(1);
file.Write(this.commandName);
file.Write(this.historyCol.size);
for (let [id, recs] of this.historyCol)
{
file.Write(id.Index);
file.Write(recs.length);
for (let rec of recs)
{
file.WriteObject(rec);
}
}
}
//#endregion
@ -687,6 +750,35 @@ export class HistorycRecord extends CADObject
//制定重做时所需要的数据
redoData: CADObject;
userData: CADObject;
//#region -------------------------File-------------------------
//对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化
//类名,保证序列化时得到正确的new
get ClassName(): string
{
return "HistorycRecord";
}
//对象从文件中读取数据,初始化自身
ReadFile(file: CADFile)
{
let ver = file.Read();
this.undoData = file.ReadObject(this._db);
this.redoData = file.ReadObject(this._db);
this.userData = file.ReadObject(this._db);
}
//对象将自身数据写入到文件.
WriteFile(file: CADFile)
{
file.Write(1);
file.WriteObject(this.undoData);
file.WriteObject(this.redoData);
file.WriteObject(this.userData);
}
//#endregion
}
export class ObjectAllDataHistoryRecord extends HistorycRecord

Loading…
Cancel
Save