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

Vektor bei Sliderposition kürzen

 

ExxE
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.03.12
Wohnort: Wien
Version: R2010b
     Beitrag Verfasst am: 12.10.2012, 22:49     Titel: Vektor bei Sliderposition kürzen
  Antworten mit Zitat      
Ich möchte mittels der Slider Position einen vorhandenen Datenvektor kürzen.
Dazu habe ich 2 Slider und einen Button erstellt.
Die Werte der Slider habe ich gerundet und dann mittels "assignin()" im Workspace gespeichert.

Code:
% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider

load Daten.mat

x=get(hObject,'value');
x_round=round(x);
set(hObject,'value',x_round);
y=(Datenvektor(x_round,1));

x1=x_round
assignin('base','x1',x1);


In der Callbackfunktion des Buttons kürze ich den Datenvektor.

Code:
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(x1, x2, L_KnieAngle3D_orig, hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

Datenvektor_neu=Datenvektor(x1:x2)

assignin('base','Datenvektor_neu',Datenvektor_neu);


Ich erhalte aber leider keinen gekürzten Vektor sondern folgende Meldung.

Code:
Datenvektor_neu =
1x0 struct array with fields:
    figure1
    pushbutton1
    text3
    text1
    slider2
    slider1
    axes1
    output


Hat jemand eine Ahnung was da schief läuft?
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: 14.10.2012, 15:34     Titel:
  Antworten mit Zitat      
Hallo,

man sollte das Interface (Ein- und Ausgabeargumente) der Callbacks nicht abändern. Zur Frage, wie Daten korrekt zwischen mehreren Callbacks hin- und hergeschickt werden können, siehe z.B. hier:
http://www.mathworks.com/help/matla.....-data-in-a-guide-gui.html

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
ExxE
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.03.12
Wohnort: Wien
Version: R2010b
     Beitrag Verfasst am: 15.10.2012, 13:35     Titel:
  Antworten mit Zitat      
Danke für den Hinweis.

Ich habe jetzt probiert die Daten (die Werte des Sliders) einmal per "get" dem Push-Button zu zuordnen und einmal mit "guidata".

Beides sollte eine Möglichkeit sein um Daten innerhalb des GUI hand zu haben.

Mit dem "get" Befehl bekomme ich nur die Fehlermeldung:

Code:
??? Error using ==> get
There is no 'x1' property in the 'uicontrol' class.

Error in ==> Datenauswahl>pushbutton1_Callback at 217
get(hObject,'x1');

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> Datenauswahl at 42
    gui_mainfcn(gui_State, varargin{:});

Error in ==>
@(hObject,eventdata)Datenauswahl('pushbutton1_Callback',hObject,eventdata,guidata(hObject))

 
??? Error while evaluating uicontrol Callback


Mit "guidata" übernimmt er scheinbar die Werte, speichert aber scheinbar nur den zuletz gespeicherten ab.
Es könnte auch daran liegen dass der handle ("hObject" genannt) zu beiden Slider gleich benannt ist.
Diese kann ich aber nicht umbenennen, den dann funktioniert der handle scheinbar nicht mehr.
Also wenn ich ihn z.B. einmal hObject1 und hObject2 nenne.

Hier mein Code für einen Slider (der 2. Slider verwendet x2 als Sliderposition):

Code:
% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider

load Data.mat

x=get(hObject,'value');
x_round=round(x);
set(hObject,'value',x_round);
y=(L_KnieAngle3D_orig(x_round,1));

hMarker_local1 = findobj(gcf,'Tag','MyMarker1');
set(hMarker_local1,'Xdata',x_round,'YData',y);

x1=x_round
guidata(hObject,x1);


Und den Button

Code:
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

load Data.mat

x1=guidata(hObject)
x2=guidata(hObject)


Kann ich das dahingehend abändern, dass ich beide positionen mit "guidata" abspeichern kann?
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: 15.10.2012, 14:56     Titel:
  Antworten mit Zitat      
Hallo ExxE,

Code:
x1=guidata(hObject)
x2=guidata(hObject)

Nun sind die Inhalte von x1 und x2 identisch. Das ist wohl nicht so gewollt.

Schaue Dir doch nochmal die Hilfe-Texte für GUIDATA an. Du kannst auch einen Breakpoint in den Code setzen und betrachten, was GUIDATA genau zurückgibt.

"GUIDATA(Handle, Data)" speichert die Variable "Data" in der Figure, "Data=GUIDATA(Handle)" liest sie wieder. Änderungen in der Variable (oft wird sie "handles" genannt, aber das steht vollkommen frei) müssen zunächst gespeichert werden, damit sie in anderen Funktionen auch die aktuellen Werte haben.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.03.12
Wohnort: Wien
Version: R2010b
     Beitrag Verfasst am: 15.10.2012, 15:59     Titel:
  Antworten mit Zitat      
Halo Jan, danke für die Antwort

Ja, du hast recht, die sollen nicht identisch sein.

Ich bin von den Begriffen "handle" und "handles" total verwirrt.


Wenn ich es richtig verstanden habe, ist ein "handle" eine Variable (ich nenn es mal so, weil man es ja beliebig benennen kann), die wo hin, in meinem Fall zum Slider, verweist.

"handles" ist, wie du geschrieben hast, eine beliebig von mir definierte Variable, in meinem Fall x1 und x2.

Also muss ich bei "GUIDATA(Handle, Data)" und "Data=GUIDATA(Handle)" für Handle=hObject eingeben um zur Callback-Funktion des Sliders zu kommen und für Data meine definiere Variable, also x1 und x2.

Jetzt habe ich nur das Problem, dass beide Slider mit dem "handle" "hObject" angesprochen werden.
Und wenn ich die zweite Variable=x2 mittels "GUIDATA(hObject,'x2')" speichern will, überschreibt diese die zuvor gespeicherte Variable=x1.

Ich habe probiert den "handle" für die beiden Slider, mit hObject1 und hObject2, anderes zu benennen um den zuvor gespeicherten nicht zu überschreiben.
Dann bekomme ich aber folgende Fehlermeldung.

Code:
??? Undefined function or variable 'hObject1'.

Error in ==> Datenauswahl>pushbutton1_Callback at 220
x1=guidata(hObject1)

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> Datenauswahl at 42
    gui_mainfcn(gui_State, varargin{:});

Error in ==>
@(hObject,eventdata)Datenauswahl('pushbutton1_Callback',hObject,eventdata,guidata(hObject))

 
??? Error while evaluating uicontrol Callback
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: 15.10.2012, 17:33     Titel:
  Antworten mit Zitat      
Hallo,

wie von Jan schon gesagt: bitte die Hilfe zu GUIDATA lesen, insbesondere das letzte Beispiel.

Code:
x1=x_round
guidata(hObject,x1);

ist nicht sinnvoll. Stattdessen würde ich das machen:
Code:
handles.x1 = x_round;
guidata(hObject, handles)


Auch das ist nicht sinnvoll:
Code:

Stattdessen kannst du jetzt x1 direkt aus der Handles-Struktur herausholen:
Code:
handles.x1


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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: 16.10.2012, 07:54     Titel:
  Antworten mit Zitat      
Hallo ExxE,

Noch ein Hinweis als Ergänzung zu Harald's Antwort:

Zitat:
"GUIDATA(hObject,'x2')"

Bitte lies die Hilfe-texte nochmals genau. Es kommen keine Quotes um die Variable.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.03.12
Wohnort: Wien
Version: R2010b
     Beitrag Verfasst am: 16.10.2012, 08:57     Titel:
  Antworten mit Zitat      
Danke Harald und Jan

Mein GUI tut endlich was es tun soll! Very Happy

Bitte denkt nicht, dass ich die MATLAB Hilfe nicht benütze. Meistens habe ich ein Thema mehrmals gelesen bevor ich hier was Poste.
Das Problem mit der MATLAB Hilfe ist nur, dass man als Anfänger zur Hilfe eine Hilfe benötigt.
Aus meiner Erfahrung ist die MATLAB Hilfe nur für Personen die sich mit MATLAB schon besser auskennen eine wirkliche Hilfe.

Danke noch mal euch beiden!
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: 17.10.2012, 08:19     Titel:
  Antworten mit Zitat      
Hallo ExxE,
Zitat:
Aus meiner Erfahrung ist die MATLAB Hilfe nur für Personen die sich mit MATLAB schon besser auskennen eine wirkliche Hilfe.

Und genau deswegen gibt es ja dieses Forum und nicht ein statisches Popup-Window in dem "RTFM" steht - obwohl die Dokumentation wirklich 99% der Fragen lösen könnte.

Wir hatten nochmal auf die Hilfe hingewiesen, weil dort die Probleme explizit behandelt werden. Es ist also als Hinweis gemeint, dass das benötigte Detail doch dort zu finden ist. Es wäre weniger effizient (und würde zudem TMW's Copyright tangieren), wenn wir stattdessen die entsprechenden Abschnitte der Dokumentation direkt hier per Copy&Paste einfügen.

Gruß, Jan
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.