- Double Stack架構,請參考下圖:
其中最上面一排,為將編輯過程中的結果依序放入UnDoContainer之中。第二排則是執行UnDo的狀況(將UnDoContainer的記錄取出來執行,並放入ReDoContainer中),最後一個結果是UnDoContainer已經沒有記錄了,不執行任何處理。第三排是執行ReDo的狀況(將ReDoContainer的記錄取出來執行,並放入UnDoContainer中),最後一個結果是ReDoContainer已經沒有記錄了,不執行任何處理。 - 在一般的情況下,UnDo(Pop from UnDo stack, Execute, Push to ReDo stack)、ReDo(Pop form ReDo stack, Excute, Push to UnDo stack)都可以用這種方式完成,但牽涉到Rect Base Edit就不行了,請參考下圖:
由上圖得知每一次的Deform的操作是針對一個特定區塊做編輯,雖然First Deform的After Deform視覺結果和Second Deform的Beform Deform相同,但編輯的區塊卻不同,所以必需當成不同的資料做儲存。 - Pair Record Data實際運作狀況,請參考下圖:
由上圖得知,BeforeData和AfterData都是存在同一筆記錄,當執行UnDo時,就取用BeforeData來執行,而ReDo時,就取用AfterData來執行。 - PS:在實作的過程中,發現其實用一個Vector也可以做到上述的功能,而且也可以滿足清單選擇記錄的需求,但Vector一直在增加記錄時,應該會造成效能上的問題,且清單選擇ReDo記錄這樣的功能,並不常見,因此還是決定採用Double Stack的做法。
革命尚未成功,同志仍需努力…
沒有留言:
張貼留言