实现了部分序列化

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

@ -1,5 +1,5 @@
import { Vector3 } from "three"; 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分配', () => test('id分配', () =>
{ {
CADFactory.RegisterObject(Line); CADFactory.RegisterObject(Line);
@ -96,7 +96,13 @@ test('xxx', () =>
console.log((id1.Object as Line).StartPoint); console.log((id1.Object as Line).StartPoint);
console.log((id1.Object as Line).EndPoint); 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 //#endregion
protected WriteObjectId(file: CADFile)
private WriteObjectId(file: CADFile)
{ {
if (this.objectId) if (this.objectId)
{ {
@ -262,7 +261,7 @@ export class CADObject
else else
file.Write(-1); file.Write(-1);
} }
private ReadObjectId(file: CADFile): ObjectId protected ReadObjectId(file: CADFile): ObjectId
{ {
let index = file.Read(); let index = file.Read();
if (index >= 0 && this._db) if (index >= 0 && this._db)
@ -365,6 +364,11 @@ export class CADFile
} }
WriteObject(obj: CADObject) WriteObject(obj: CADObject)
{ {
if (!obj)
{
this.Write("");
return;
}
let tempFile = new CADFile(); let tempFile = new CADFile();
tempFile.WriteString(obj.ClassName); tempFile.WriteString(obj.ClassName);
obj.WriteFile(tempFile); obj.WriteFile(tempFile);
@ -378,11 +382,14 @@ export class CADFile
tempFile.Data = data; tempFile.Data = data;
let className = tempFile.ReadString(); let className = tempFile.ReadString();
obj = obj ? obj : CADFactory.CreateObject(className); if (className)
obj.SetDefaultDb(db); {
obj.ReadFile(tempFile); obj = obj ? obj : CADFactory.CreateObject(className);
tempFile.Destroy(); obj.SetDefaultDb(db);
return obj; obj.ReadFile(tempFile);
tempFile.Destroy();
return obj;
}
} }
Write(data: any) Write(data: any)
@ -429,14 +436,14 @@ export class CreateObjectData extends CADObject
//对象从文件中读取数据,初始化自身 //对象从文件中读取数据,初始化自身
ReadFile(file: CADFile) ReadFile(file: CADFile)
{ {
file.Write(1);//ver file.Read();//ver;
let data = file.Read(); let data = file.Read();
this.cadFile.Data = data; this.cadFile.Data = data;
} }
//对象将自身数据写入到文件. //对象将自身数据写入到文件.
WriteFile(file: CADFile) WriteFile(file: CADFile)
{ {
file.Read();//ver; file.Write(1);//ver
file.Write(this.cadFile.Data); file.Write(this.cadFile.Data);
} }
//局部撤销 //局部撤销
@ -492,6 +499,35 @@ export class AllObjectData extends CADObject
if (obj) if (obj)
obj.WriteFile(this.file); 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) ReadFile(file: CADFile)
{ {
let ver = file.Read(); 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) 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 //#endregion
@ -687,6 +750,35 @@ export class HistorycRecord extends CADObject
//制定重做时所需要的数据 //制定重做时所需要的数据
redoData: CADObject; redoData: CADObject;
userData: 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 export class ObjectAllDataHistoryRecord extends HistorycRecord

Loading…
Cancel
Save