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

Plot aktualisieren

 

moongoblin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2009, 14:15     Titel: Plot aktualisieren
  Antworten mit Zitat      
Ich habe auch schon in den bestehenden Themen gesucht, aber leider nichts ganz passendes gefunden, deshalb hier mein Problem:

Mein GUI beinhaltet (unter anderem) einen Slider, zwei edit-textfelder, diverse Checkboxen und einen Pushbutton.
Die Checkboxen geben an welche Vektoren geplottet werden sollen, über den Slider und die edit-textfelder kann der zu plottende Datenausschnitt begrenzt werden, also praktisch Anfang und Ende der y-Achse. Bei Betätigung des Pushbuttons wird der Plot durchgeführt unter Einbeziehung der "Einstellungen" aus den genannten GUI-Objekten.
Nun würde ich gerne erreichen, dass bei Änderungen an den Checkboxen, dem Slider oder den edit-textfeldern sich der Plot automatisch anpasst, ohne dass der Pushbutton neu gedrückt wird und ohne dass eine neue figure geöffnet wird.
Ist das möglich und wenn dann wie?
Habe mit refreshdata experimentiert, leider ohne Erfolg.


Code:

function pushbutton_getchannels_Callback(hObject, eventdata, handles)

start=str2double(get(handles.edit_startwert, 'String'));  %edit_startwert auslesen
lenght=str2double(get(handles.edit_lenght,'String'));  % edit_lenght auslesen
ende=start+lenght;

% Status der checkboxes wird ausgelesen
handles.check_O1=get(handles.checkbox_O1, 'Value');
...
% ausgewählte Kanäle dazwischen plotten
handles.figure_channels=figure ('Name', ['Channels ,',handles.filename(9:13)]);
xlim([start ende]);
box('on');
hold('all');
if handles.check_O1==1
plot(handles.O1,'DisplayName','O1');
end
if handles.check_O2==1
plot(handles.O2,'DisplayName','O2');
end
...
guidata(hObject, handles);
 


Danke für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.11.2009, 14:20     Titel:
  Antworten mit Zitat      
Hallo,

das ist nur möglich, wenn du bei den angesprochenen Elementen einen ähnlichen oder gleichen Callback hinterlegst.
Am einfachsten ist es, im Callback immer dieselbe (ausgelagerte) Funktion aufzurufen, oder über GUIDE oder in der OpeningFcn des GUI die Callback-Eigenschaften der Elemente anzupassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2009, 10:49     Titel:
  Antworten mit Zitat      
Ok, das war schonmal hilfreich. Habe den Plot jetzt als eigene Funktion plotchannels realisiert, die von verschiedenen Stellen aufgerufen werden kann. Hier wird die figure mittels
Code:

handles.figure_channels=figure ('Name', ['Channels ,',handles.filename(9:13)]);
 

erzeugt.

Nun brauche ich aber in den callbackfunktionen der verschiedenen Elemente ne Abfrage ob der Plot schon existiert oder nicht. (Falls er existiert soll er gelöscht und neu/ aktualisiert werden, falls er noch nicht existiert soll auch nichts passieren). Wie realisiere ich diese Abfrage?
Habe
Code:

if ishandle(handles.figure_channels)
und
if exist(handles.figure_channels)~=0
 


probiert, aber bekomme immer die Fehlermeldung "Reference to non-existent field 'figure_channels'", was ja aber genau das ist was ich eigentlich abfragen will. Wo liegt das Problem?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2009, 10:54     Titel:
  Antworten mit Zitat      
Hallo,

probiers mal mit

Code:
if isfield(handles, figure_channels) && ishandle(handles.figure_channels)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2009, 15:04     Titel:
  Antworten mit Zitat      
Hab ich probiert, gleiche Fehlermeldung. Ich versteh bloß nicht wieso das ne Fehlermeldung ist, denn das ist doch genau das was ich will: wenn das Feld NICHT existiert, tue dies und das.
Hier nochmal etwas mehr Code, vielleicht überseh ich ja was triviales:
Code:

function pushbutton_getchannels_Callback(hObject, eventdata, handles)
% überprüfen, ob der Plot existiert
if isfield(handles, figure_channels) && ishandle(handles.figure_channels)
   % alten Plot löschen
   close (handles.figure_channels)
end
% (neuer) Funktionsaufruf plotchannels
plotchannels (hObject, eventdata, handles)

function plotchannels (hObject, eventdata, handles)
start=str2double(get(handles.edit_startwert, 'String'));  %edit_startwert auslesen
lenght=str2double(get(handles.edit_lenght,'String'));  % edit_lenght auslesen
ende=start+lenght;
% Status der checkboxes wird ausgelesen
handles.check_O1=get(handles.checkbox_O1, 'Value');
...
guidata(hObject, handles);
% ausgewählte Kanäle dazwischen plotten
handles.figure_channels=figure ('Name', ['Channels ,',handles.filename(9:13)]);
xlim([start ende]);
box('on');
hold('all');
if handles.check_O1==1
plot(handles.O1,'DisplayName','O1');
end
if handles.check_O2==1
plot(handles.O2,'DisplayName','O2');
end
...
legend('show')
guidata(hObject, handles)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2009, 15:38     Titel:
  Antworten mit Zitat      
Ok, Problem selber gefunden, im isfield-Befehl fehlten Hochkommata um figure_channels.

Danke!
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 - 2024 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.