2009-01-22 11 views
11

Meine m-Datei öffnet Zahlen abhängig von Parametern. Manchmal ist es eine Figur, manchmal öffnet es 2 Figuren.Wie überprüft man, ob eine Figur geöffnet ist und wie man sie schließt?

Wenn der Benutzer die Funktion aufruft, erscheinen die Zahlen. Wenn er die Funktion erneut aufruft, lösche ich mit anderen Parametern Zahlen mit clf vor den neuen Plots.

Wenn der zweite Anruf so eingestellt ist, dass nur eine Zahl gezeichnet wird, bleibt die zweite (durch den vorherigen Anruf geöffnet) grau (wegen der CRL).

Gibt es eine Möglichkeit zu prüfen, ob es geöffnet und geschlossen ist?

Antwort

18
close all 

Schließen alle offenen Zahlen.

Sie können findobj() verwenden, um Objekte zu finden, die möglicherweise vorhanden sind, indem Sie Suchparameter angeben. Zum Beispiel:

figure('name','banana') 

Erstellt eine Figur mit dem Namen Banane.

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

Tut nichts, weil es keine Zahlen gibt, die mit dem Namen orange geöffnet sind.

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

Schließt die Abbildung.

Sie können Suchparameter angeben, die Ihren Anforderungen entsprechen.

+0

cool, es funktioniert! Vielen Dank! –

0

Um die Figur zu schließen, gibt es die "Schließen" -Funktion. Ich suche immer noch einen, um zu prüfen, ob eine Figur offen ist.

14

Ich bin ein wenig unklar darüber, was Sie mit "offen" meinen. Zahlen haben nicht wirklich "offene" oder "geschlossene" Zustände. Sie existieren entweder oder sie nicht. Der FIGURE Befehl wird ein Handle auf die Figur zurückgeben macht:

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

Sie auch eine Figur Griff aus der FINDOBJ Funktion erhalten können, die alle Grafikobjekte finden die Eigenschaftswerte passende geben Sie es:

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

Sie können mit einem dieser Befehle einer Figur loszuwerden:

close(hFig); 
delete(hFig); 

Sie überprüfen können, ob eine Figur geschlossen wurde/del tierten die Funktion mit ISHANDLE:

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

Figuren auch „sichtbar“ sein oder „unsichtbar“. Sie haben ein 'Visible' property, dass Sie den Wert erhalten oder einstellen:

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) 

Wenn Sie wollen überprüfen, ob eine Figur minimiert wird, dass ein wenig schwieriger sein kann. Ich glaube, es gibt einige Dateien, die Ihnen beim MathWorks File Exchange helfen können: hier klicken Sie one.

+0

Interessante Antwort, +1. Anywaay Ich habe es mit Findobj getan. Schön diese Dinge zu wissen! –

+0

+1 für die Erwähnung von "ishandle" - das war die Antwort, die ich suchte, als google mich auf diese SO Frage zeigte –

+0

Das ist die Antwort, die ich brauchte, weil ich es aus der Zahlenhandle bestimmen wollte. Es ist effizienter als zuerst nach dem richtigen Objekt zu suchen, falls das Handle bereits vorhanden ist. – Rob

4

In MATLAB können Sie Informationen über die 'root' bekommen. Zahlen sind Kinder von 'root' (handle von root ist 0) sie sind die einzigen Kinder der Wurzel.

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

Mit diesem Wissen können Sie diesen Code versuchen, die für die Kinder der Wurzel sieht, und gibt Ihnen eine 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 

Ich denke, dass Sie dies die direkteste Möglichkeit finden werden, abzufragen, welche Zahlen offen sind.

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

wenn die Antwort 0, dann Ihre Figur ist offen

1

Wenn in Ihrer Methode, Sie eine Figur ohne ‚namen‘ erstellen:

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

Sie nicht in der Lage sein, um das nächste Mal auf myFigure zugreifen zu können. Also:

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

    myFigure = figure() 
end 

gnvoice nicht 100% klar war, wenn er sagt:

Sie überprüfen können, ob eine Figur wurde geschlossen/gelöscht, um die Funktion ISHANDLE mit:

Er bedeutet, Sie können nur überprüfen, nachdem Sie den Griff wiederhergestellt haben:

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') 
Verwandte Themen