我有一个图形系统,用户可以在其中绘制/编辑一些基本形状,如直线、贝塞尔曲线等。
在任何情况下,我都有信息,我可以保存这些信息,以便以后按原样重现场景。
为了实现撤消-重做功能,我计划在场景发生变化时保存此信息(如移动/绘制 Action ),然后再重现此信息。
我已经拥有以自定义格式将此信息导出为文件的功能。
我想知道将绘图的中间阶段存储为一系列临时文件是否是个好主意,或者我应该将此信息存储为字符串列表。
这些技术中的一种与其他技术相比有优势/劣势吗?
人们在图形工具方面遵循的总体趋势是什么?
最佳答案
经典方法在四人组的“设计模式”中有所描述。基本上,您将实现一个 Command 类,并将其派生到 MoveCommand、RotateCommand 等中。每个实例都存储执行该命令所需的信息(例如移动元素时的增量和增量)。命令执行后,将其存储在撤消队列中。当用户选择“撤消”时,您会在命令实例上调用另一个原语 undo(),它基本上做相反的事情(所以在我们的例子中它会移动 -deltax 和 -deltay)。这可以为任何命令实现。
虽然这种方法在实践中运行良好并解决了大量问题,但我自己的经验是它也会导致脆弱的撤消/重做队列,因为一旦其中一个命令不能正确处理“撤消” (或根本),没有办法进一步撤消。
您在每一步捕获绘图状态的提议将需要更多内存。作为交换,您根本不需要实现 Command 类来确保一切都可以撤消。
关于algorithm - 将中间系统状态存储为临时文件或字符串? (用于撤消/重做),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31470486/