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

Funktionsaufruf schon beim Bewegen des Sliders

 

skyforce
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2013, 12:32     Titel: Funktionsaufruf schon beim Bewegen des Sliders
  Antworten mit Zitat      
Hallo zusammen,

ich habe in meiner GUI mehrere Sliders. Eine der dazugehörigen Callback-Fcn sieht so aus:
Code:
function slidern_Callback(hObject, eventdata, handles)

value = round(get(handles.slidern,'Value'));
set(handles.n,'String',num2str(value));
approximieren_Callback(hObject, eventdata, handles);
 

Jedoch wird die Callback-Fcn erst ausgeführt wenn ich die Maus loslasse. Wie kann ich den so programmieren, dass die Callback-Fcn schon während des Ziehens der Balken aufgerufen wird?

Vielen Dank im Voraus!
skyforce
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: 02.09.2013, 19:09     Titel:
  Antworten mit Zitat      
Hallo,

hier ein Beispiel dazu:

Code:
function slider_move_callback
figure
hSlider = uicontrol('style','slider','units','pixel','position',[20 20 300 20])
hText = uicontrol('style','text','units','pixel','position',[20 40 300 20])
addlistener(hSlider,'ContinuousValueChange',@move)

   function move(hObj,data)
      set(hText,'String',get(hObj,'value'))
   end

end


(stammt von 'Outsider' :) )

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2013, 22:35     Titel:
  Antworten mit Zitat      
Ich habe folgendes versucht:
Code:
function slidern_Callback(hObject, eventdata, handles)

addlistener(handles.slidern,'ContinuousValueChange',@move)


function move(hObject, eventdata, handles)

value = round(get(handles.slidern,'Value'));
set(handles.n,'String',num2str(value));
approximieren_Callback(hObject, eventdata, handles);

guidata(hObject, handles);
 

Leider kam immer diese Fehlermeldung:
Code:
Warning: Error occurred while evaluating listener callback.
Error using approximation_punktmenge_3d_2>approximieren_Callback (line
480)
Not enough input arguments.

Was mache ich hier falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 04.09.2013, 10:55     Titel:
  Antworten mit Zitat      
Hallo

weil hier muss explizit die handles an Addlistener übergeben, sonst
werden nur 2 Parameter per default automatisch übergeben.

die zeile wie folgt anpassen:
Code:

addlistener(handles.slidern,'ContinuousValueChange',{@move,handles})
Private Nachricht senden Benutzer-Profile anzeigen
 
skyforce
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2013, 13:04     Titel:
  Antworten mit Zitat      
Leider kommt es zu diesem Fehler:
Code:
Error using approximation_punktmenge_3d_2>slidern_Callback (line 413)
No method 'addlistener' with matching signature found. Callback must
be a function handle.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 04.09.2013, 20:54     Titel:
  Antworten mit Zitat      
Hallo

Läuft bei das Beispiel was Harald gepostet hat?

Ich würde addlistener-definition in OpeningFcn setzen, sonst erzeugst du immer wieder neuen Listener

Zitat:
Error using approximation_punktmenge_3d_2>slidern_Callback (line 413)
No method 'addlistener' with matching signature found. Callback must
be a function handle.



Okay dann muss man hier einen Umweg über GUIDATA gehen:

Code:
function slidern_Callback(hObject, eventdata, handles)

addlistener(handles.slidern,'ContinuousValueChange',@move)


function move(hObject, eventdata)
handles = guidata(hObject);
value = round(get(handles.slidern,'Value'));
set(handles.n,'String',num2str(value));
approximieren_Callback(hObject, eventdata, handles);

guidata(hObject, handles);
Private Nachricht senden Benutzer-Profile anzeigen
 
skyforce
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2013, 20:58     Titel:
  Antworten mit Zitat      
denny hat Folgendes geschrieben:
Hallo
Läuft bei das Beispiel was Harald gepostet hat?


ja

