From a2797852337e2e061e6ed5e9285a5d7ffa60b6c8 Mon Sep 17 00:00:00 2001 From: ChenX Date: Tue, 19 Dec 2017 11:12:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=99=E5=85=A5=E5=AF=B9=E8=B1=A1=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E8=B5=B7=E5=A7=8B=E5=92=8C=E7=BB=93=E6=9D=9F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __test__/FileSystem/file.test.ts | 12 +++-- src/DatabaseServices/FileSystem.ts | 83 +++++++++++++++++++----------- 2 files changed, 60 insertions(+), 35 deletions(-) diff --git a/__test__/FileSystem/file.test.ts b/__test__/FileSystem/file.test.ts index 11d4f7181..a77172075 100644 --- a/__test__/FileSystem/file.test.ts +++ b/__test__/FileSystem/file.test.ts @@ -1,5 +1,5 @@ import { Vector3 } from "three"; -import { Database, Line, CADFactory } from '../../src/DatabaseServices/FileSystem'; +import { Database, Line, CADFactory, BlockTableRecord } from '../../src/DatabaseServices/FileSystem'; test('id分配', () => { CADFactory.RegisterObject(Line); @@ -21,10 +21,10 @@ test('id分配', () => expect(db.ModelSpace.Cout()).toBe(1); expect(!id.IsErase).toBeTruthy(); - let file = db.FileOut(); + let file = db.FileWrite(); let db2 = new Database(); - db2.FileIn(file); + db2.FileRead(file); console.log(db2.GetObjectId(0)); @@ -49,7 +49,7 @@ test('changev', () => (id.Object as Line).StartPoint = new Vector3(2, 3, 4); - let file = db.FileOut(); + let file = db.FileWrite(); console.log(file.ToString()); }); @@ -75,7 +75,7 @@ test('xxx', () => // 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.FileOut(); + let file = db.FileWrite(); console.log(file.ToString()); console.log(JSON.stringify(db.ObjectOut())); @@ -83,6 +83,8 @@ test('xxx', () => CADFactory.RegisterObject(Line); +CADFactory.RegisterObject(BlockTableRecord); + let l = CADFactory.CreateObject("Line"); l.ClassName //? diff --git a/src/DatabaseServices/FileSystem.ts b/src/DatabaseServices/FileSystem.ts index 485da8a36..0e9a47c9d 100644 --- a/src/DatabaseServices/FileSystem.ts +++ b/src/DatabaseServices/FileSystem.ts @@ -211,8 +211,9 @@ export class CADObject } //对象从文件中读取数据,初始化自身 - FileIn(file: CADFile) + FileRead(file: CADFile) { + let ver = file.Read(); //write Id; this.objectId = this.ReadObjectId(file); if (this.objectId) @@ -221,8 +222,9 @@ export class CADObject } } //对象将自身数据写入到文件. - FileOut(file: CADFile) + FileWrite(file: CADFile) { + file.Write(1); this.WriteObjectId(file) } ObjectIn(obj: any) @@ -324,6 +326,21 @@ export class CADFile private readIndex: number = 0; private dataList: any[] = []; + + Destroy() + { + delete this.dataList; + delete this.readIndex; + } + get Data() + { + return this.dataList; + } + set Data(v) + { + this.dataList = v; + this.Reset(); + } Reset() { this.readIndex = 0; @@ -340,15 +357,23 @@ export class CADFile } WriteObject(obj: CADObject) { - this.WriteString(obj.ClassName); - obj.FileOut(this); + let tempFile = new CADFile(); + tempFile.WriteString(obj.ClassName); + obj.FileWrite(tempFile); + this.Write(tempFile.Data); + tempFile.Destroy();//GC } - ReadObject(db: Database): CADObject + ReadObject(db: Database, obj?: CADObject): CADObject { - let className = this.ReadString(); - let obj = CADFactory.CreateObject(className); + let data = this.Read(); + let tempFile = new CADFile(); + tempFile.Data = data; + + let className = tempFile.ReadString(); + obj = obj ? obj : CADFactory.CreateObject(className); obj.SetDefaultDb(db); - obj.FileIn(this); + obj.FileRead(tempFile); + tempFile.Destroy(); return obj; } @@ -393,10 +418,10 @@ export class AppendData extends CADObject return "AppendData"; } //对象从文件中读取数据,初始化自身 - FileIn(file: CADFile) + FileRead(file: CADFile) { } //对象将自身数据写入到文件. - FileOut(file: CADFile) + FileWrite(file: CADFile) { } //局部撤销 ApplyPartialUndo(file: CADObject) @@ -424,10 +449,10 @@ export class RemoveData extends CADObject return "RemoveData"; } //对象从文件中读取数据,初始化自身 - FileIn(file: CADFile) + FileRead(file: CADFile) { } //对象将自身数据写入到文件. - FileOut(file: CADFile) + FileWrite(file: CADFile) { } //局部撤销 ApplyPartialUndo(file: CADObject) @@ -493,9 +518,9 @@ export class ObjectCollection extends CADObject return "ObjectCollection"; } //对象从文件中读取数据,初始化自身 - FileIn(file: CADFile) + FileRead(file: CADFile) { - super.FileIn(file); + super.FileRead(file); let cout = file.Read(); this.objectCol = []; for (let i = 0; i < cout; i++) @@ -505,9 +530,9 @@ export class ObjectCollection extends CADObject } } //对象将自身数据写入到文件. - FileOut(file: CADFile) + FileWrite(file: CADFile) { - super.FileOut(file); + super.FileWrite(file); file.Write(this.objectCol.length); for (let obj of this.objectCol) { @@ -686,19 +711,17 @@ export class Database this.hm.SetDefaultDb(this); } - FileOut(): CADFile + FileWrite(): CADFile { let file = new CADFile(); file.Write(1);//ver; - file.Write(this.idCout); - this.ModelSpace.FileOut(file); + file.WriteObject(this.ModelSpace); return file; } - FileIn(file: CADFile) + FileRead(file: CADFile) { let ver = file.Read(); - this.idCout = file.Read(); - this.ModelSpace.FileIn(file); + file.ReadObject(this, this.ModelSpace); } @@ -769,14 +792,14 @@ export class BlockTableRecord extends ObjectCollection return "BlockTableRecord"; } //对象从文件中读取数据,初始化自身 - FileIn(file: CADFile) + FileRead(file: CADFile) { - super.FileIn(file); + super.FileRead(file); } //对象将自身数据写入到文件. - FileOut(file: CADFile) + FileWrite(file: CADFile) { - super.FileOut(file); + super.FileWrite(file); } //局部撤销 ApplyPartialUndo(file: CADObject) @@ -812,17 +835,17 @@ export class Line extends Entity } //对象从文件中读取数据,初始化自身 - FileIn(file: CADFile) + FileRead(file: CADFile) { - super.FileIn(file); + super.FileRead(file); let ver = file.Read();//1 this.startPoint.fromArray(file.Read()); this.endPoint.fromArray(file.Read()); } //对象将自身数据写入到文件. - FileOut(file: CADFile) + FileWrite(file: CADFile) { - super.FileOut(file); + super.FileWrite(file); file.Write(1);//ver file.Write(this.startPoint.toArray()); file.Write(this.endPoint.toArray());