Actualmente estoy desarrollando una aplicación básica de procesamiento de imágenes en MATLAB. Tengo que implementar deshacer a la función de estado anterior. Busqué en la red hay uiundo pero solo se deshacen las acciones de la GUI. ¿Hay un comando simple para deshacer? Gracias.MATLAB deshacer un comando
Respuesta
Si tiene memoria suficiente, puede almacenar todos los estados de su programa en una estructura y luego insertar esta estructura en circular buffer. La cantidad de elementos en el búfer determinaría la cantidad de niveles de deshacer.
Me parece que tendrías que implementar tu propio deshacer de varios niveles (o un nivel) usando el Command pattern.
Esto requeriría que ajuste sus operaciones en objetos que contengan la lógica para realizar la acción y restaurar el estado. No hay bala de plata, es necesario un trabajo duro.
deshacer general va a ser complicado, pero si usted está interesado sólo en salvar el estado de las variables de MATLAB y volver a un estado guardado, esto podría ser una posible solución:
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 ')) ]);
Luego puede usar save_state
para guardar el estado de las variables de MATLAB o incluso puede prefijar todos sus comandos con save_state;
si desea realizar un seguimiento de todos los cambios. Cuando desee volver a un estado previo de variables, puede ejecutar undo_index
para averiguar el índice del último estado guardado y luego puede ejecutar undo
e ingresar el índice dado por undo_index
, o alternativamente cualquier entero positivo más pequeño para regresar a un estado anterior estado de las variables. El primer archivo de estado guardado se llamará saved_state_000001.mat
, luego saved_state_000002.mat
y así sucesivamente ... Tenga en cuenta que save_state
guarda todo en el disco, por lo que usar SSD o un disco RAM puede ser una buena idea si desea probar esto en un bucle con una gran cantidad de datos. Tenga en cuenta también que el contenido anterior de la variable llamada SavedStateFolder
se pierde cuando ejecuta save_state
o undo
. Para evitar esto, se puede reemplazar todas las instancias de SavedStateFolder
en save.state.m
y undo.m
con nombres de las carpetas no modificables, por ejemplo:
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 ')) ]);
Tenga en cuenta también que save_state
, undo_index
y undo
suponen que en SavedStateFolder
no hay otros archivos excepto .
, ..
y saved_state_*.mat
archivos. También se encuentra la cantidad de archivos saved_state_*.mat
y el índice en ejecución que se guardará de esta manera, por lo que si elimina algunos archivos saved_state_*.mat
anteriores sin, por ejemplo, creando la misma cantidad de archivos vacíos para reemplazarlos, los recuentos no coinciden y save_state
podría guardar el estado sobre un archivo de estado guardado ya existente.
- 1. ¿Puedo deshacer o eliminar un comando atexit?
- 2. Deshacer un comando de actualización de mysql
- 3. Deshacer el comando en R
- 4. ¿Deshacer con el comando repo?
- 5. ¿Hay algún comando para deshacer git init?
- 6. Deshacer un commit de git
- 7. Python & SCons & Matlab: entrada de comando incorrecta
- 8. ¿Cómo puedo deshacer mi último comando de eliminación en mysql?
- 9. Deshacer un empuje Mercurial
- 10. Deshacer un alijo git
- 11. Deshacer
- 12. Deshacer un error de git bisect
- 13. Deshacer un git pull --rebase
- 14. Cómo deshacer un Git rollback
- 15. Deshacer un git pull --rebase?
- 16. Comandos Deshacer/Rehacer de TextBox
- 17. Deshacer un empuje de hg (retroceso?)
- 18. ¿Cómo ejecutar Matlab desde la línea de comando?
- 19. ¿Son posibles varias ventanas de comando de MATLAB?
- 20. Ejecutando un comando de JavaScript de MATLAB para recuperar un archivo PDF
- 21. Deshacer el pago usando cleartool
- 22. Deshacer implementación - DOM manipulaciones
- 23. deshacer/rehacer con objetos inmutables
- 24. Deshacer "retroceder a este compromiso"
- 25. ¿Se puede deshacer un `range.insertNode` usando la acción de deshacer del navegador, en un div satisfactorio?
- 26. Deshacer convertToCapped a una colección
- 27. Deshacer en Subversion
- 28. Deshacer una mala extracción
- 29. ¿Cómo deshacer git update-index?
- 30. ¿Cómo puedo deshacer un git svn dcommit?
+1: buena idea.Otro es guardar todo en el disco después de cada operación, aunque esto podría ser un exceso :) – Anonymous