Verfasst am: 06.09.2010, 09:51
Titel: Callback für Slider um Plot zu switchen.
Hallo,
ich habe mir selbst ein kleines GUI gebastelt. In dem GUI sollen einfach nur die Ableitungen der Gaussfunktion angezeigt werden. Ich möchte die Ableitungen mit einem geeigneten Button (Slider) durchschalten können. Ich möchte das ganze komplett ohne GUIDE machen, um meine Programmierfähigkeiten zu verbessern. Ich bin jetzt mit der Oberfläche soweit fertig und komme nun zum Callback für den Slider. Leider blicke ich da nicht durch.
Also z.B. Slider-Stellung 2/7, Ableitung 2. Ordnung im rechten Plot. Die Funktionen sind auch drinnen.
Es wäre toll, wenn mir jemand helfen könnte. Weiter unten ist der Code.
Vielen Dank im Vorraus.
EDIT: Beim durchschalten wäre wohl eine Switch-Case-Konstruktion am besten oder? So würde ich die Ableitungen alle im Code berechnen und jeweils eine Ableitung wäre dann ein case. Ich hatte erst eine for-Schleife geplant, aber ich müsste ja immer eine neue Variable schreiben für die nächste Ableitung und die Vorgängervariable in die Gradient-Funktion packen. Oder gibts da vlt. doch einen kleinen Kniff?
% Slider zum Einstellen der Ordnung uicontrol(p1,'Style','slider',...
'Max',7,'Min',1,'Value',1,...
'SliderStep',[0.11],...
'Position',[20506020],...
'Callback', @slider1_callback);
%Aufruf Callback-Funktion, welche das
%Element steuert
%'SliderStep',[0.050.2],...
%------------------------------------------------------
% Grafiken
%------------------------------------------------------
% Auswahl des entsprechenden Axes-Objekts axes('parent', MainWindow, 'Position', [.35,.75,.1,.1]);
% Einlesen der Grafik
G1=imread('Pfeil.jpg','jpg');
% Grafik ausgeben, Grafik entzerren image(G1); axisimage;
% Koordinatenachsen ausblenden axis off
Das wäre jetzt mein Ansatz, sicherlich fehlt da noch so einiges. Muss ich für hObject, eventdata, handles noch Templates reinladen? Ich hatte oben nur function varargout = gui(varargin).
Code:
function slider1_callback(hObject, eventdata, handles)
%Variablendeklaration für Switch-Case-Variable
ableitung = 'String';
%Auslesen des Slider-Wertes
slider_wert = get(hObject, 'Value');
Ich habe mein Problem selber gelöst. Wenn noch jemand ein paar nützliche Tips geben kann, wär das natürlich toll.
Die Lösung war natürlich mal wieder einfachster Natur. Die Berechnung der Ableitungen waren in den Cases, so waren sie natürlich "eingekapselt" und für die anderen Funktionen nicht erreichbar,
Code:
%oooooooooooooooooooooooooooooooooooooooooooooooooooooo
%% Grafische Benutzeroberfläche
%oooooooooooooooooooooooooooooooooooooooooooooooooooooo
% hObject - Ist der Handle des Objekts von dem der % Callback ausgelöst wird. % eventData - Wird nicht verwendet. % handles - Struct, welches alle Handles von fast allen % Objekten innerhalb des GUI beinhaltet. % GuiData - lagert alle GUI-Daten
%------------------------------------------------------
% Hauptfläche des GUIs
%------------------------------------------------------
%Auslesen der Auflösung für die Position des GUIs
scrsz = get(0, 'Screensize');
%------------------------------------------------------
% Grafiken
%------------------------------------------------------
% Auswahl des entsprechenden Axes-Objekts axes('parent', MainWindow, 'Position', [.35,.75,.1,.1]);
% Einlesen der Grafik
G1=imread('Pfeil.jpg','jpg');
% Grafik ausgeben, Grafik entzerren image(G1); axisimage;
% Koordinatenachsen ausblenden axis off
%------------------------------------------------------
% Callbacks
%------------------------------------------------------
% Speichern der Struktur guidata(MainWindow);
slider1_callback(handles.slider1);
function slider1_callback(hObject, handles) % Laden der Struktur: % --> Übergibt de facto das Handle des Objektes (Slider)an % Guidata, welches dann das Struct darstellt, wo alle % Handles, aller Objekte gespeichert sind.
handles = guidata(hObject);
% Variablendeklaration für Switch-Case-Variable
ableitung = 'String';
% Auslesen des Slider-Wertes
slider_wert = get(hObject, 'Value');
% Übergabe des Wertes an die Switch-Case-Konstruktion
ableitung = slider_wert;
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.