read from data matlab file-io properties matlab-figure

matlab - from - Cómo editar la propiedad de la figura guardada en el archivo.fig sin mostrarlo



matlab get figure points (1)

Quiero editar cierta propiedad de las figuras de MATLAB guardadas como archivos .fig (formato predeterminado de MATLAB).

Creo muchas figuras con gran cantidad de gráficos en una secuencia de comandos, por lo que elijo no mostrarlas haciendo que la figura predeterminada sea invisible con el set(0,''DefaultFigureVisible'',''off'') . Esto establece la propiedad ''Visible'' de cualquier figura nueva en ''off'' . De esta forma puedo crear, editar, guardar, etc., figuras sin la necesidad de dibujarlas, lo que puede ser agotador para la CPU, la GPU y sus memorias. Guardo las figuras como archivos .fig usando el comando saveas saveas(handle,''filename.fig'') . Esto también guarda la propiedad ''Visible'' , que es un problema cuando quiero abrir la figura (por ejemplo, haciendo doble clic en el archivo en mi Explorador de Windows). Carga la figura, pero no la muestra porque su propiedad ''Visible'' está configurada en ''off'' .

Quiero que todos los archivos .fig se guarden con la propiedad establecida en ''on'' , pero ¿cómo puedo lograr esto sin mostrar (= gravar) las cifras? En el momento en que utilizo set(handle,''Visible'',''on'') , se dibuja la figura.

Básicamente, quiero editar el archivo en un nivel más bajo que cuando se carga como una figura en MATLAB.

Creo que se podría hacer de la siguiente manera, pero no sé exactamente cómo lograrlo. Uno puede cargar los datos de .fig como si fuera un archivo .mat usando s=load(''filename.fig'',''-mat''); . Esto carga una estructura que contiene algunos campos que contienen todos los datos, propiedades, etc. de la figura. Ahora, el asa de la figura debe encontrarse en esta estructura desconocida y la propiedad ''Visible'' que acompaña al asa editada.

¿Se puede hacer esto sin que se dibuje la figura?

Lo intenté, pero no lo fread , usando fopen , fread y sus amigos.

¿Alguien sabe cómo hacer lo que quiero hacer?


Baso mi solución en el hilo de la url publicada por user4506754: http://www.mathworks.com/matlabcentral/newsreader/view_thread/306249 Allí, Jesse Hopkins publica (post 15) que usted puede editar una propiedad ''ResizeFcn'' para ejecutar una función cuando MATLAB crea una figura. Esto no funciona en mi instalación de MATLAB, pero me lleva a examinar las diferentes funciones que puede adjuntar a una figura en sus propiedades. Esta página documenta todas las propiedades de la figura: http://mathworks.com/help/matlab/ref/figure-properties.html . Allí encontré la propiedad ''CreateFcn'' . Su descripción contiene:

Esta propiedad especifica una función de devolución de llamada para ejecutar cuando MATLAB crea la figura. MATLAB inicializa todos los valores de propiedad de figura antes de ejecutar la devolución de llamada CreateFcn.

Significa que la figura está cargada con sus propiedades, incluida la propiedad ''Visible'' está ''off'' y luego se llama a ''CreateFcn'' .

Establecer ''CreateFcn'' para que la figura sea visible resuelve mi problema.

set(gcf,''CreateFcn'',''set(gcf,''''Visible'''',''''on'''')'')

Un ejemplo:

ezplot(@sin) % draw a simple figure containing a sine wave, title, etc. set(gcf,''Visible'',''off'',''CreateFcn'',''set(gcf,''''Visible'''',''''on'''')'' % this disables the figure and set the ''CreateFcn'' property simultaneously saveas(gcf,''sin.fig'') % save the figure in the current folder as a .fig file close % closes current figure

Ahora vaya a la carpeta actual en su Explorer y haga doble clic en el archivo sin.fig. Hace que MATLAB lo cargue y, poof , se dibuja la figura.

Solución encontrada

Esto no edita el archivo .fig, como originalmente pregunté (como una solución), pero es una solución alternativa al problema original. Ahora puedo crear y guardar figuras sin que sean visibles, pero dibujar las figuras en el momento en que MATLAB las cargue.