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

Pushbuttons öfters ausführen

 

tina
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.05.10
Wohnort: Stuttgart
Version: R2009b
     Beitrag Verfasst am: 17.05.2010, 18:34     Titel: Pushbuttons öfters ausführen
  Antworten mit Zitat      
Hallo alle zusammen!

Ich bin leider noch ein ziemlicher Neuling auf dem Gebiet der Matlab-Programmierung, geschweige denn was GUI angeht.

Ich habe mit GUIDE eine Oberfläche programmiert mit mehreren Pushbuttons. Momentan hab ich ein Problem, bei dem ich nicht weiß wie ichs richtig beschreiben soll.

Ich schilder euch mal meinen bisherigen Ablauf:
- Drücke ich auf den ersten Pushbutton, rechnet es mein Progrämmchen durch und gibt als Ergebnis einen Scatter aus.
- Beim zweiten Pushbutton wähle ich mit rbbox ein Rechteck aus mit den Koordinaten der Eckpunkte des Rechtsecks. Das Rechteck wird auch angegeben mit plot.
- Beim dritten Pushbutton soll es die im Rechteck befindeten Punkte löschen und nur noch die restlichen Punkte neu anzeigen.

Nun zu meinen Problemen:
1.) Beim dritten Button zeigt es mir keinen neuen scatter-Plot an, sondern macht einfach gar nix und der "alte" plot bleibt.
2.) Mein eigentliches, wichtiges Anliegen ist aber, wenn ich öfters über rbbox Punkte auswähle, soll es jedesmal nen neuen Plot angeben. D.h. ich möchte solange Markieren (Pushbutton2) und Löschen/Neuplotten (Pushbutton3) bis ich mein gewünschtes Ergebnis habe. Dabei wird natürlich der Punktehaufen immer kleiner, aber das ist gerade das Ziel. Zum Schluß will ich die entgültigen Vektoren haben.

Hier mal meine beiden Pushbuttons:
Code:
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Markieren mit Rechteck
waitforbuttonpress;
point1 = get(gca,'CurrentPoint');    % button down detected
rbbox;                   % return figure units
point2 = get(gca,'CurrentPoint');    % button up detected
point1 = point1(1,1:2);              % extract x and y
point2 = point2(1,1:2);
p1 = min(point1,point2);             % calculate locations
offset = abs(point1-point2);         % and dimensions
x = [p1(1) p1(1)+offset(1) p1(1)+offset(1) p1(1) p1(1)];
y = [p1(2) p1(2) p1(2)+offset(2) p1(2)+offset(2) p1(2)];
hold on
axis manual
plot(x,y)

setappdata(0,'p1', p1(2))
setappdata(0,'p1offset', p1(2)+offset(2))


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

% Zugriff auf Daten
Spalte1neu = getappdata(0,'Spalte1neu');
Spalte3 = getappdata(0,'Spalte3');
Spalte4 = getappdata(0,'Spalte4');
p1 = getappdata(0,'p1');
p1offset = getappdata(0,'p1offset');


% markierte Punkte löschen / restliche Punkte darstellen
auswahl = find((Spalte3>p1offset) | (Spalte3<p1));
Spalte1ausw = Spalte1neu(auswahl); % x
%Spalte2ausw = Spalte2(auswahl); % y
Spalte3ausw = Spalte3(auswahl);  % z
Spalte4ausw = Spalte4(auswahl); % Grauwerte

scatter(Spalte1ausw, Spalte3ausw, 100, Spalte4ausw, '.')
xlabel('Breite')
ylabel('Länge')
daspect([1 1 1])
colormap(gray)


Ich hoffe ihr könnt mir dabei helfen. Und Danke für eure Hilfe.
Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2010, 09:01     Titel:
  Antworten mit Zitat      
Ich nehme mal an, dein Problem besteht darin, dass Du bei Pushbutton2 den hold on befehl nutzt, diesen bei pushbutton3 aber nicht mit hold off aufhebst bevor du neu zeichnest...
Private Nachricht senden Benutzer-Profile anzeigen
 
tina
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.05.10
Wohnort: Stuttgart
Version: R2009b
     Beitrag Verfasst am: 18.05.2010, 16:04     Titel:
  Antworten mit Zitat      
