Bonjour à tous,
Mon objectif : Dans une figure qui contient plusieurs surfaces, je souhaite récupérer l'ID de la surface lorsque le curseur de la souris passe dessus sans cliquer.
J'ai créé le petit programme suivant :
Ce petit programme me fourni bien les coordonnées du curseur de la souris à tout moment dès lors que la souris bouge. Ensuite comme on peut le voir avec "GCO" et "get(GCO,'type')" j'essaye, également à chaque instant, de récupérer l'ID de l'objet graphique sous le curseur ainsi que le "type" de cet objet. Donc quand mon curseur est sur le bord de ma figure, je devrais voir dans l'invite de commande matlab "figure", puis lorsque je bouge mon curseur pour survoler une surface, je devrais voir s'afficher "surface" dans l'invite de commande matlab. Cependant l'ID ne se met pas a jour et donc "GCO" fournit toujours le même identifiant. Par contre, si je clique avec l'un ou l'autre des boutons de ma souris, cet ID se met a jour, et le programme fonctionne comme je l'attends. Comme si l'action de cliquer génère un événement interne qui rafraichit les donnés. Je pense donc qu'il manque dans ma fonction "event_motion" une simple fonction de mise a jour des données, mais laquelle?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 function main % création de la figure mère avec callback sur % la sous-fonction "event_motion" qui sera executée % chaque fois que la souris bouge dans la fenetre sf_motion=@event_motion; handlefig=figure(); set(handlefig,'WindowButtonMotionFcn',sf_motion); % création d'une premiere surface [x,y]=meshgrid([1,3],[1,4]); surface(x,y,meshgrid([1,1],[1,1]),2); % création d'une seconde surface [x,y]=meshgrid([2,2.5],[2,2.5]); surface(x,y,meshgrid([1,1],[1,1]),2.1); end function event_motion(src,evnt) get(gcf,'currentpoint') GCO %récupère l'identifiant de l'objet graphique courant get(GCO,'type') end
L'objectif à terme sera de passer la surface que le curseur survole en surbrillance et d'autre chose bien sur.
D'avance merci à vous.
Partager