Bonjour à tous, je me permets de vous écrire car j'ai un problème avec la gestion d'axes dans mon GUI.
J'ai un GUI possédant 3 axes. Chaque axe possède un menu contextuel, identique pour chaque axe. Ces menus contextuels permettent, par exemple, d'ouvrir une image et de l'afficher dans l'axe (fonction open_image). Voici comment ces menus ainsi que les axes sont programmés :
Et voici la fonction à laquelle le menu fait appel :
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
27
28 menu_contextuel=uicontextmenu; uimenu(menu_contextuel,'Label','Open image','Tag','open_image_context','Callback',@open_image); [...] axes('units','characters',... 'Parent',findobj('tag','Panel_images'),... 'position',[3.4 9 29 13.5],... 'XTick',[],'YTick',[],... 'uicontextmenu',menu_contextuel,... 'Tag','axes1'); % Création de l'objet axes2 axes('units','characters',... 'Parent',findobj('tag','Panel_images'),... 'position',[36.2 9 29.0 13.5],... 'XTick',[],'YTick',[],... 'uicontextmenu',menu_contextuel,... 'Tag','axes2'); % Création de l'objet axes3 axes('units','characters',... 'Parent',findobj('tag','Panel_images'),... 'position',[69 9 29 13.5],... 'XTick',[],'YTick',[],... 'uicontextmenu',menu_contextuel,... 'Tag','axes3');
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 function open_image(obj,event) [...] Code pour la sélection d'un fichier, test du format etc... switch get(gco,'tag') case 'axes1'setappdata(findobj('Tag','Master_figure'),'ORIG_IM1',image_chargee); imagesc(image_chargee,'hittest','off');colormap(gray); set(gco,'XTick',[],'YTick' [],'DataAspectRatioMode','manual','DataAspectRatio',[1 1 1]);case 'axes2'setappdata(findobj('Tag','Master_figure'),'ORIG_IM2',image_chargee); imagesc(image_chargee,'hittest','off');colormap(gray); set(gco,'XTick',[],'YTick',[],'DataAspectRatioMode','manual','DataAspectRatio',[1 1 1]);case 'axes3'setappdata(findobj('Tag','Master_figure'),'ORIG_IM3',image_chargee); imagesc(image_chargee,'hittest','off');colormap(gray); set(gco,'XTick',[],'YTick',[],'DataAspectRatioMode','manual','DataAspectRatio',[1 1 1]);end
Ce code fonctionne très bien lorsqu'aucune image n'a été encore chargée. J'ai décidé de partir dans la programmation d'une seule fonction et de récupérer le lien de l'axe utilisé. Malheureusement, comme j'utilise la propriété "HitTest", lorsque je décide de charger une nouvelle image, gco ne correspond plus à l'axe utilisé...
Auriez-vous une solution à mon problème, afin d'avoir un seul menu contextuel défini, partagé par mes trois axes et de faire appel à une seule fonction, tout en étant capable de déterminer de quel axe il s'agit.
Merci d'avance pour votre aide.
Partager