diff --git a/__test__/FileSystem/__snapshots__/file.test.ts.snap b/__test__/FileSystem/__snapshots__/file.test.ts.snap index c2d384ba0..d1c0f0a1b 100644 --- a/__test__/FileSystem/__snapshots__/file.test.ts.snap +++ b/__test__/FileSystem/__snapshots__/file.test.ts.snap @@ -1,12 +1,12 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`changev 1`] = `"[1,3,[\\"BlockTableRecord\\",1,0,false,1,[\\"Line\\",1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[2,3,4],[0,0,0]]],[\\"MaerialTableRecord\\",1,1,false,0],[\\"ObjectCollection\\",1,2,false,0],1,0,1,[\\"CommandHistoryRecord\\",1,\\"\\",2,0,1,[\\"HistorycRecord\\",1,[\\"RemoveObjectData\\",1,0],[\\"CreateObjectData\\",1,[[\\"Line\\",1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]]],\\"\\"],3,1,[\\"ObjectAllDataHistoryRecord\\",1,1,[\\"AllObjectData\\",1,-1,false,1,[1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]],\\"\\",\\"\\",3]]]"`; +exports[`changev 1`] = `"[1,3,[\\"BlockTableRecord\\",1,0,false,1,[\\"Line\\",1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[2,3,4],[0,0,0]]],[\\"MaerialTableRecord\\",1,1,false,0],[\\"ObjectCollection\\",1,2,false,0],1,0,1,[\\"CommandHistoryRecord\\",1,\\"\\",2,0,1,[\\"HistorycRecord\\",1,[\\"RemoveObjectData\\",1,0],[\\"CreateObjectData\\",1,[[\\"Line\\",1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]]],\\"\\"],3,1,[\\"ObjectAllDataHistoryRecord\\",1,1,[\\"AllObjectData\\",1,[1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]],\\"\\",\\"\\",3]]]"`; -exports[`创建 修改 撤销撤销 重做重做 撤销 重做 1`] = `"[1,3,[\\"BlockTableRecord\\",1,0,false,1,[\\"Line\\",1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[1,2,3],[0,0,0]]],[\\"MaerialTableRecord\\",1,1,false,0],[\\"ObjectCollection\\",1,2,false,0],1,0,1,[\\"CommandHistoryRecord\\",1,\\"\\",2,0,1,[\\"HistorycRecord\\",1,[\\"RemoveObjectData\\",1,0],[\\"CreateObjectData\\",1,[[\\"Line\\",1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]]],\\"\\"],3,1,[\\"ObjectAllDataHistoryRecord\\",1,1,[\\"AllObjectData\\",1,-1,false,1,[1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]],[\\"AllObjectData\\",1,-1,false,1,[1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[1,2,3],[0,0,0]]],\\"\\",3]]]"`; +exports[`创建 修改 撤销撤销 重做重做 撤销 重做 1`] = `"[1,3,[\\"BlockTableRecord\\",1,0,false,1,[\\"Line\\",1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[1,2,3],[0,0,0]]],[\\"MaerialTableRecord\\",1,1,false,0],[\\"ObjectCollection\\",1,2,false,0],1,0,1,[\\"CommandHistoryRecord\\",1,\\"\\",2,0,1,[\\"HistorycRecord\\",1,[\\"RemoveObjectData\\",1,0],[\\"CreateObjectData\\",1,[[\\"Line\\",1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]]],\\"\\"],3,1,[\\"ObjectAllDataHistoryRecord\\",1,1,[\\"AllObjectData\\",1,[1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]],[\\"AllObjectData\\",1,[1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[1,2,3],[0,0,0]]],\\"\\",3]]]"`; -exports[`创建 修改 撤销撤销 重做重做 撤销 重做 2`] = `"[[\\"HistoricManage\\",1,0,1,[\\"CommandHistoryRecord\\",1,\\"\\",2,0,1,[\\"HistorycRecord\\",1,[\\"RemoveObjectData\\",1,0],[\\"CreateObjectData\\",1,[[\\"Line\\",1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]]],\\"\\"],3,1,[\\"ObjectAllDataHistoryRecord\\",1,1,[\\"AllObjectData\\",1,-1,false,1,[1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]],[\\"AllObjectData\\",1,-1,false,1,[1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[1,2,3],[0,0,0]]],\\"\\",3]]]]"`; +exports[`创建 修改 撤销撤销 重做重做 撤销 重做 2`] = `"[[\\"HistoricManage\\",1,0,1,[\\"CommandHistoryRecord\\",1,\\"\\",2,0,1,[\\"HistorycRecord\\",1,[\\"RemoveObjectData\\",1,0],[\\"CreateObjectData\\",1,[[\\"Line\\",1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]]],\\"\\"],3,1,[\\"ObjectAllDataHistoryRecord\\",1,1,[\\"AllObjectData\\",1,[1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[0,0,0],[0,0,0]]],[\\"AllObjectData\\",1,[1,1,3,false,7,-1,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],1,[1,2,3],[0,0,0]]],\\"\\",3]]]]"`; -exports[`测试创建 1`] = `"[[\\"AllObjectData\\",1,-1,false,1,[]]]"`; +exports[`测试创建 1`] = `"[[\\"AllObjectData\\",1,[]]]"`; exports[`测试创建 2`] = `"[[\\"BlockTableRecord\\",1,-1,false,0]]"`; diff --git a/__test__/FileSystem/file.test.ts b/__test__/FileSystem/file.test.ts index bf017cd3a..2efb9d965 100644 --- a/__test__/FileSystem/file.test.ts +++ b/__test__/FileSystem/file.test.ts @@ -1,9 +1,9 @@ import * as THREE from 'three'; - +import { AllObjectData } from '../../src/DatabaseServices/AllObjectData'; import { BlockTableRecord } from '../../src/DatabaseServices/BlockTableRecord'; import { CADFactory } from '../../src/DatabaseServices/CADFactory'; import { CADFile } from '../../src/DatabaseServices/CADFile'; -import { AllObjectData, CADObject } from '../../src/DatabaseServices/CADObject'; +import { CADObject } from '../../src/DatabaseServices/CADObject'; import { CommandHistoryRecord } from '../../src/DatabaseServices/CommandHistoryRecord'; import { CreateObjectData } from '../../src/DatabaseServices/CreateObjectData'; import { Database } from '../../src/DatabaseServices/Database'; diff --git a/src/DatabaseServices/AllObjectData.ts b/src/DatabaseServices/AllObjectData.ts new file mode 100644 index 000000000..0276f644d --- /dev/null +++ b/src/DatabaseServices/AllObjectData.ts @@ -0,0 +1,39 @@ +import { Factory } from './CADFactory'; +import { CADFile } from './CADFile'; +import { ISerialize } from './ISerialize'; +import { CADObject } from './CADObject'; +/** + * 保存对象创建或者修改时的所有数据记录 + * + * @export + * @class AllObjectData + * @extends {IFileReadWrite} + */ +@Factory +export class AllObjectData implements ISerialize +{ + file: CADFile; + constructor(obj?: CADObject) + { + this.file = new CADFile(); + if (obj) + obj.WriteFile(this.file); + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file: CADFile) + { + let ver = file.Read(); + let data = file.Read(); + this.file.Data = data; + return this; + } + //对象将自身数据写入到文件. + WriteFile(file: CADFile) + { + file.Write(1); + file.Write(this.file.Data); + return this; + } +} diff --git a/src/DatabaseServices/CADFile.ts b/src/DatabaseServices/CADFile.ts index 9cf748094..a58aff268 100644 --- a/src/DatabaseServices/CADFile.ts +++ b/src/DatabaseServices/CADFile.ts @@ -69,10 +69,11 @@ export class CADFile let className = tempFile.ReadString(); if (className) { - if (!obj) + if (obj === undefined) { obj = CADFactory.CreateObject(className); - obj.SetDefaultDb(db); + if (db !== undefined && obj instanceof CADObject) + obj.SetDefaultDb(db); } obj.ReadFile(tempFile); tempFile.Destroy(); diff --git a/src/DatabaseServices/CADObject.ts b/src/DatabaseServices/CADObject.ts index 08b0d394f..9c97965a7 100644 --- a/src/DatabaseServices/CADObject.ts +++ b/src/DatabaseServices/CADObject.ts @@ -1,9 +1,10 @@ -import { Factory } from './CADFactory'; import { CADFile } from './CADFile'; import { CommandHistoryRecord } from './CommandHistoryRecord'; import { Database } from './Database'; import { ISerialize } from './ISerialize'; import { ObjectId } from './ObjectId'; +import { EraseEntityData } from './EraseEntityData'; +import { AllObjectData } from './AllObjectData'; export abstract class CADObject { @@ -124,7 +125,7 @@ export abstract class CADObject { let file = new CADFile(); file.WriteObject(this); - let newObject = file.ReadObject(undefined) as this; + let newObject = file.ReadObject() as this; newObject.objectId = undefined; newObject._db = undefined; return newObject; @@ -160,63 +161,3 @@ export abstract class CADObject } } } - -/** - * 保存对象创建或者修改时的所有数据记录 - * - * @export - * @class AllObjectData - * @extends {IFileReadWrite} - */ -@Factory -export class AllObjectData extends CADObject -{ - file: CADFile; - constructor(obj?: CADObject) - { - super(); - this.file = new CADFile(); - if (obj) - obj.WriteFile(this.file); - } - - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - - //对象从文件中读取数据,初始化自身 - ReadFile(file: CADFile) - { - super.ReadFile(file); - let ver = file.Read(); - let data = file.Read(); - this.file.Data = data; - return this; - } - //对象将自身数据写入到文件. - WriteFile(file: CADFile) - { - super.WriteFile(file); - file.Write(1); - file.Write(this.file.Data); - return this; - } - //#endregion -} - -@Factory -export class EraseEntityData implements ISerialize -{ - ReadFile(file: CADFile): this - { - this.isErase = file.Read(); - return this; - } - WriteFile(file: CADFile): this - { - file.Write(this.isErase); - return this; - } - constructor(public isErase = true) - { - } -} diff --git a/src/DatabaseServices/CommandHistoryRecord.ts b/src/DatabaseServices/CommandHistoryRecord.ts index c84486a63..504350664 100644 --- a/src/DatabaseServices/CommandHistoryRecord.ts +++ b/src/DatabaseServices/CommandHistoryRecord.ts @@ -1,6 +1,7 @@ import { Factory } from './CADFactory'; import { CADFile } from './CADFile'; -import { CADObject, EraseEntityData } from './CADObject'; +import { CADObject } from './CADObject'; +import { EraseEntityData } from "./EraseEntityData"; import { HistorycRecord } from './HistorycRecord'; import { ObjectAllDataHistoryRecord } from './ObjectAllDataHistoryRecord'; import { ObjectId } from './ObjectId'; diff --git a/src/DatabaseServices/Entity.ts b/src/DatabaseServices/Entity.ts index 82605745f..1774f3580 100644 --- a/src/DatabaseServices/Entity.ts +++ b/src/DatabaseServices/Entity.ts @@ -406,4 +406,3 @@ export class Entity extends CADObject //#endregion } - diff --git a/src/DatabaseServices/EraseEntityData.ts b/src/DatabaseServices/EraseEntityData.ts new file mode 100644 index 000000000..68f1d8c72 --- /dev/null +++ b/src/DatabaseServices/EraseEntityData.ts @@ -0,0 +1,20 @@ +import { Factory } from './CADFactory'; +import { CADFile } from './CADFile'; +import { ISerialize } from './ISerialize'; +@Factory +export class EraseEntityData implements ISerialize +{ + ReadFile(file: CADFile): this + { + this.isErase = file.Read(); + return this; + } + WriteFile(file: CADFile): this + { + file.Write(this.isErase); + return this; + } + constructor(public isErase = true) + { + } +} diff --git a/src/DatabaseServices/ObjectAllDataHistoryRecord.ts b/src/DatabaseServices/ObjectAllDataHistoryRecord.ts index cc2b20e5f..2f7f5d9da 100644 --- a/src/DatabaseServices/ObjectAllDataHistoryRecord.ts +++ b/src/DatabaseServices/ObjectAllDataHistoryRecord.ts @@ -1,6 +1,7 @@ import { Factory } from './CADFactory'; import { CADFile } from './CADFile'; -import { AllObjectData, CADObject } from './CADObject'; +import { CADObject } from './CADObject'; +import { AllObjectData } from "./AllObjectData"; import { HistorycRecord } from './HistorycRecord'; import { ObjectId } from './ObjectId';