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)
% --- 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)
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...
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
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]
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?
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
Einstellungen und Berechtigungen
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.