Bonjour,
J'ai actuellement le même problème que dans cette discussion et je me demandais comment programmer la popupmenu sachant que toute les données et toutes les actions se font dans la fonction du pushbutton?
Merci
Version imprimable
Bonjour,
J'ai actuellement le même problème que dans cette discussion et je me demandais comment programmer la popupmenu sachant que toute les données et toutes les actions se font dans la fonction du pushbutton?
Merci
Afin de mieux situer mon problème,dans mon interface,j'ai un pushbutton sur lequel je clique pour sélectionner les données à visualiser (sélection de 2 fichiers,chacun contenant 24 volumes) et un popupmenu qui me permet de choisir parmi 3 types de coupes a visualiser.
Actuellement je peux visualiser les données,mais à chaque fois que je sélectionne un type de coupe je dois resélectionner les volumes.
Toutes les fonctionnalités sont définies dans la pushbutton function.Je n'ai rien défini dans le popupmenu.
Le programme est le suivant:
Code:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 function pushbutton1_Callback(hObject, eventdata, handles) %% Center of the volume z = 6; y = 129; x = 110; %% Loading of files for true data of patient 1 %% Displaying images of 2 patients [File,PathName] = uigetfile('*.','Load','MultiSelect','on'); [File1,PathName1] = uigetfile('*.','Load','MultiSelect','on'); L=get(handles.popupmenu1,'Value'); for n=1:24 [M(:,:,:,n),sign(:,n),O(:,n), AxisX(:,n), AxisY(:,n), AxisZ(:,n), Extent(:,n)] = readICS([PathName char(File(:,n))]); h = subplot(1,2,1,'Parent',handles.uipanel1,'position',[.1, .1, .3, .7]); colormap gray ;axis off; I1 = squeeze(M(x,:,:,n)); I2 = squeeze(M(:,y,:,n)); I3 = squeeze(M(:,:,z,n)); Iseq1(:,:,n) = I1; Iseq2(:,:,n) = I2; Iseq3(:,:,n) = I3; I11= imresize(Iseq1(:,:,n),[256 80],'cubic'); I12= imresize(Iseq2(:,:,n) ,[256 80],'cubic'); I13= imresize(Iseq3(:,:,n),[256 256],'cubic'); if (L==1) imagesc(I12, 'Parent', h); pause(.1) elseif (L==2) imagesc(I11, 'Parent', h); pause(.1) elseif (L==3) imagesc(I13, 'Parent', h); pause(.1) end handles.M1 = M; hold on [M(:,:,:,n),sign(:,n),O(:,n), AxisX(:,n), AxisY(:,n), AxisZ(:,n), Extent(:,n)] = readICS([PathName1 char(File1(:,n))]); h = subplot(1,2,2,'Parent',handles.uipanel1,'position',[.6, .1, .3, .7]); colormap('gray');axis off; I1 = squeeze(M(x,:,:,n)); I2 = squeeze(M(:,y,:,n)); I3 = squeeze(M(:,:,z,n)); Iseq1(:,:,n) = I1; Iseq2(:,:,n) = I2; Iseq3(:,:,n) = I3; I11= imresize(Iseq1(:,:,n),[256 80],'cubic'); I12= imresize(Iseq2(:,:,n) ,[256 80],'cubic'); I13= imresize(Iseq3(:,:,n),[256 256],'cubic'); if (L==1) imagesc(I12, 'Parent', h); pause(.1) elseif (L==2) imagesc(I11, 'Parent', h); pause(.1) elseif (L==3) imagesc(I13, 'Parent', h); pause(.1) end handles.M2 = M; end handles.load = 1; guidata(hObject, handles);
Bonjour,
J'aurais pensé à créer une fonction "update" contenant le code que tu as actuellement dans la fonction callback de ton pushbutton et l’appeler depuis celle-ci ainsi que celle de ton popupmenu. Quelque chose comme
Code:
1
2
3 function tonPushbutton_Callback(hObject, eventdata, handles) update(handles)
Code:
1
2
3 function tonPopupmenu_Callback(hObject, eventdata, handles) update(handles)
Remarques :Code:
1
2
3 function update(handles) % code
- guidata(gcbf, handles); est plus correct.
- hold on : Si tu possèdes plusieurs objets Axes, il est bon de spécifier auquel s'applique ceci :
hold(handles.tonAxes,'on') sign, variable que tu utilises, est aussi une fonction MATLAB : chose à éviter. Je t'invite à lire ceci.Code:[M(:,:,:,n),sign(:,n),O(:,n), AxisX(:,n), AxisY(:,n), AxisZ(:,n), Extent(:,n)] = readICS([PathName1 char(File1(:,n))]);
- Pense à donner des noms plus explicites à tes objets (Tags).