2016-04-05 1 views
0

Ich möchte Tooltips für jede Zeile in einem baumplotähnlichen Diagramm in MATLAB erstellen. Ich verwendete Code-Beispiele das folgende Skript zu erstellen, die zeigt, ob die Maus über eine Leitung Objekt ist:MATLAB: Erstellen von QuickInfos für mehrere Linienobjekte in einem Plot mit WindowButtonMotionFcn

function test_mouseover2 
f=figure(1); 
axis([0 1 0 1]); 
L=line([0.2500 0.5000], [0.6 0.8], 'Color','red');  
set(f,'WindowButtonMotionFcn',{@mousemove,L,process}); 
end 

function mousemove(src,ev,L,process) 
obj = hittest(src); 
if obj == L 
    disp('Yes'); 
else 
    disp('No'); 
end 
end 

In meinem weiteren Projekt, das ich mehrere Zeilen in der Handlung müssen. Das einfache Beispiel im Folgenden zeigt, dass zwei Linien geplottet sind. Allerdings ist das Ergebnis in dem Befehlsfenster immer „Nein“:

function test_mouseover2 
f=figure(1); 
axis([0 1 0 1]); 
L=line([0.2500 0.5000; 0.125 0.25], [0.6 0.8; 0.2 0.6], 'Color','red'); 

set(f,'WindowButtonMotionFcn',{@mousemove,L,process}); 
end 

function mousemove(src,ev,L,process) 
obj = hittest(src); 
if obj == L 
    disp('Yes'); 
else 
    disp('No'); 
end 
end 

Gibt es einen anderen Ansatz zu überprüfen, ob die Maus über eine Leitung Objekt ist oder nicht?

Antwort

1

In mousemove, Test für any(obj == L). Dies testet, ob eines der Elemente in L mit obj übereinstimmt. Da obj==L höchstens wird ein Nicht-Null-Element hat, das ergibt immer falseas far as if is concerned:

Ein Ausdruck ist wahr, wenn das Ergebnis nicht leer und enthält nur Nicht-Null-Elemente (logische oder reale Zahlen). Ansonsten ist der Ausdruck falsch.

+0

Vielen Dank. Weißt du, ob es möglich ist, das eine Element von 'L' zu erhalten, das mit' obj' übereinstimmt? – stm

+1

@stm 'find (obj == L)' gibt den passenden Index zurück (oder eine leere Matrix, wenn keine Übereinstimmung) – zeeMonkeez

+0

Wow, es ist so einfach ... Nochmals vielen Dank für Ihre Hilfe! – stm