Verfasst am: 31.07.2013, 14:01
Titel: Werte und Text aus dynamischen Popup
Hallo alle miteinander,
ich habe das Forum jetzt schon durchforstet, ebenso die Hilfe. Die Problematik wurde oftmals zahlreich erläutert, bei vielen gelöst. Aber ich hänge nun trotzdem seit zwei Tagen einem Problem. Kurze Erläuterung vorab. Ich bearbeite mit Hilfe eins mathematischen Algorithmus unterschiedliche Werte, die anschließend in einer GUI in einem axes dargestellt werden. Diese Werte, werden zuvor aus einer Excel Datei eingelesen und weiter verarbeitet. Da es Objekte 1. Ordnung und Objekte zweiter Ordnung gibt und das am Ende etwas unübersichtlich wird, hatte ich die Idee mit einem dynamischen Popup zu arbeiten, dass die Objekte 1. Ordnung immer dargestellt werden und die Objekte 2. Ordnung nach Auswahl durch das Popup hinzugefügt werden, je nach Bedarf. Das Einlesen in das dynamische Popup klappt einwandfrei.
Zunächst lass ich das Popup Menü darstellen und lese die Objektnamen ein, danach gebe ich den Wert bzw. Anzahl der Objekte an. Und danach möchte ich per Callbackfunktion je nach wahl des Objekts im Axes als Punkt darstellen, dazu werden aus einer Matrix die Koordinaten entnommen.
Code:
function popupeig_Callback(hObject, eventdata, handles) % hObject handle to popupeig (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
popup=handles.popupeig;
YE=handles.YE;
txtE=handles.txtE;
val = get(popup,'Value');
plot(YE(val,1),YE(val,2),'bo');
text(YE(val,1)+0.1,YE(val,2),txtE(:,val), 'Color','b');
Ja von wegen... Nun meine Frage - Gibt die Variable "val" wirklich die "Position 1-...." an, dass ich mit der Variable wirklich auf die einzelnen Werte der Matrix zugreifen kann ? Oder besser formuliert - dass es nicht heißt, wenn es nicht geht, kannst du die Frage selber beantworten- wie kann ich diesen Positionen die Werte im Popup Menü zuweisen?
Besten Dank im Voraus.
txtz: Anzahl der Zeilen inkl. einer Leerzeile (Matrix)
YE: Matrix mit mehrdimensionalen Koordinaten
txtE: Objekte die eingelesen Werten
kommt eine Fehlermeldung? Oder was klappt da nicht? was groß ist in txtE?
zu deiner Frage: Value liefert wirklich die Position der Ausgewählten Menupunkts in der Popup. Dabei werden Popup-Einträge von Oben nach Unten durchnummeriert. Warum es mit deiner Matrix nicht zusammenpasst, kann ich leider nicht beantworten.
Das kannst du ja auch überprüfen,
z.B so:
Code:
val = get(popup,'Value');
str = get(popup,'String');
kommt eine Fehlermeldung? Oder was klappt da nicht? was groß ist in txtE?
zu deiner Frage: Value liefert wirklich die Position der Ausgewählten Menupunkts in der Popup. Dabei werden Popup-Einträge von Oben nach Unten durchnummeriert. Warum es mit deiner Matrix nicht zusammenpasst, kann ich leider nicht beantworten.
Das kannst du ja auch überprüfen,
z.B so:
Code:
val = get(popup,'Value');
str = get(popup,'String');
Also das klappt einwandfrei. Es kam die ganze Zeit keine Fehlermeldung. Das Tool hat mir nix angezeigt, weshalb es nicht ging. Ich dachte, dass ich auf dem Holzweg bin mit dem Value. Aber da du es dankenderweise bestätigt hast war ich auf dem richtigen Weg. Aber jetzt habe ich ein anderes Problem an der Stelle erhalten, was zuvor nicht dargestellt wurde. Was allerdings nicht so wirklich in diesen Bereich passt.
Code:
??? Reference to non-existent field 'YE'.
Error in ==> tool>popupeig_Callback at 383
YE=handles.YE;
Aber schon mal Danke für die Hilfe und die Bestätigung. Demnach müsste er eigentlich mit der Variabel "val" die richtige Spalte der Koordinate in der Matrix auswählen.
es kann geschlossen werden - Thema hat sich geklärt. Da macht man zwei Tage lang rum, entschließt sich dann um Hilfe im Forum zu bitten und dann ändert man eine Kommandozeile und alles läuft. Oh man wie peinlich!
Eigentlich ist es mir etwas peinlich und auch nicht aufgefallen, weil alle anderen Werte übergeben worden sind und er davor keine Fehlermeldung angezeigt hat. Aber die Zeile wird dich jetzt aus den Socken hauen!
ich hätte nochmal eine letzte Frage zu der Thematik dynamisches Popup. Und zwar hatte ich ja zuvor bereits erwähnt, dass entsprechend der Auswahl aus dem Popup das entsprechende Objekt in meinem Axes dargestellt wird. Nun kam mir noch die Idee, dass es User geben könnte, die evtl. zunächst ein falsches Objekt gewählt haben könnten und genau den letzten Plot rückgängig machen wollten. Meine erste Idee war dazu, die Auswahl zu speichern und dann per handle zu übergeben um dann durch eine zusätzlichen "Undo" Button die letzte Darstellung zu löschen. Funktioniert aber nur teilweise.
Code:
%Grafische Ausgabe der Auswahl aus Popup
PE=plot(YE(val,1),YE(val,2),'bo');
TE=text(YE(val,1)+0.1,YE(val,2),txtE(:,val),'Color','b');
LE=plot([0 YE(val,1)],[0 YE(val,2)], 'Color','m');
%Übergeben der letzten Objekte, die geplottet wurden
handles.PE=PE;
handles.TE=TE;
handles.LE=LE;
guidata(hObject, handles);
So nachfolgend nun der Grund bzw. die Idee weshalb ich diese Variabeln übergebe.
Code:
% --- Executes on button press in undo. function undo_Callback(hObject, eventdata, handles) % hObject handle to undo (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
PE=handles.PE;
TE=handles.PE;
LE=handles.PE;
delete(LE);
delete(PE);
delete(TE);
Leider wird aber nur PE aus dem Plot gelöscht, d.h. der erzeugte Punkt, und nicht der dazugehörige Text bzw. der Vektor, der vom Nullpunkt zum Punkt des Objektes erzeugt wird. Dachte mir, vielleicht schreibe ich es etwas anders - kompakter, vielleicht klappt es dann.
Sooo, das war genau so wenig erfolgreich. Nun die Frage - ist es überhaupt so möglich Linien und Texte aus einem plot zu löschen. Wie gesagt wird derzeit nur der Punkt gelöscht. Oder muss ich evtl. die variablen anders derklarieren. Eine zweite Alternative wäre mit cobyobj und dann das vorherige Axes erneut laden, allerdings gefällt mir diese Variante nicht.
vl. ist nicht das was du meinst
aber man kann im plot die einzelnen Linien anklicken und ganz normal mit Enft löschen^^
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.