WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Nach CelleditCallback an eine bestimmte Stelle springen

 

laze
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 12.10.11
Wohnort: Stuttgart
Version: R2013a
     Beitrag Verfasst am: 01.10.2012, 12:29     Titel: Nach CelleditCallback an eine bestimmte Stelle springen
  Antworten mit Zitat      
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.1 0 0.85 0.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
Code:
z_daten_referenz_kennfeld

schreiben.

Nur wenn ich nun etwas abändere und über den Celleditcallback wieder zum Anfang meiner Funktion springe kommt eben diese Fehlermeldung

Code:
Not enough input arguments.
 
Error while evaluating uitable CellEditCallback


Irgendwie auch klar, da sämtliche Variablen ja bei diesem Callback nicht mehr mit übergeben werden.

Nur wie kann ich das Problem dann lösen?

Danke schon einmal

Gruß laze
_________________

--Wannabe
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.10.2012, 13:30     Titel: Re: Nach CelleditCallback an eine bestimmte Stelle springen
  Antworten mit Zitat      
Hallo laze,

Was genau soll dies erreichen:
Code:
if ~exist('z_daten_referenz_kennfeld')

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:
Code:
if ~exist('z_daten_referenz_kennfeld', 'var')

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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
laze
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 12.10.11
Wohnort: Stuttgart
Version: R2013a
     Beitrag Verfasst am: 01.10.2012, 19:03     Titel:
  Antworten mit Zitat      
Hallo Jan S.

danke (mal wieder) für die schnelle Antwort^^

Also diesen Part, den du grad rauskopiert hast, war ein vermeindlicher Versuch das Problem zu lösen. Nur eben war es, wie du erkannt hast, Mist.

z_daten_referenz_kennfeld wird erstmals in dieser Funktion erzeugt. Mein erster Gedanke war, als ich den Teil mit
Code:

if ~exist('z_daten_referenz_kennfeld')
 

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:
Code:
z_daten_referenz_kennfeld=nan(length(y_stuetzstellen),length(x_stuetzstellen));
subplot(2,1,1);
....
....  

Hat auch wunderbar funktioniert, damals aber ohne den CelleditCallback.

Mal sehen, ob ich das ganze irgendwie mit GUIDATA hinbekomme

Gruß laze
_________________

--Wannabe
Private Nachricht senden Benutzer-Profile anzeigen
 
laze
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 12.10.11
Wohnort: Stuttgart
Version: R2013a
     Beitrag Verfasst am: 02.10.2012, 00:00     Titel:
  Antworten mit Zitat      
Hallo, mittlerweile habe ich geringe Erfolge zu verzeichnen.

Habe es nun hinbekommen, die Daten meiner uitable über den CelleditCallback in eine Subfunktion zu bekommen.

Allerdings gibt es hier wieder neue Probleme...hängt wohl mit meiner Unerfahrenheit bezüglich Funktionen zusammen.

Code:
function handles=kennfeld_interpoliert(hObject, eventdata, handles)

subplot(2,1,1);
...
...
uitable('Parent',gcf,'Data',handles.z_daten_interpoliert_kennfeld,'ColumnName',spalten,'RowName',zeilen,'Units','Normalized','Position',[0.1 0 0.85 0.475],'ColumnFormat',spalten_format,'ColumnEditable',spalten_editierbar,'CelleditCallback',@(varargin)aktualisierung_interpoliert_kennfeld(hObject,handles,varargin));
guidata (hObject,handles);
end


function handles=kennfeld_referenz(hObject, eventdata, handles)
handles.z_daten_referenz_kennfeld=....
...
...
end


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)

handles.z_daten_interpoliert_kennfeld=get(gcbo,'data');
subplot(2,1,1);
...
...
guidata (hObject,handles);
end
 


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.

Danke schon einmal

Achja, und die Sache mit dem
Code:

ist mir auch noch nicht so ganz geheuer. Habe in einem anderen Beitrag dieses Beispiel entdeckt und einfach probiert.

Gruß laze
_________________

--Wannabe
Private Nachricht senden Benutzer-Profile anzeigen
 
laze
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 12.10.11
Wohnort: Stuttgart
Version: R2013a
     Beitrag Verfasst am: 02.10.2012, 11:21     Titel:
  Antworten mit Zitat      
JAWOLL,

konnte meine Problem selbständig lösen.

War wies nicht anders sein konnte an einer Kleinigkeit bei der Übergabe gelegen.


Code:
function handles=aktualisierung_interpoliert_kennfeld(hObject,handles,varargin)
handles = guidata(hObject);
handles.z_daten_interpoliert_kennfeld=get(gcbo,'data');
....
....
guidata(hObject,handles);


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 Smile

Gruß laze
_________________

--Wannabe
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.