Verfasst am: 01.10.2012, 12:29
Titel: Nach CelleditCallback an eine bestimmte Stelle springen
Hallo,
Folgendes Problem: Ich erzeuge mir über eine Funktion einen subplot und darunter eine uitable, die die Daten des Plots widerspiegelt.
Code:
function z_daten_referenz_kennfeld=kennfeld_referenz(x_daten,y_daten,z_daten,x_stuetzstellen,y_stuetzstellen,x_achse,y_achse,z_achse,... kennfeld_titel,mesh_ausgabe,surf_ausgabe,contour_ausgabe)
if ~exist('z_daten_referenz_kennfeld')
z_daten_referenz_kennfeld=nan(length(y_stuetzstellen),length(x_stuetzstellen));
else
z_daten_referenz_kennfeld=get(gcbo,'data');
end subplot(2,1,1);
....
....
uitable('Parent',gcf,'Data',z_daten_referenz_kennfeld,'ColumnName',spalten,'RowName',zeilen,'Units','Normalized','Position',[0.100.850.475],'ColumnFormat',spalten_format,'ColumnEditable',spalten_editierbar,'CelleditCallback',@kennfeld_referenz);
Da ich die Tabelle editierbar machen will, möchte ich auch irgendwie bei einer Aktualisierung der Tabelle den Plot entsprechend auch aktualisieren und die geänderten Daten wieder in meine Variable
Hier wird der Matlab-Pfad nach M-, Mex-, P-, und Java-Files durchsucht, danach auch nach Variablen-Namen, aber auch nach Ordnern. Das ist sehr langsam und unsicher. Besser:
Ich verstehe aber trotzdem nicht, wann diese Variable existieren könnte.
Offenbar musst Du die Variablen irgendwie mot GUIDATA speichern, soweit ich das Probleme verstehe.
eingefügt habe, dass die Variable eigentlich bereits existieren müsste. Diese habe ich ja schon beim erstellen meiner uitable verwendet. Dann wollte ich nach dem CelleditCallback die alten Daten von z_daten_referenz_kennfeld mit den neuen Daten überschreiben und die gesamte Funktion Kennfeld_referenz nochmal ausführen, damit der Plot ebenfalls aktualisiert wird.
Ursprünglich sahen die ersten Zeilen der Funktion so aus:
Jetzt habe ich meine inputs für die Funktion leicht abgeändert, da ich hauptsächlich mit der handles Struktur arbeite. So spar ich mir jede einzelne Variable reinzuschreiben und bekomme so gleich alle in meine Funktion.
Folgende Subfunktion habe ich mir erstellt:
Code:
function handles=aktualisierung_interpoliert_kennfeld(hObject,handles,varargin)
Habe den Tipp mit GUIDATA beherzigt.^^ Nur weiss ich nicht ob ich das Ganze korrekt benutze. Bis dato funktioniert auch die Übergabe
ABER:
Wenn ich die uitable NICHT editiere und nach einem Breakpoint in mein handles-structure schaue, habe ich dort noch die Variable z_daten_referenz_kennfeld aus einer anderen Funktion, die ich auch später benötige. Soweit so gut. Diese bleibt auch bestehen solange ich nichts an uitable editiere. Fehlerfreier Ablauf meiner gesamten Routine.Vielleicht spielt es dabei auch eine Rolle, dass diese Funktion erst NACH meiner
Code:
function handles=kennfeld_interpoliert(hObject, eventdata, handles)
Funktion ausgeführt wird. Aber da die Routine standardmäßig einmal alle Funktionen abklappert, müssten eigtl. schon alle Daten in meiner handles-structure vorhanden sein, bevor ich editieren kann. Von demher ist das für mich nicht so ganz klar.
Ändere ich jetzt aber in meiner uitable einen Wert und mein Code springt über den CelleditCallback in meine neue Subfunktion "aktualisierung_interpoliert_kennfeld"
dann ist plötzlich die Variable handles.z_daten_referenz_kennfeld nicht mehr in meinem handles-structure drinnen. Als ob bei der Übergabe irgendetwas schief ging. Obwohl ich ja "handles", wie man an meinem Codeschnipsel sehen kann, übergebe.
Ich vermute einen Übergabe-Fehler meinerseits nur leider habe ich keinen Plan woran es liegt.
Ich hatte vergessen meine handles-structure beim Incoming in die Funktion zu aktualisieren.
Jetzt werden alle Werte sauber übergeben und sind auch in anderen Funktionen wieder verfügbar.
Danke für den Denkanstoss Jan
Gruß laze
_________________
--Wannabe
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.