Verfasst am: 23.08.2010, 15:21
Titel: Variablen aus einem gespeicherten figure auslesen
Hallo,
ich habe eine gespeicherte figure und möchte die Parameter nun mit einer eigenen GUI bearbeiten.
Ich lade eine *.fig datei dann wird ein plot geöffnet.
In dem plot hat man die möglichkeit durch klicken in den plot ein neues plot Fenster zu öffnen.
Wenn ich das mache wird die entsprechende Callback Funktion der "Hauptfunktion" mit der das Fenster erstellt wurde aufgerufen. In dieser Callback Funktion stehen nun die Variablen zur Verfügung die ich benötige, aber nur dort.
Gibt es eine Möglichkeit auf diese Variablen irgendwie zuzugreifen? Sie müssen ja in der *.fig datei mit gespeichert sein, Weil sie im 'base' Workspace nicht mehr existieren.
ps: Das Ziel ist die ursprüngliche Funktion so zu belassen wie sie ist. Deshalb kann ich dort nicht mit dem Callback arbeiten.
Schon einmal ein Danke für jede Hilfe.
grüße
pait
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 24.08.2010, 12:15
Titel:
Also ich bin einen kleinen Schritt weiter gekommen.
Unter dem Stichwort "nested functions".
Die Variablen sind quasi als lokale Variablen gespeichert.
Nur was ich noch nicht herausgefunden habe ist, ob ich von ausserhalb auf die internen Variablen zugreifen kann.
Ich komme an die handles und function_handles heran, aber nicht an die Variablen.
Hat da jmd vielleicht schon mal Erfahrung mit gesammelt?
Ich habe hier mal das drum herum weggelassen. Das wichtigste ist, dass wenn ich die erzeugte figure speichere und dann wieder lade, wird das Callback natürlich wieder ausgeführt und "data_in" steht wieder zur Verfügung. Nur kann ich auf die nicht von aussen zugreifen.
Danke für den Vorschlag aber leider hilft mir der Vorschlag von denny nicht weiter da "data_in" ein struct (mit jeder menge zusätzlicher Parameter) ist und die Daten die ich mit "get" bekomme reichen leider nicht aus.
Wie gesagt ich soll an der Funktion die die figure erzeugt nichts ändern und eine separate basteln, die die ursprünglichen parameter einlesen und gegebenenfalls abändern soll.
pait
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 24.08.2010, 13:57
Titel:
Also ich hätte da eine Idee.
Ich könnte das struct welches ich brauche mit SETAPPDATA speichern und dann könnte ich es mit GETAPPDATA extern aufrufen.
Ist es irgendwie möglich eine Funktion die in einem anderen m-File steht als nested function einer anderen Funktion (in einem anderen file) zu deklarieren?
Dann müsste das ganze Funktionieren
Wie wird die Figure gespeichert?
Wie wird die gespeicherte Figure aufgemacht?
TEST_CALLBACK kennt nur deswegen data_in, weil es Unterfunktion von PLOT_DATA ist. Damit kommt gleich die Frage, woher kennt die PLOT_DATA data_in? Wie bekommt die Funktion die Daten aus abgespeicherten Figure?
Das musst unbedingt klären, weil mir scheint, dass mit Aufmachen der gespeicherter Figure betrügt euch selbst.
Denn es wurde Callback in Figure zwar abgespeichert, aber Callback liefert ja keine data_in, also muss es so sein dass data_in noch in Speicher vorhanden ist.
Versuch mal folgendes, öffne die abgespeicherte Figure in frisch gestartetem Matlab was passiert dann?
GUIDATA speichert ja temporär in Figure die Variablen.
Man kann mit HGSAVE diese auch mit in Figure abspeichern.
Und beim Nächsten Aufmachen von Figure auf diese zugreifen.
Die Figure wurde über HGSAVE gespeichert und über OPENFIG wieder geöffnet.
Ich hatte Rechner schon neugestartet und nach dem neustart und laden der Figure blieben die Variablen im Callback zugänglich.
Zitat:
TEST_CALLBACK kennt nur deswegen data_in, weil es Unterfunktion von PLOT_DATA ist. Damit kommt gleich die Frage, woher kennt die PLOT_DATA data_in? Wie bekommt die Funktion die Daten aus abgespeicherten Figure?
Genau das ist die Frage. Das versteh ich auch nicht so ganz, weil ich dazu auch noch nichts auf den einschlägigen Matlab Seiten gefunden habe.
Hier mal die genaue Zeile wie das Callback eingebunden ist.
select_singleplotER ist die Callback-Funktion ft_select_channel ist eine externe Funktion. Allerdings wird nur die select_singleplotER als Callback ausgeführt.
Die Syntax habe ich noch nicht so wirklich durchschaut, aber nach denny' s letztem Post könnte es sein, dass dort die Variable cfg an das Callback übergeben wird?
Der Syntax ist der Tat, etwas komplex, aber sehr ausgefeilt.
Externer Funktion ft_select_channel einfach Callback select_singleplotER übergeben. Da spart man sich FEVAL.
Und cfg könnte wirklich eine feste Variable sein, welche ihren Wert durch Callback nicht verändert. Ich meine jedes Mal, wenn cfg=5, dann wird bei jedem auslösen des Callback cfg =5 sein.
Wir in Funktionen GUIDATA verwendet, dann kannst du doch auch in deiner Funktion nutzen
pait
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.08.2010, 13:10
Titel:
GUIDATA wird für diese Variable leider nicht verwendet. Sie wird lediglich an das Callback weiter gereicht.
Gibt es nicht eine Möglichkeit das Callback "umzuleiten". Das anstatt dem original Callback meine Funktion ausgeführt wird?.
Wenn ich mir mit get die Eigenschaften der Figure ansehe gibt es dort Felder für die entsprechenden Aktionen. Also z.B. WindowButtonDownFcn
Nun kann ich dort auch eine neue Funktion hineinschreiben, die auch aufgerufen wird. Nun steht mir dort allerdings wieder nicht die Variable zur Verfügung.
So langsam glaub ich, dass das nichts wird so wie ich mir das vorgestellt hab.
grüße
pait
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.08.2010, 13:30
Titel:
Juhu!
Ich hab's gefunden!
wie im letzten Post beschrieben kann ich mir die properties ansehen und dort (stark verschachtelt) ist dann auch die Variable, die ich benötige enthalten. (Weil sie mit an das Callback übergeben wurde.)
Ich danke dir für deine Hilfe!
grüße
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.