mirror of https://gitee.com/cf-fz/WebCAD.git
parent
1d1bcc0eaa
commit
08293c92bb
@ -1,109 +0,0 @@
|
||||
/*
|
||||
关于webCAD 文件系统的原型.
|
||||
包括了对象的保存,撤销,还原.
|
||||
|
||||
对象ID更新 引用
|
||||
|
||||
关于对象的撤销和重做设计.
|
||||
|
||||
对象池
|
||||
|
||||
增量保存
|
||||
|
||||
1.应该能够新增和删除图元.
|
||||
2.新增删除图元应该是可以撤销和重做的.
|
||||
3.图元更改是可以撤销和重做的.
|
||||
4.命令事务一致性,事物可以提交也可以取消.
|
||||
5.数据保存和还原
|
||||
6.对象引用应该是可以复制到新图纸的.
|
||||
|
||||
|
||||
创建对象如何撤销和重做?
|
||||
db.AppendEntity(ent);
|
||||
|
||||
当我们删除对象时,尝试只对对象进行标记删除.
|
||||
当历史记录被优化时,我们尝试对删除的对象进行彻底删除
|
||||
|
||||
###关于对象的历史记录信息
|
||||
|
||||
->对象创建
|
||||
....
|
||||
undo:删除该对象,在集合中清除该数据 Remove
|
||||
redo:重新创建该对象.保存完整的数据 A
|
||||
|
||||
->对象删除
|
||||
undo:添加删除标记. P
|
||||
redo:取消删除标记. P
|
||||
|
||||
->对象修改
|
||||
undo:添加补丁. P
|
||||
redo:添加补丁 P
|
||||
|
||||
|
||||
问题:对象完整性保存时,优化重复的保存对象状态(不同命令下)
|
||||
|
||||
R:补丁与完整的对象存储不能优化.
|
||||
假设用A表示完整的对象补丁,P表示局部补丁. 那么以下状态无法被优化.
|
||||
如 A P P P A P P
|
||||
| 这里A部分无法被优化 必须保证拥有旧的和新的全部数据.
|
||||
假设拥有连续的完整补丁.
|
||||
如 A A A A
|
||||
连续的A是可以优化旧数据的.
|
||||
|
||||
结论:不优化.
|
||||
|
||||
|
||||
问题:对象历史记录,完整性保存时优化.(相同命令下)
|
||||
当对象已经尝试完整的保存一个对象时,如果还继续往里面保存一个完整的数据,那么将更新旧的完整数据.
|
||||
比如.
|
||||
A (insert new A).
|
||||
A (update A.redo)
|
||||
|
||||
|
||||
历史记录的数据结构
|
||||
|
||||
cmdName:"Line" //对象的创建命令
|
||||
[
|
||||
Object1:[C]//对象保留的创建的记录
|
||||
]
|
||||
cmdName:"Move" //对象修改命令
|
||||
[
|
||||
Object1:[P],
|
||||
ObjectN:[P],
|
||||
ObjectM:[P],
|
||||
...
|
||||
]
|
||||
cmdName:"Ohther" //假设这个是一个复杂度很高的命令
|
||||
[
|
||||
Object1:[A,P,A,P,A,P,P,P],保存连续的记录.
|
||||
ObjectN:[A,P,A,P,A,P,P,P],
|
||||
ObjectM:[C,P,P,P,P] ,假设C为创建数据
|
||||
...
|
||||
]
|
||||
|
||||
|
||||
优化A
|
||||
当连续2个命令是A时,优化第二个命令A的undo数据为空
|
||||
当第一个数据为A时,优化后续的P.
|
||||
A写入时,只写入undo信息,并不写入redo信息.当命令结束时,写入redo数据.
|
||||
|
||||
优化C:
|
||||
当第一个数据为C时,优化后续的P.
|
||||
同A 写入时,只写入UNDO,并不写入redo,命令结束时,写入redo数据
|
||||
|
||||
|
||||
|
||||
问题:对象id的更新.
|
||||
跨文档复制时,对象的id和引用的id应该被更新.
|
||||
加入ObjectId类.
|
||||
id只有在一个情况下才会更新.跨文档复制时.
|
||||
|
||||
问题:对象的id如何分配.
|
||||
在加入到图形记录时,分配id.
|
||||
|
||||
撤销创建对象,采用完全撤销模式,删除对象与集合的记录.
|
||||
还原对象时,创建对象,并且加入集合.
|
||||
|
||||
|
||||
*/
|
||||
|
Loading…
Reference in new issue