我目前正在MATLAB上開發一個基本的圖像處理應用程序。我必須執行撤銷到以前的狀態功能。我搜索的網絡有uiundo但它只是撤銷GUI操作。有一個簡單的命令來撤消。謝謝。MATLAB撤消命令
回答
如果你有足夠的內存空間,你可以將所有的程序狀態存儲在一個結構體中,然後將這個結構體推送到circular buffer。緩衝區中元素的數量將決定撤消級別的數量。
在我看來,你將不得不通過使用Command pattern來實現你自己的多級(或一級)撤消。
這將要求您將操作包裝到包含執行操作和恢復狀態的邏輯的對象中。沒有銀彈,需要努力工作。
一般撤消將是複雜的,但如果你只對節約MATLAB變量的狀態並返回到保存的狀態感興趣,這可能是一個可能的解決方案:
save_state.m:
SavedStateFolder = '/home/user/matlab_saved_states_folder/';
save([ SavedStateFolder, 'saved_state_', sprintf('%06d', (size(dir(SavedStateFolder), 1) - 1)) ]);
fprintf('state saved in saved_state_%s.mat\n', sprintf('%06d', (size(dir(SavedStateFolder), 1) - 2)));
undo_index.m:
function undo_index()
SavedStateFolder = '/home/user/matlab_saved_states_folder/';
FilesStruct = dir(SavedStateFolder);
LastSavedStateIndex = size(FilesStruct, 1) - 2;
if (LastSavedStateIndex < 1)
fprintf('No saved states available.\n');
else
fprintf('Index of last saved state is %06d\n', LastSavedStateIndex);
end
return
undo.m:
SavedStateFolder = '/home/user/matlab_saved_states_folder/';
load([ SavedStateFolder, 'saved_state_', sprintf('%06d', input('Enter saved state index ')) ]);
然後,您可以使用save_state
來保存MATLAB變量的狀態,或者如果要跟蹤所有更改,甚至可以用save_state;
作爲前綴。當您想要返回到先前的變量狀態時,您可以運行undo_index
以找出上次保存的狀態的索引,然後您可以運行undo
並輸入由undo_index
給出的索引,或者返回較早的較小正整數變量的狀態。第一個保存的狀態文件將被命名爲saved_state_000001.mat
,然後saved_state_000002.mat
等等......請注意,save_state
將所有內容保存到磁盤,因此如果您想在循環中嘗試使用SSD或RAM磁盤,數據。還要注意,當您運行save_state
或undo
時,名爲SavedStateFolder
的變量的先前內容會丟失。爲了避免這種情況,可以更換的SavedStateFolder
所有實例save.state.m
和undo.m
用硬編碼的文件夾名稱,例如:
save_state.m:
save([ '/home/user/matlab_saved_states_folder/', 'saved_state_', sprintf('%06d', (size(dir('/home/user/matlab_saved_states_folder/'), 1) - 1)) ]);
fprintf('state saved in saved_state_%s.mat\n', sprintf('%06d', (size(dir('/home/user/matlab_saved_states_folder/'), 1) - 2)));
undo.m:
load([ '/home/user/matlab_saved_states_folder/', 'saved_state_', sprintf('%06d', input('Enter saved state index ')) ]);
還請注意,save_state
,undo_index
和undo
假設在SavedStateFolder
中除.
,之外沒有其他文件0和saved_state_*.mat
文件。也可以通過這種方式找到saved_state_*.mat
文件的數量和要保存的運行索引,因此如果刪除了一些以前的saved_state_*.mat
文件,例如沒有。創建相同數量的空文件以替換它們,計數不匹配,並且save_state
可能會將狀態保存在已存在的已保存狀態文件之上。
- 1. 如何撤消./configure命令
- 2. 撤消svn刪除命令
- 3. TextBox撤消/重做命令
- 4. 如何撤消launchctl命令?
- 5. 撤消的Git track命令
- 6. 如何撤消C_INCLUDE_PATH命令?
- 7. 如何撤消TRUNCATE命令
- 8. 如何撤消幾個Git命令?
- 9. 撤消自定義git命令設置
- 10. 更改爲QTextEdit而不添加撤消命令到撤消堆棧
- 11. 取消選中複選框不會撤消命令嗎?
- 12. 撤銷mysql更新命令
- 13. Matlab clc命令
- 14. 如何撤消服務器上git的「git pull origin」命令?
- 15. 如何在Android Studio中撤消最新的git命令?
- 16. 如何可靠地撤消上一次的git pull命令?
- 17. 撤消最近的「git add」。命令在git bash上觸發
- 18. 如何在iPython shell中撤消輸入(不是命令輸出)
- 19. 在canvas中使用fabric.js撤消和重做命令
- 20. 是否可以使用adb命令撤消管理權限?
- 21. 長腳本包括GO命令 - 如果失敗則撤消
- 22. AutoCAD命令被拒絕:當從LISP調用undo時「撤消」
- 23. 如何撤消hg update -C -r 3命令在mercurial
- 24. 是否有撤消git flow init的命令?
- 25. 命令替換和撤消後臺任務
- 26. tf.exe vc合併/放棄命令可以撤消嗎?
- 27. Spring Roo的教程 - 撤消執行日食命令
- 28. 有沒有一個命令來撤消git init?
- 29. MATLAB聲音命令
- 30. MATLAB系統命令
+1:好主意。另一個是每次操作後將所有內容保存到磁盤,儘管這可能是一個過度殺傷:) – Anonymous 2012-04-13 13:37:10