2009-01-22 6 views
11

Mon fichier m ouvre les chiffres en fonction des paramètres. Parfois est une figure, parfois il ouvre 2 chiffres.Comment vérifier si une figure est ouverte et comment la fermer?

Si l'utilisateur appelle la fonction, les chiffres apparaissent. S'il appelle à nouveau la fonction, avec d'autres paramètres, j'efface les chiffres avec clf avant les nouveaux graphiques.

Si le second appel est défini pour dessiner un seul chiffre, le second (ouvert par l'appel précédent) reste gris (à cause du clf).

Y at-il un moyen de vérifier s'il est ouvert et de le fermer?

Répondre

18
close all 

Ferme toutes les figures ouvertes.

Vous pouvez utiliser findobj() pour rechercher des objets pouvant exister en spécifiant des paramètres de recherche. Par exemple:

figure('name','banana') 

Crée une figure avec le nom banane.

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

Ne fait rien parce qu'il n'y a pas de chiffres ouverts avec le nom orange.

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

Ferme la figure.

Vous pouvez spécifier des paramètres de recherche pour répondre à vos besoins.

+0

cool, ça marche! Je vous remercie! –

0

Pour fermer la figure, il y a la fonction "fermer". J'en cherche encore un pour vérifier si un personnage est ouvert.

14

Je ne comprends pas très bien ce que vous entendez par "ouvert". Les chiffres n'ont pas vraiment d'états «ouverts» ou «fermés». Ils existent ou ils ne le font pas. La commande FIGURE retourne une poignée à la figure, il fait:

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

Vous pouvez également obtenir une poignée de la figure de la fonction FINDOBJ, qui trouvera tous les objets graphiques correspondant aux valeurs de propriété lui passez:

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

Vous pouvez vous débarrasser d'une figure avec l'une de ces commandes:

close(hFig); 
delete(hFig); 

Vous pouvez vérifier si un chiffre a été fermé/del ETED en utilisant la fonction ISHANDLE:

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

figures peuvent également être "visible" ou "invisible". Ils ont une 'Visible' property que vous pouvez obtenir ou définir la valeur 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 vous êtes désireux de vérifier si une figure est réduite au minimum, qui peut être un peu plus difficile. Je crois qu'il y a des fichiers qui peuvent vous aider avec cela sur l'échange de fichiers de MathWorks: voici one pour vérifier.

+0

Réponse intéressante, +1. Anywaay je l'ai fait avec findobj. Ravi de savoir ces choses! –

+0

+1 pour mentionner "ishandle" - c'était la réponse que je cherchais quand google m'a pointé vers cette question SO –

+0

C'est la réponse dont j'avais besoin, parce que je voulais le déterminer à partir de la poignée de la figure. C'est plus efficace que de chercher d'abord le bon objet dans le cas où l'on a déjà le handle. – Rob

4

Dans MATLAB, vous pouvez obtenir des informations sur la racine. Les chiffres sont des enfants de 'root' (la poignée de la racine est 0) ils sont les seuls enfants de la racine.

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

Sachant cela, vous pouvez essayer ce code qui recherche les enfants de la racine, et vous donne une liste.

>> 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 

Je pense que vous trouverez cela le moyen le plus direct de demander quelles figures sont ouvertes.

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

si la réponse est 0, votre silhouette est ouvert

1

Si l'intérieur de votre méthode, vous créez une figure sans un 'nom':

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

vous ne serez pas en mesure pour accéder à la poignée myFigure la prochaine fois. Alors:

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

    myFigure = figure() 
end 

gnvoice n'a pas été clair à 100% quand il dit:

Vous pouvez vérifier si un chiffre a été fermé/supprimé à l'aide de la fonction ISHANDLE:

Il signifie que vous ne pouvez vérifier qu'après avoir récupéré la poignée:

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') 
Questions connexes