danke für diesen Hinweis. Das hat mein erstes Problem gelöst und der neue Plot wird angezeigt...
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 19.05.2010, 07:56     Titel:
  Antworten mit Zitat      
Moin,

du musst noch die AppData aktualisieren am Ende von Button 3:
Code:
setappdata(0,'Spalte1neu',Spalte1ausw);
% etc.


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
tina
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.05.10
Wohnort: Stuttgart
Version: R2009b
     Beitrag Verfasst am: 19.05.2010, 08:20     Titel:
  Antworten mit Zitat      
das sieht schon sehr vielversprechend aus, aber es kommt beim zweiten Buttonclick eine Fehlermeldung, dass die Matrixdimensionen nicht mehr passen

??? Index exceeds matrix dimensions.
Spalte1ausw = Spalte1neu(auswahl); % x
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.05.2010, 08:56     Titel:
  Antworten mit Zitat      
Falls Du

Code:

setappdata(0,'Spalte1neu',Spalte1ausw);
 


eingefügt hast, liegt es möglicherweise daran, dass Spalte1ausw durch die
Zuweisung:
Code:

Spalte1ausw = Spalte1neu(auswahl);
 


Beim ersten Klick nur noch einen Wert zugeschrieben bekommen hat (auswahl). Dann wurde Spalte1neu per setappdata (s.o.) mit diesem einen Wert überschrieben...damit dürfte dann Spalte1neu beim zweiten Klick kein Vektor mehr sein --> (auswahl) greift ins leere --> Matrix dimensions Error

EDIT: Obwohl...auswahl kann ja selber ein Vektor sein...dann hast Du wahrscheinlich

Code:

setappdata(0,'Spalte3',Spalte3ausw);
 

vergessen und er findet anhand der alten Daten mehr PUnkte als in Spalte1neu drin stehen...
Private Nachricht senden Benutzer-Profile anzeigen
 
tina
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.05.10
Wohnort: Stuttgart
Version: R2009b
     Beitrag Verfasst am: 19.05.2010, 11:05     Titel:
  Antworten mit Zitat      
danke, es klappt jetzt... Very Happy Very Happy

hab noch eine andere Frage. Vielleicht weiß das jemand...
Eine rbbox setzt man sinnvollerweiße im 2D-Bereich ein, also in der xy-Ebene, und es werden die Ecken des Rechtecks in x und y angegeben.
In 3D ist die Sache etwas komplizierter, so dachte ich mir, wenn man einen 3D-Plot in die xz- und yz-Ansicht bringt, kann man wieder in "2D" ein Rechteck ziehen. Die Ansichten hab ich schon. Aber wenn ich eine rbbox zeichne liegt diese nicht in der gewünschten Ansicht, sondern in der "Standardansicht" in der xy-Ebene.
Weiß jemand wie man die Koordinaten der rbbox in x, y und/oder z bestimmt?
Das Thema bleibt das gleiche wie bisher: Punkte in der rbbox löschen und neu darstellen[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.05.2010, 12:14     Titel:
  Antworten mit Zitat      
Meines Wissens ist die rbbox für 2D Fälle gedacht und nicht für 3D.

Die Endkoordinaten kannst Du Dir einfach zurückgeben lassen [X Y W H] = ...

Aber ich fürchte der sucht sich immer die XY Ansicht...hab da aber nicht wirklich Ahnung von...

Du musst aber dann doch einfach nur deine Y,Z Vektoren als X und Y übergebn und rbbox sollte dir dann die gewünschten Y,Z Koordinaten als X Y wiedergeben...ist doch im Prinzip reine Namensgebung...oder blick ich was nicht?
Private Nachricht senden Benutzer-Profile anzeigen
 
tina
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.05.10
Wohnort: Stuttgart
Version: R2009b
     Beitrag Verfasst am: 19.05.2010, 14:16     Titel:
  Antworten mit Zitat      
du hast Recht, Zenon. Durch die geänderte Namensgebung klappt die Sache.
Da der CurrentPoint eine 3x2-Matrix ist mit den xyz-Koordinaten, kann man da einfach die gewünschten Koordinaten auswählen. Mittlerweilse zeigts mir die rbbox in der yz-Ansicht richtig an

ein kleiner Hinweis: man muss mit plot3 arbeiten, wobei x ein Nullvektor ist
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.