diff --git a/__test__/FileSystem/file.test.ts b/__test__/FileSystem/file.test.ts index 961b640b9..11d4f7181 100644 --- a/__test__/FileSystem/file.test.ts +++ b/__test__/FileSystem/file.test.ts @@ -77,13 +77,13 @@ test('xxx', () => (id1.Object as Line).EndPoint = new Vector3(2, 2, 2); let file = db.FileOut(); console.log(file.ToString()); -}); + console.log(JSON.stringify(db.ObjectOut())); +}); CADFactory.RegisterObject(Line); let l = CADFactory.CreateObject("Line"); -console.log(l); l.ClassName //? diff --git a/src/DatabaseServices/FileSystem.ts b/src/DatabaseServices/FileSystem.ts index b45cf95c8..485da8a36 100644 --- a/src/DatabaseServices/FileSystem.ts +++ b/src/DatabaseServices/FileSystem.ts @@ -123,6 +123,20 @@ export class CADFactory if (createF) return createF(); } + + static ReadObject(data: any, db: Database): CADObject + { + if (data.className) + { + let obj = this.CreateObject(data.className); + if (obj) + { + obj.SetDefaultDb(db); + obj.ObjectIn(data); + return obj + } + } + } } //所有cad对象的基类 @@ -211,6 +225,17 @@ export class CADObject { this.WriteObjectId(file) } + ObjectIn(obj: any) + { + this.objectId = ObjectId.Create(this._db, obj.id); + } + ObjectOut(): Object + { + return { + className: this.ClassName, + id: this.Id.Index + }; + } //局部撤销 ApplyPartialUndo(file: CADObject) { @@ -271,7 +296,7 @@ export class ObjectId static Create(db: Database, index: number): ObjectId { let id = db.GetObjectId(index); - if (!id) + if (!id && index >= 0) { id = new ObjectId(index); db.SetObjectId(index, id); @@ -489,6 +514,19 @@ export class ObjectCollection extends CADObject file.WriteObject(obj); } } + + ObjectIn(obj: any) + { + super.ObjectIn(obj); + let objList: Object[] = obj.objectCol; + this.objectCol = objList.map(o => CADFactory.ReadObject(o, this._db)); + } + ObjectOut(): Object + { + let obj = super.ObjectOut() as any; + obj.objectCol = this.objectCol.map(o => o.ObjectOut()); + return obj; + } //局部撤销 ApplyPartialUndo(undoData: CADObject) { @@ -662,6 +700,19 @@ export class Database this.idCout = file.Read(); this.ModelSpace.FileIn(file); } + + + ObjectIn(obj: any) + { + } + ObjectOut(): Object + { + return { + idCout: this.idCout, + ms: this.ModelSpace.ObjectOut(), + } + } + //创建一个id,自动递增它的索引号,并且会自动加入到db的id列表中. AllocateId(obj: CADObject): ObjectId { @@ -776,6 +827,18 @@ export class Line extends Entity file.Write(this.startPoint.toArray()); file.Write(this.endPoint.toArray()); } + + ObjectIn(obj: any) + { + } + ObjectOut(): Object + { + let obj = super.ObjectOut() as any; + obj.sp = this.startPoint.toArray(); + obj.ep = this.endPoint.toArray(); + return obj + } + ApplyPartialUndo(data) { }