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/Figure aktualisieren nach gedrücktem Button - ohne GUI

 

Chris1597

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2010, 16:28     Titel: Plot/Figure aktualisieren nach gedrücktem Button - ohne GUI
  Antworten mit Zitat      
Hallo Leute,

folgender Sachverhalt:
Ich hab ein Figure mit einem Plot von einem Schlauchwehr und ein paar Parameter die aufgelistet sind (zB "Innendruckkoeffizient alpha0 - 1.5")

Der Plot des Schlauchwehrs ist von aufgelisteten Parametern abhängig, und genau diese Parameter will ich nun verändern.

Das soll auf zwei verschiedene Arten gehen - einmal, dass ich die Zahl direkt ändere (in GUI wüsste ich wie ich das mit einem Edit-Feld realisiere) und außerdem, dass ich pro Parameter zwei Buttons habe - einer, der den Wert um 0.1 erhöht, einer der ihn kleiner macht.

Meine Variable alpha0 wird dadurch angezeigt:
Code:
text('Parent', hax(3),'Position', [58,-1], ...
        'String', sprintf('%6.2f', alpha0), 'Color', 'k','FontWeight','normal',...
        'VerticalAlignment','top','FontSize',12);


Mein Button:
Code:
h = uicontrol('String','Push here',...
              'Position',[18 18 72 36],'Callback','test');


Und die Funktion test:

Code:
alpha0 = alpha0+1;
 



Nun, die Variable wird erhöht, aber der Plot aktualisiert sich nicht.
Wie kann ich das realisieren? Der Plot und die Anzeige sollen sich live verändern, also nicht erst das ganze Figure neu starten.


Grüße und Dank,
Chris.


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 22.09.2010, 17:43     Titel:
  Antworten mit Zitat      
Hallo,

also erstmal ist dein uicontrol kein Button, da der 'Style' Pushbutton fehlt. Auch der Callback sollte eigentlich 'callback',@my_callback aussehen und nicht 'callback','my_callback'. Aber dies nur am Rande.

Aber nun zu deinem Problem. ich habe mal ein Beispiel gebastelt, bei dem sich die Frequenz einer Sinusfunktion bei jedem Knopfdruck erhoeht:

Code:

function refresh_plot
global f

f = 0.1;
t = -2*pi:0.1:2*pi;
y = sin(2*pi*f*t);
h = plot(t,y);

uicontrol('String','Push here','Style','pushbutton',...
              'Position',[18 18 72 36],'Callback',{@test,h,t});

end

function test(varargin)
global f

f = f+0.1;
h = varargin{3};
t = varargin{4};
set(h,'Ydata',sin(2*pi*f*t));

end
 


Leider weiss ich nicht (und scheinbar auch niemand anderes aus dem Forum, siehe: http://www.gomatlab.de/variablenueb.....13723,highlight,sco.html) wie man den Wert von f in die Hauptfunktion uebergibt, ohne f global zu deklarieren.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Chris1597

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2010, 13:50     Titel:
  Antworten mit Zitat      
Hallo, danke für deine Antwort.
Werde mich am Montag gleich damit auseinandersetzen - das mit dem 'callback',mycallback hat so funktioniert, wie ich es gemacht habe, wenn ich die function in ein extra m file geschrieben habe - eher nicht so toll, wusste aber nicht wie es anders geht - danke dafür schonmal. Den Style Pushbutton hatte ich eigentlich auch schon eingefügt, weiß nicht warum das jezt nicht drin ist. Nunja, egal.

Jedenfalls danke für deine Hilfe, hoffe das funktioniert so. (:
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2010, 15:47     Titel:
  Antworten mit Zitat      
Hallo,

die globale Variable lässt sich durch Verwendung von
- nested functions
- application data (doc getappdata, doc setappdata)
- guidata (doc guidata)
- user data
vermeiden.
Siehe auch:
Code:

docsearch "Data Management Mechanism"
 


Beispiel:
Code:


%% nested function
function refresh_plot

f = 0.1;
t = -2*pi:0.1:2*pi;
y = sin(2*pi*f*t);
h = plot(t,y);

uicontrol('String','Push here','Style','pushbutton',...
    'Position',[18 18 72 36],'Callback',@test);

    function test(varargin)      
        f = f+0.1;
        set(h,'Ydata',sin(2*pi*f*t));
       
    end
end

%% application data
function refresh_plot

f = 0.1;
t = -2*pi:0.1:2*pi;
y = sin(2*pi*f*t);
h = plot(t,y);
setappdata(h,'f',f);

uicontrol('String','Push here','Style','pushbutton',...
              'Position',[18 18 72 36],'Callback',{@test,h,t});

end

function test(~,~,h,t)
f = getappdata(h,'f');
f = f+0.1;  
set(h,'Ydata',sin(2*pi*f*t));
setappdata(h,'f',f)
end

 


Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 24.09.2010, 17:26     Titel:
  Antworten mit Zitat      
Hallo LittleX

... und ich dachte wirklich schon, dass es keiner weiss. Wirklich einen riesen Dank fuer die Antwort. Jetzt kann ich endlich diese globale Variable rauswerfen!!! Very Happy Very Happy Very Happy

PS: was meinst du mit dem letzten Punkt: user data (der Rest ist mir klar)

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2010, 11:06     Titel:
  Antworten mit Zitat      
Hallo,

alle möglichen Objekte wie z.B. axes, uicontrols haben eine Eigenschaft userdata, in der Du Deine Daten speichern kannst (mit get und set).

Beispiel:
Code:

handles.pb1 = uicontrol('style','pushbutton');
set(handles.pb1,'userdata',rand(3))
get(handles.pb1,'userdata')
 


Viele Grüße,

LittleX
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.