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

Mausposition abfragen und daraus beliebige Anzeige erstelle

 

gasmeister
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 12.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2011, 19:12     Titel: Mausposition abfragen und daraus beliebige Anzeige erstelle
  Antworten mit Zitat      
Hallo Leute,

Ich habe für eine Klasseneinteilung eine dreidimensionale Darstellung in einem 2D Koordinatensystem selbst programmiert, ein Bild davon ist im Anhang.

Die Klassen sind auf der y-Achse und die bunten Kästchen sind je nach Anzahl der in der Klasse liegenden Werte eingefärbt - das ist der Z-Wert.

Das ganze dann für die verschiedene X-Werte.

Ein Beispiel:

Folgende aus der Luft gegriffene Werte:

X-Wert = 50
Y-Klasse = 10-11
innerhalb der Klasse liegen 150 Werte(10.05, 10.11, 10.25,...) ->
Kästchen bei X = 50 und Y = 10-11 wird meinetwegen gelb eingefärbt.

Dazu wird dann rechts die Farbskala angezeigt, um den Z-Wert(die Farbe des Kästchens) zuordnen zu können.

Nur ist es eben etwas umständlich, das so zuzuordnen.


----

So, nun schwebt mir folgendes vor:
Fahre ich mit der Maus über ein buntes Kästchen, dann soll mir X,Y und Z-Wert dieses Kästchens angezeigt werden.

Nur wie bekommt man das hin?
Für matlabinterne Darstellungen gibt es das ja, aber wie sieht es sonst aus?

---

Eine Idee meinerseits:

Fahre ich mit dem Mauszeiger über ein Kästchen, überprüft eine Funktion im Hintergrund die Position des Mauszeigers im Koordinatensystem.
Beispielsweise X= 49.9, Y = 10.4.

Anhand dieser Position kann die Funktion dann einen Z-Wert zuordnen und dieser wird mir dann angezeigt.

--

Nochmal in kurz:

Die Funktion, die ich suche, soll die Mausposition im Koordinatensystem abprüfen. Daraufhin ordne ich über eine eigene Programmierung anhand des X- und des Y-Werts einige beliebige Werte zu. Diese zugeordneten Werte sollen mir dann im Plot in einem kleinen extra-Kästchen angezeigt werden

Geht sowas denn?

mfG

cursor.JPG
 Beschreibung:

Download
 Dateiname:  cursor.JPG
 Dateigröße:  64 KB
 Heruntergeladen:  812 mal
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 03.02.2011, 22:03     Titel:
  Antworten mit Zitat      
Hallo,

habe leider gerade wenig Zeit, aber meinst du vielleicht etwas in der Art (als Funktion "untitled" abspeichern und ausführen)?
Code:

function untitled
figure('WindowButtonUpFcn',@pos);
hx = axes;
plot(1:10);
setappdata(hx,'htxt','');
end

function pos(varargin)
hx=get(varargin{1},'Children');
if ~isempty(getappdata(hx,'htxt'))
    delete(getappdata(hx,'htxt'))
end
pts = get(hx,'CurrentPoint');
pts = pts(1,:);
htxt = text(pts(1),pts(2),sprintf('x=%.2f y=%.2f z=%.2f',pts(1),pts(2),pts(3)));
setappdata(hx,'htxt',htxt);
end
 


MFG

Sco
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: 04.02.2011, 01:36     Titel:
  Antworten mit Zitat      
Hallo Sco,

Meinst Du statt "WindowsButtonUpFcn" vielleicht die "WindowsButtonMotionFcn"?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 04.02.2011, 02:00     Titel:
  Antworten mit Zitat      
Hallo Jan,

Zitat:

Meinst Du statt "WindowsButtonUpFcn" vielleicht die "WindowsButtonMotionFcn"?

Nein eigentlich nicht. Ich dachte er möchte einen Bereich seines Graphen auswählen (klicken) und dann eben etwas ausführen mit den Koordinatenangaben.

Aber vielleicht hasst auch du recht, da dies wohl nach dem klingt:
Zitat:

Fahre ich mit der Maus über ein buntes Kästchen, dann soll mir X,Y und Z-Wert dieses Kästchens angezeigt werden.


Wie auch immer,die Änderung ist ja trivial. In dem Sinne soll er entscheiden was er braucht Smile

MFG

Sco
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: 04.02.2011, 03:17     Titel:
  Antworten mit Zitat      
Hallo Sco,

Jetzt habe ich verstanden, was Du wolltest. Dafür würde ich eher die WindowsButtonDownFcn verwenden: Üblicherweise erhält man die Informationen beim Klick, nicht bei Loslassen der Maustaste. Aber es stimmt: Das sollte der OP selbst bestimmen können.

Gute Nacht, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gasmeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 12.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2011, 09:32     Titel:
  Antworten mit Zitat      
Hallo Sco, dass sieht schonmal sehr gut aus Very Happy
Ich schau mal, ob ich damit klarkomme.

mfG
Private Nachricht senden Benutzer-Profile anzeigen
 
gasmeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 12.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2011, 11:27     Titel:
  Antworten mit Zitat      
Hallo,

Also leider komme ich nicht damit klar.
Ich habe eine GUI erstellt, in der sich ein Koordinatensystem befindet.
Für die Daten und das Koordinatensystem gibt es vier verschiedene Darstellungsarten, eine davon ist im Anhang im ersten Post. In dieser möchte ich das so, wie in dem Vorschlag von Sco. Nur hab ich überhaupt keien Idee, wie ich das bei mir einbaue.

