現在、MATLAB で基本的な画像処理アプリケーションを開発しています。前の状態に戻す機能を実装する必要があります。ネットでuiundoを検索しましたが、GUI アクションのみを元に戻します。元に戻す簡単なコマンドはありますか。ありがとう。
3 に答える
メモリに余裕がある場合は、すべてのプログラム状態を構造体に格納し、この構造体を循環バッファーにプッシュできます。バッファ内の要素の数によって、元に戻すレベルの数が決まります。
Command パターンを使用して、独自の複数レベル (または 1 レベル) の取り消しを実装する必要があるように思えます。
これには、アクションを実行して状態を復元するためのロジックを含むオブジェクトに操作をラップする必要があります。特効薬はありません。ハードワークが必要です。
一般的な元に戻す操作は複雑ですが、MATLAB 変数の状態を保存して保存された状態に戻すことのみに関心がある場合は、これが 1 つの解決策になる可能性があります。
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
SavedStateFolder
save_state
undo
. これを回避するには、SavedStateFolder
insave.state.m
およびin のすべてのインスタンス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
.
..
saved_state_*.mat
saved_state_*.mat
saved_state_*.mat
save_state