2009-01-22 13 views
11

Mi archivo m abre las cifras según los parámetros. A veces es una figura, a veces abre 2 figuras.¿Cómo verificar si se abre una figura y cómo cerrarla?

Si el usuario llama a la función, aparecen las figuras. Si vuelve a llamar a la función, con otros parámetros, estoy borrando las cifras con clf antes de las nuevas gráficas.

Si la segunda llamada está configurada para dibujar solo una figura, la segunda (abierta por la llamada anterior) permanece gris (debido al clf).

¿Hay alguna manera de verificar si está abierto y cerrarlo?

Respuesta

18
close all 

Cerrará todas las figuras abiertas.

Puede buscar findobj() para encontrar objetos que puedan existir al especificar los parámetros de búsqueda. Por ejemplo:

figure('name','banana') 

Crea una figura con el nombre banana.

close(findobj('type','figure','name','orange')) 

No hace nada porque no hay figuras abiertas con el nombre naranja.

close(findobj('type','figure','name','banana')) 

Cierra la figura.

Puede especificar los parámetros de búsqueda para satisfacer sus necesidades.

+0

genial, funciona! ¡Gracias! –

0

Para cerrar la figura, está la función "cerrar". Todavía estoy buscando uno para verificar si una figura está abierta.

14

No estoy seguro de qué quiere decir con "abierto". Las figuras realmente no tienen estados "abiertos" o "cerrados". O existen o no existen. El comando FIGURE devolverá un identificador de la figura se hace:

hFig = figure(...your arguments here...); 

También puede tener una idea de la figura de la función FINDOBJ, que encontrar todos los objetos gráficos que coinciden con los valores de propiedad que pasa a ella:

hFig = findobj(...your property/value pairs here...); 

Usted puede deshacerse de una figura con cualquiera de estos comandos:

close(hFig); 
delete(hFig); 

se puede comprobar si una figura se ha cerrado/del ETED utilizando la función de ISHANDLE:

ishandle(hFig) %# Returns 'true' if the figure exists, 'false' if it doesn't 

figuras también pueden ser "visible" o "invisible". Tienen una 'Visible' property que se puede obtener o establecer el valor de:

get(hFig,'Visible')  %# Returns 'on' or 'off' 
set(hFig,'Visible','off') %# Makes a figure invisible, but it still 
          %# exists (i.e. it's not closed) 

Si tienes intención de comprobar si se minimiza una figura, que pueden ser un poco más difícil. Creo que hay algunos archivos que pueden ayudarlo con MathWorks File Exchange: aquí está el one para consultar.

+0

Interesante respuesta, +1. Anywaay lo he hecho con findobj. ¡Es bueno saber estas cosas! –

+0

+1 por mencionar "ishandle": esa fue la respuesta que estaba buscando cuando google me señaló esta pregunta ASÍ –

+0

Esa es la respuesta que necesitaba, porque quería determinarlo desde el controlador de la figura. Es más eficiente que la primera búsqueda del objeto correcto en caso de que uno ya tenga el mango. – Rob

4

En MATLAB, puede OBTENER información sobre la 'raíz'. Las figuras son hijos de 'raíz' (el mango de la raíz es 0) son los únicos hijos de la raíz.

http://www.mathworks.com/help/techdoc/creating_plots/f7-41259.html

Sabiendo esto, puede probar el código que se ve a los hijos de la raíz, y le da una lista.

>> close all 
>> get(0,'children') 
ans = 
    Empty matrix: 0-by-1 
>> figure(1) 
>> get(0,'children') 
ans = 
    1 
>> figure(3) 
>> get(0,'children') 
ans = 
    3 
    1 

Creo que esta es la forma más directa de consultar qué cifras están abiertas.

2
isempty(findobj('name','Your_Figure_Name')) 

si la respuesta es 0, entonces su figura está abierto

1

Si dentro de su método, se crea una figura sin un 'nombre':

function [] = myMethod() 
    myFigure = figure() 
end 

que no podrá para acceder a myFigure manejar la próxima vez. Por lo tanto:

function [] = myMethod() 
    if ishandle(myFigure) % will fault, cant find variable myFigure 
     close(myFigure) % will fault 
     delete(myFigure) % will fault 
    end 

    myFigure = figure() 
end 

gnvoice no estaba al 100% claro cuando dice:

Puede comprobar si una figura se ha cerrado/borrar mediante la función ISHANDLE:

Él significa que solo puede verificar DESPUÉS de haber recuperado el mango:

function [] = createMyFigure() 
    recoveredHandle = findobj('type','figure', 'Name', 'myFigureName') 
    close(recoveredHandle) 
    delete(recoveredHandle) 
    ishandle(recoveredHandle) 

    myFigure = figure('Name','myFigureName') % now create figure 
end 
-1
for f=1:numel(findobj('type','figure')) 
    close(figure(f)); 
end 
clear('f') 
Cuestiones relacionadas