现在要做一个类似coreldraw,或者一般的绘图软件中的undo redo的功能。但是不知道怎么一个思路。我自己手中有一个绘图软件的源代码,想在里面实现撤销和重做的功能。如果只是针对单一的操作做撤销好做,比如说我要撤销删除操作,可以吧删除的对象放在缓存中,要做位移操作,可以记录一个相对位移量。但是要对所有的操作,比如删除对象,删除一组对象,删除层,变换线宽 等等,就是对一些普遍的绘图操作来事来实现undo redo,现在思路上不知道怎么来做。我曾想的是用两个ObList 来存放更改对象,但是这只是针对对对象的,如果我对层做操作了,对象的list显然不合适。如果我另外再用一个layerlist,我如何来组织这两个操作的向后次序呢。上面都是我自己考虑的一些问题,也不知道讲没讲清楚。如果有做过这方面功能的能否给个思路呢。谢谢。
用户下达一个操作就产生一个command实例,该实例应该有do()/undo()两个方法来分别对应
它代表的更改操作和还原操作.
所有的Command实例由统一的Manager统一管理,依次取出各个实例调用do方法,如果需要就还原
就取出最后一个实例调用undo()并从Manager的实例列表中移除.
http://topic.csdn.net/u/20100424/12/22e9ae51-e910-46e5-9e0d-28ec99d93dbb.html
但是要对那么多操作在同一个undo redo 中来实现,感觉比较困难
看看这个,或许对你有点帮助