我目前正在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. 如何撤消launchctl命令?
- 2. 如何撤消./configure命令
- 3. 撤消的Git track命令
- 4. TextBox撤消/重做命令
- 5. 撤消svn刪除命令
- 6. 如何撤消TRUNCATE命令
- 7. 更改爲QTextEdit而不添加撤消命令到撤消堆棧
- 8. 取消選中複選框不會撤消命令嗎?
- 9. 如何撤消hg update -C -r 3命令在mercurial
- 10. tf.exe vc合併/放棄命令可以撤消嗎?
- 11. 是否可以使用adb命令撤消管理權限?
- 12. 有沒有一個命令來撤消git init?
- 13. 撤消最近的「git add」。命令在git bash上觸發
- 14. 如何在Android Studio中撤消最新的git命令?
- 15. MATLAB系統命令
- 16. MATLAB聲音命令
- 17. 在yum歷史記錄中停止取消依賴包撤消命令
- 18. 撤消git的MV(重命名)
- 19. 如何在git中「撤消撤消」?
- 20. 刷卡撤消像gmail的撤消
- 21. MATLAB結構撤併
- 22. InkCanvas的撤銷/重做命令堆棧
- 23. 從Matlab 2010運行matlab 2008命令?
- 24. Matlab「系統」命令卡住
- 25. MATLAB中的xcorr命令
- 26. MATLAB命令使用varargin
- 27. 在Matlab中的eval()命令
- 28. 經與Matlab的executeCypher'命令
- 29. 用Java命令Matlab的
- 30. 撤消簽入?
+1:好主意。另一個是每次操作後將所有內容保存到磁盤,儘管這可能是一個過度殺傷:) – Anonymous 2012-04-13 13:37:10