nun funktioniert fast alles, nur leider wird die Grafik, die von der approximieren_Callback-Fcn erzeugt wird, in einem separaten Fenster anstatt in der GUI angezeigt.

Warum ist das so? Wie kann ich es ändern?
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: 06.09.2013, 10:19     Titel:
  Antworten mit Zitat      
Hallo,

bei den meisten Grafikbefehlen kannst du als erstes Argument übergeben, in welches Koordinatensystem (KS) geplottet werden soll. Wenn du ein KS mit Tag axes1 hast, z.B.
plot(handles.axes1, x, y)

Falls dir das nicht weiterhilft, bitte sagen, welche Befehl(e) du zur Erstellung der Grafik verwendest.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2013, 10:27     Titel:
  Antworten mit Zitat      
das habe ich schon mit axes(handles.axes2) probiert. Der dazugehörige Code sieht so aus:

Code:
axes(handles.axes2);
surf(handles.x2,handles.y2,handles.fl_wert);
hold on;

% Kontrollpunktnetz zeichnen wenn checkbox aktiv
if (get(handles.checkbox1,'Value')==1)
    plot3(handles.cx, handles.cy, handles.cz,'-k.','MarkerSize',12,'LineWidth',1);
    plot3(handles.cx', handles.cy', handles.cz','-k.','MarkerSize',12,'LineWidth',1);
end
axis([handles.u_links, handles.u_rechts, handles.v_links, handles.v_rechts]);
hold off;

das funktioniert leider nicht mehr, nach dem ich den Vorschlag von denny eingebaut habe. Die Grafik, die durch "surf" erzeugt wird, wird immer in einem extra Fenster angezeigt
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: 06.09.2013, 19:19     Titel:
  Antworten mit Zitat      
Hallo,

versuch mal
Code:
surf(handles.x2,handles.y2,handles.fl_wert, 'parent', handles.axes2);


Falls das nicht funktioniert, poste bitte mal ein komplettes Beispiel.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2013, 20:37     Titel:
  Antworten mit Zitat      
vielen Dank für Eure Geduld. Ich muss mich auch entschuldigen, dass ich manchmal nicht ausführlich genug geantwortet habe.

Leider funktioniert es noch nicht so wie ich es haben möchte.

Hier unten befindet sich das komplette Programm

approximation_punktmenge_3d_2.m
 Beschreibung:

Download
 Dateiname:  approximation_punktmenge_3d_2.m
 Dateigröße:  23.78 KB
 Heruntergeladen:  342 mal
approximation_punktmenge_3d_2.fig
 Beschreibung:

Download
 Dateiname:  approximation_punktmenge_3d_2.fig
 Dateigröße:  21.46 KB
 Heruntergeladen:  355 mal
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: 06.09.2013, 22:15     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Leider funktioniert es noch nicht so wie ich es haben möchte.

Es hilft im Zweifelsfall zu sagen, was genau nicht funktioniert. Bei einer GUI also auch: was wird in welcher Reihenfolge angeklickt?

In dem Callback muss man konsequent dafür sorgen, dass alle Grafikbefehle im richtigen Koordinatensystem ausgeführt werden. Meines Erachtens funktioniert es jetzt.

Grüße,
Harald

approximation_punktmenge_3d_2.m
 Beschreibung:

Download
 Dateiname:  approximation_punktmenge_3d_2.m
 Dateigröße:  23.87 KB
 Heruntergeladen:  435 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
skyforce
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2013, 22:31     Titel:
  Antworten mit Zitat      
super vielen dank!

genau so wollte ich es haben.
ich dachte mit axes(handles.axes2) habe ich schon gezwungen, dass die Grafik in axes2 angezeigt werden soll. Anscheinend ist es nicht so.

nochmals vielen dank!
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: 06.09.2013, 22:42     Titel:
  Antworten mit Zitat      
Hallo,

mit
Code:
axes(handles.axes2)

wird das aktive Koordinatensystem einmalig gesetzt. Durch Klicken (und das machst du ja) kann sich das ändern.

Grüße,
Harald
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.