mfG
Private Nachricht senden Benutzer-Profile anzeigen
 
gasmeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 12.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2011, 12:34     Titel:
  Antworten mit Zitat      
So ich bin nun ein bisschen weiter.

Habe nun den Vierecken direkt eine ButtonDownFcn zugeordnet.

Die Vierecke werden nun so erzeugt:

Code:
for i=1:n_x
    for j = 1:anz_klassen
        farbe = farbe_ges(farb_index(j,i),:);
        rectangle('Position',[handles.x(i)-x_diff/40,h_balken(j),x_diff/20,h_balken(2)],...
        'FaceColor',farbe, 'EdgeColor','black','ButtonDownFcn',@recbut)
    end
end


So nun passiert auch was, wenn ich auf die Vierecke klicke.
Eine Fehlermeldung Smile

Wie muss die

Code:


denn nun aussehen, das ich da diesem Viereck zugehörige Daten reinbekomme und dann per Klick anzeige?

Am einfachsten wäre die Eigenschaft "Position" darein zu bekommen, zu verarbeiten und das ganze dann anzuzeigen.

mfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 04.02.2011, 15:55     Titel:
  Antworten mit Zitat      
Hallo,

@ Jan
Zitat:

Jetzt habe ich verstanden, was Du wolltest. Dafür würde ich eher die WindowsButtonDownFcn verwenden: Üblicherweise erhält man die Informationen beim Klick, nicht bei Loslassen der Maustaste.

Da hasst du natuerlich recht Smile. War dem kurz angebunden sein geschuldet.

@gasmeister
Zitat:

So nun passiert auch was, wenn ich auf die Vierecke klicke.
Eine Fehlermeldung Smile

Dann gib sie doch bitte auch an! Das vereinfacht die Fehlersuche ungemein. Ausserdem waere es auch praktisch wenn du wenigstens ein wenig deines Codes aus der "function recbut" angeben wuerdes (so kann man sich ein Bild machen was du bereits versucht hasst bzw. vielleicht moechtest).

Zitat:

...denn nun aussehen, das ich da diesem Viereck zugehörige Daten reinbekomme und dann per Klick anzeige?

Am einfachsten wäre die Eigenschaft "Position" darein zu bekommen,

Welche Daten meinst du denn, die Daten aus deinem Graph oder irgendwelche Positionsangaben? Welche "Position" meinst du im 2. Satz, die aus dem Rechteck (welche du ja schon hasst) oder die vom Cursor?

Leider kann ich dir nicht helfen, da ich nicht wirklich verstehe was du wie machen moechtest.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
gasmeister
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 12.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2011, 16:18     Titel:
  Antworten mit Zitat      
Hallo,

Die Funktion recbut war noch fast leer, deshalb habe ich sie nicht gepostet Very Happy

Jetzt hab ich es aber selbst hinbekommen nach 4 Stunden Frickelei.

Die Vierecke werden nun so erstellt:

Code:
for i=1:n_x
    for j = 1:anz_klassen
        farbe = farbe_ges(farb_index(j,i),:);
        pos = [handles.x(i)-x_diff/40,h_balken(j),x_diff/20,h_balken(2)];
        rectangle('Position',pos,...
        'FaceColor',farbe, 'EdgeColor','black','ButtonDownFcn',{@recbut,handles});        
    end
end


Und die ButtonDownFcn sieht so aus:

Code:
function recbut(src,evt, handles) %#ok

% alten Text löschen
delete(findobj(gca,'Type','text'));
handles.status.legende = 0;


% Position des Vierecks bestimmen
pos = get(src,'Position');
x = pos(1)+pos(3)/2;

% Y-Werte für Abgleich runden
y_zu = round(pos(2)*100)/100;
y_klassen = round(handles.y_klassen.*100)/100;

% Index in X-Richtung ermitteln
for i=1:length(handles.x)
    if x == handles.x(i)
        xindex = i;
    end
end

% Index in Y-Richtung ermitteln
for i=1:length(y_klassen)
    if y_zu == y_klassen(i)
        yindex = i;  
        break
    end
end

% Z-Wert(Häufigkeit dieser Klasse) zuordnen
z = handles.haeuf(yindex, xindex);

% Kästchen mit dem Text plotten
axes(handles.axes)
postext = sprintf('X-Wert %.0f\nY-Wert: %.2f - %.2f\nHäufigkeit: %i' ...
    ,x,pos(2),pos(2)+pos(4),z);

text(x,y_zu,postext,'Units','data','FontSize',7, ...
    'BackgroundColor',[1 1 1],'EdgeColor',[1 0.1 0.1],'LineWidth',1, ...
    'HorizontalAlignment','left','VerticalAlignment','top','Margin',3);


Der Knackpunkt war bei "'ButtonDownFcn',{@recbut,handles}); " dieses handles mit hintendran zu hängen, dann ging es recht einfach.

Dieses Zuordnen der Mauszeigerposition im Koordinatensystem konnte ich mir letztendlich sparen, da man die Kästchen auch direkt anklicken kann.
Aber das hätte so ähnlich funktioniert(bei der ButtonDownFcn das handles dranhängen).

mfG
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.