Der Befehl delete(inhandles.item(inVal)) löscht den in der Funktion erzeugten Plot wieder.
Steht der Befehl an Position 2 ist alles ok und der soeben erzeugte Plot wird bei jedem Aufruf gelöscht.
Steht der Befehl jedoch an Position 1 (d.h. löschen des beim letzten Aufruf erzeugten Plots), so wird der Plot nicht gelöscht, keine Fehlermeldung, die Evaluation des Befehls ergibt "handle to deleted Graphics".
inhandles scheint den neuen Plot nicht aus der Funktion exportieren zu können.
Wie kann erreicht werden, dass der delete Befehl in Position 1 erfolgreich ausgeführt wird?
Es soll nur die vorher erzeugte Linie/Kurve gelöscht werden und nicht das ganze Axes Objekt. Der delete Befehl ist nicht so sehr relevant, es geht darum, dass eine in einem Callback Aufruf erzeugte Linie in einem Plot im nächsten Callback Aufruf nicht mehr erkannt wird.
Danke für die Hinweise, der Plot wird z.b. mit
plot(x,sin(x)) erstellt.
Das Problem ist, dass der in der Funktion erzeugte Plot
mit F9 inhandles.item(inVal)) korrekt als Linie erkannt wird, beim nächsten Aufruf
bringt F9 inhandles.item(inVal)) nur noch "handle to deleted Graphics".
Die Funktion wird nach dem ersten Aufruf ja wieder verlassen und dabei geht etwas verloren.
Bei Funktionen kann ich output Argumente definieren [varargout]=myfunc(varargin); da funktioniert auch alles bestens. Bei Callback im uimenu kann man jedoch keine output Argumente definieren.
Es muss doch sonst eine Möglichkeit geben, die in einem Callback erzeugten Objekte auch ausserhalb der Callback Funktion oder eben beim nächsten Aufruf zur Verfügung zu haben zum löschen/ändern etc.
Wie gesagt...deine kompletter Code würde deutlich mehr helfen. Außerdem scheint es mir, dass ich mit meinem Hinweise zum Abspeichern von Änderungen des Handles innerhalb einer Callbackfunktion nicht ganz falsch liege
Ich würde mir mal in der Doku den Befehl
guidata
oder hier im Forum genauer ansehen. Ansonsten gibt es z.B. auch folgende Möglichkeit handles zu erstellen und in Callbacks zugreifen.
Nun sollte es etwas klarer sein. Beim wiederholten Aufrufen der Callbackfunktion wird der im vorangehenden Aufruf erzeugte Plot inhandles.item(1) nicht gelöscht, wenn der delete Befehl in der Position 1 gesetzt ist.
wie ist
handles.item
denn initialisiert?
Mit dem momentanen Code löscht du das Objekt direkt nach seiner Erzeugung, und beim nächsten Aufruf des Callbacks nochmal. Dass es dann nicht mehr gelöscht werden kann, ist naheliegend, denn es ist ja schon gelöscht.
So funktioniert es wie ich es mir vorstelle. Es gibt vielleicht elegantere Methoden dies zu erreichen. Globale Variablen sollte man ja "sehr sparsam" benutzen.
Besten Dank und Grüsse
sputnik644
Nun funktiontiert es! Besten Dank für Deine Hilfe!
Grüsse
sputnik644
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.