1 |
function vizicq4_guts(command,option) |
---|
2 |
%THIS IS THE guts OF VIZICQ4; IT IS NOT CALLED DIRECTLY, |
---|
3 |
%BUT IS CALLED VIA CALLBACKS AND BUTTON DEFINITIONS |
---|
4 |
% |
---|
5 |
|
---|
6 |
get_VIZICQ4_handles; |
---|
7 |
|
---|
8 |
setptr(VIZICQ4_Figure,'watch') |
---|
9 |
|
---|
10 |
switch command |
---|
11 |
|
---|
12 |
case 'initialize', |
---|
13 |
%%% |
---|
14 |
%%% INITIALIZATION CALLS |
---|
15 |
%%% |
---|
16 |
% option must exist and be a structure as: |
---|
17 |
% option.grid=fem_grid_struct; |
---|
18 |
% option.icq4=icq4name; |
---|
19 |
% on initialization |
---|
20 |
if ~exist('option') |
---|
21 |
error('vizicq4_guts improperly called on init with non-struct option.') |
---|
22 |
elseif ~isstruct(option) |
---|
23 |
error('option to vizicq4_guts on init is not a structure') |
---|
24 |
else |
---|
25 |
if ~isfield(option,'grid')| ~isfield(option,'icq4') |
---|
26 |
disp('option struct to vizicq4_guts does not contain ') |
---|
27 |
disp('a fem_grid_struct and/or an icq4 filename') |
---|
28 |
return |
---|
29 |
end |
---|
30 |
end |
---|
31 |
|
---|
32 |
case 'Load_Grid' |
---|
33 |
% Load the grid, and set the VIZICQ4_Grid_Axes UserData to contain |
---|
34 |
% the fem_grid_struct |
---|
35 |
% Get the domain name typed into the "Domain :" ui |
---|
36 |
domainname=get(VIZICQ4_Current_Domain,'String'); |
---|
37 |
if strcmp(domainname,'<enter domain name>') |
---|
38 |
vizicq4_guts('Error','Domain Name not set.'); |
---|
39 |
return |
---|
40 |
end |
---|
41 |
% Try to load the grid files |
---|
42 |
set(VIZICQ4_Info_Text,'String',['Loading grid for ' domainname]) |
---|
43 |
drawnow |
---|
44 |
fem_grid_struct=loadgrid(domainname); |
---|
45 |
if isempty(fem_grid_struct) |
---|
46 |
vizicq4_guts('Error',['Grid files not found for ' domainname]); |
---|
47 |
return |
---|
48 |
end |
---|
49 |
% Ensure fem_grid_struct is valid |
---|
50 |
if ~is_valid_struct(fem_grid_struct) |
---|
51 |
errstr=['Invalid fem_grid_struct in VIZICQ4_Current_Domain for ' domainname]; |
---|
52 |
vizicq4_guts('Error',errstr); |
---|
53 |
return |
---|
54 |
end |
---|
55 |
|
---|
56 |
% Force negative depths!! |
---|
57 |
fem_grid_struct.z=-fem_grid_struct.z; |
---|
58 |
|
---|
59 |
% Attach element finding arrays |
---|
60 |
fem_grid_struct=belint(fem_grid_struct); |
---|
61 |
|
---|
62 |
% Attach valid fem_grid_struct to figure UserData |
---|
63 |
set(VIZICQ4_Grid_Axes,'UserData',fem_grid_struct) |
---|
64 |
axes(VIZICQ4_Grid_Axes); |
---|
65 |
drawelems(fem_grid_struct); |
---|
66 |
plotbnd(fem_grid_struct); |
---|
67 |
set(VIZICQ4_Error_Text,'String','') |
---|
68 |
axes(VIZICQ4_Slice_Axes); |
---|
69 |
drawelems3d(fem_grid_struct); |
---|
70 |
plotbnd(fem_grid_struct); |
---|
71 |
% hb=plotbnd(fem_grid_struct); |
---|
72 |
|
---|
73 |
% Load default region limits into place |
---|
74 |
xmin=min(fem_grid_struct.x); |
---|
75 |
xmax=max(fem_grid_struct.x); |
---|
76 |
ymin=min(fem_grid_struct.y); |
---|
77 |
ymax=max(fem_grid_struct.y); |
---|
78 |
set(VIZICQ4_Region_Xmin,'String',xmin,'Enable','on') |
---|
79 |
set(VIZICQ4_Region_Xmax,'String',xmax,'Enable','on') |
---|
80 |
set(VIZICQ4_Region_Ymin,'String',ymin,'Enable','on') |
---|
81 |
set(VIZICQ4_Region_Ymax,'String',ymax,'Enable','on') |
---|
82 |
axes(VIZICQ4_Grid_Axes) |
---|
83 |
line([xmin xmax xmax xmin xmin],... |
---|
84 |
[ymin ymin ymax ymax ymin],'Tag','VIZICQ4_Region_Box') |
---|
85 |
set(VIZICQ4_Info_Text,'String','Load in a .icq4 file.') |
---|
86 |
|
---|
87 |
case 'Clear' |
---|
88 |
switch option |
---|
89 |
case 'Vectors' |
---|
90 |
delete(findobj(VIZICQ4_Figure,'Tag','VIZICQ4_Vectors')) |
---|
91 |
case 'Volumes' |
---|
92 |
delete(findobj(VIZICQ4_Figure,'Tag','VIZICQ4_Volume')) |
---|
93 |
case 'HSlices' |
---|
94 |
delete(findobj(VIZICQ4_Figure,'Tag','VIZICQ4_Ribbon_HSlice')) |
---|
95 |
case 'VSlices' |
---|
96 |
delete(findobj(VIZICQ4_Figure,'Tag','VIZICQ4_Ribbon_VSlice')) |
---|
97 |
otherwise, |
---|
98 |
vizicq4_guts('Error','Bad Option to VIZICQ4_GUTS -->> Clear') |
---|
99 |
setptr(VIZICQ4_Figure,'arrow') |
---|
100 |
return |
---|
101 |
end |
---|
102 |
|
---|
103 |
case 'RotateRegion' |
---|
104 |
|
---|
105 |
theta=eval(get(VIZICQ4_DELTA_THETA,'String'))*pi/180; |
---|
106 |
if abs(theta)<1e-3 |
---|
107 |
vizicq4_guts('Error','Theta too small.'); |
---|
108 |
break; |
---|
109 |
end |
---|
110 |
sign=-1; |
---|
111 |
if strcmp(option,'CCW'),sign=1;,end |
---|
112 |
|
---|
113 |
|
---|
114 |
case 'Error' |
---|
115 |
set(VIZICQ4_Error_Text,'String',option) |
---|
116 |
set(VIZICQ4_Info_Text,'String','') |
---|
117 |
|
---|
118 |
case 'Info' |
---|
119 |
set(VIZICQ4_Info_Text,'String',option) |
---|
120 |
set(VIZICQ4_Error_Text,'String','') |
---|
121 |
|
---|
122 |
case 'Load_Icq4' |
---|
123 |
dirname=get(VIZICQ4_Current_Icq4_Dir,'String'); |
---|
124 |
set(VIZICQ4_Error_Text,'String','') |
---|
125 |
set(VIZICQ4_Info_Text,'String','Reading .icq4 file...') |
---|
126 |
drawnow |
---|
127 |
switch option |
---|
128 |
case 'Directory' |
---|
129 |
% get directory name from VIZICQ4_Current_Icq4_Dir |
---|
130 |
if exist(dirname)~=7 |
---|
131 |
vizicq4_guts('Info',''); |
---|
132 |
vizicq4_guts('Error',[dirname ' does not exist.']); |
---|
133 |
return |
---|
134 |
end |
---|
135 |
% if dirname DOES exist, create a filelist of *.icq4 contents, |
---|
136 |
% and change the style of VIZICQ4_Current_Icq4_Name to listbox |
---|
137 |
% to allow mouse selection of .icq4 filename. |
---|
138 |
d=dir([dirname '/*.icq4']); |
---|
139 |
filenames={d.name}'; |
---|
140 |
if isempty(filenames) |
---|
141 |
vizicq4_guts('Info',''); |
---|
142 |
set(VIZICQ4_Error_Text,'String','No .icq4 files in directory.') |
---|
143 |
return |
---|
144 |
end |
---|
145 |
set(VIZICQ4_Current_Icq4_Name,'Style','listbox',... |
---|
146 |
'String',filenames,... |
---|
147 |
'UserData',filenames,... |
---|
148 |
'Position',[0.78 .875 .18 .08]) |
---|
149 |
|
---|
150 |
case 'Name' |
---|
151 |
% |
---|
152 |
% Determine style of VIZICQ4_Current_Icq4_Name ui |
---|
153 |
% |
---|
154 |
style=get(VIZICQ4_Current_Icq4_Name,'Style'); |
---|
155 |
if strcmp(style,'edit') |
---|
156 |
icq4name=get(VIZICQ4_Current_Icq4_Name,'String'); |
---|
157 |
else |
---|
158 |
filelist=get(VIZICQ4_Current_Icq4_Name,'UserData'); |
---|
159 |
value=get(VIZICQ4_Current_Icq4_Name,'Value'); |
---|
160 |
icq4name=filelist{value}; |
---|
161 |
end |
---|
162 |
|
---|
163 |
% Load the .icq4 file, and set the VIZICQ4_Slice_Axes UserData to contain |
---|
164 |
% the fem_icq4_struct |
---|
165 |
% Get the icq4 filename typed into the "Icq4 name: " ui |
---|
166 |
|
---|
167 |
fullname=[dirname '/' icq4name]; |
---|
168 |
|
---|
169 |
if ~exist(fullname) |
---|
170 |
vizicq4_guts('Error',[icq4name ' does not exist.']); |
---|
171 |
% Enable uigetfile |
---|
172 |
[fname,fpath]=uigetfile('*.icq4','Select .icq4 file'); |
---|
173 |
if fname==0 |
---|
174 |
vizicq4_guts('Info','No .icq4 file selected.'); |
---|
175 |
return |
---|
176 |
else |
---|
177 |
fullname=[fpath '/' fname]; |
---|
178 |
set(VIZICQ4_Current_Icq4_Name,'String',fname); |
---|
179 |
vizicq4_guts('Error',''); |
---|
180 |
icq4name=fname; |
---|
181 |
end |
---|
182 |
end |
---|
183 |
fem_icq4_struct=read_icq4(fullname); |
---|
184 |
|
---|
185 |
|
---|
186 |
% Compute density from Q4_EQNSTATE2 |
---|
187 |
fem_icq4_struct.RHO=q4_eqnstate2(fem_icq4_struct.TMPMID,fem_icq4_struct.SALMID); |
---|
188 |
set(VIZICQ4_Info_Text,'String',[icq4name ' read.']) |
---|
189 |
set(VIZICQ4_icq4_select_button,'enable','on') |
---|
190 |
set(VIZICQ4_Slice_Axes,'UserData',fem_icq4_struct); |
---|
191 |
otherwise |
---|
192 |
disp('Option hole in switch in vizicq4_guts, LoadIcq4') |
---|
193 |
end |
---|
194 |
case 'Icq4_Info' |
---|
195 |
fem_icq4_struct=get(VIZICQ4_Slice_Axes,'UserData'); |
---|
196 |
if isempty(fem_icq4_struct) |
---|
197 |
set(VIZICQ4_Icq4_Info_Fig,'Visible','off'); |
---|
198 |
else |
---|
199 |
% Toggle visibility of info figure |
---|
200 |
state=get(VIZICQ4_Icq4_Info_Fig,'Visible'); |
---|
201 |
if strcmp(state,'on') |
---|
202 |
set(VIZICQ4_Icq4_Info_Fig,'Visible','off'); |
---|
203 |
setptr(VIZICQ4_Figure,'arrow') |
---|
204 |
break; |
---|
205 |
else |
---|
206 |
set(VIZICQ4_Icq4_Info_Fig,'Visible','on'); |
---|
207 |
end |
---|
208 |
nn=fem_icq4_struct.nn; |
---|
209 |
nnv=fem_icq4_struct.nnv; |
---|
210 |
|
---|
211 |
set(VIZICQ4_Icq4_Info_Line(1),'String',fem_icq4_struct.codename) |
---|
212 |
set(VIZICQ4_Icq4_Info_Line(2),'String',fem_icq4_struct.casename) |
---|
213 |
set(VIZICQ4_Icq4_Info_Line(3),'String',fem_icq4_struct.inqfilename) |
---|
214 |
set(VIZICQ4_Icq4_Info_Line(4),'String',fem_icq4_struct.initcondname) |
---|
215 |
set(VIZICQ4_Icq4_Info_Line(5),'String',int2str(nn)) |
---|
216 |
set(VIZICQ4_Icq4_Info_Line(6),'String',int2str(nnv)) |
---|
217 |
set(VIZICQ4_Icq4_Info_Line(7),'String',int2str(fem_icq4_struct.day)) |
---|
218 |
set(VIZICQ4_Icq4_Info_Line(8),'String',int2str(fem_icq4_struct.month)) |
---|
219 |
set(VIZICQ4_Icq4_Info_Line(9),'String',int2str(fem_icq4_struct.year)) |
---|
220 |
set(VIZICQ4_Icq4_Info_Line(10),'String',int2str(fem_icq4_struct.curr_seconds)) |
---|
221 |
string2d=['[' int2str(nn) ' double]']; |
---|
222 |
string3d=['[' int2str(nn) 'x' int2str(nnv) ' double]']; |
---|
223 |
set(VIZICQ4_Icq4_Info_Line(11),'String',string3d) |
---|
224 |
set(VIZICQ4_Icq4_Info_Line(12),'String',string3d) |
---|
225 |
set(VIZICQ4_Icq4_Info_Line(13),'String',string3d) |
---|
226 |
set(VIZICQ4_Icq4_Info_Line(14),'String',string3d) |
---|
227 |
set(VIZICQ4_Icq4_Info_Line(15),'String',string3d) |
---|
228 |
set(VIZICQ4_Icq4_Info_Line(16),'String',string3d) |
---|
229 |
set(VIZICQ4_Icq4_Info_Line(17),'String',string3d) |
---|
230 |
set(VIZICQ4_Icq4_Info_Line(18),'String',string3d) |
---|
231 |
set(VIZICQ4_Icq4_Info_Line(19),'String',string3d) |
---|
232 |
|
---|
233 |
end |
---|
234 |
|
---|
235 |
case 'Toggle_Axes' |
---|
236 |
% Determine which axes is currently visible |
---|
237 |
state=get(VIZICQ4_Grid_Axes,'Visible'); |
---|
238 |
invisaxstdpos=get(VIZICQ4_LabCont,'UserData'); |
---|
239 |
axstdpos=get(VIZICQ4_DelCont,'UserData'); |
---|
240 |
if strcmp(state,'on') |
---|
241 |
set(VIZICQ4_Grid_Axes,'Visible','off') |
---|
242 |
set(VIZICQ4_Slice_Axes,'Visible','on') |
---|
243 |
set(VIZICQ4_Grid_Axes,'Position',invisaxstdpos) |
---|
244 |
set(VIZICQ4_Slice_Axes,'Position',axstdpos) |
---|
245 |
else |
---|
246 |
set(VIZICQ4_Grid_Axes,'Visible','on') |
---|
247 |
set(VIZICQ4_Slice_Axes,'Visible','off') |
---|
248 |
set(VIZICQ4_Grid_Axes,'Position',axstdpos) |
---|
249 |
set(VIZICQ4_Slice_Axes,'Position',invisaxstdpos) |
---|
250 |
|
---|
251 |
end |
---|
252 |
|
---|
253 |
case 'Terminate' |
---|
254 |
delete([VIZICQ4_Figure VIZICQ4_Volume_Fig VIZICQ4_Slicer_Fig VIZICQ4_Icq4_Info_Fig]) |
---|
255 |
return |
---|
256 |
case 'print' |
---|
257 |
disp('No print function yet') |
---|
258 |
case 'Help' |
---|
259 |
% switch option |
---|
260 |
disp('No help yet') |
---|
261 |
|
---|
262 |
case 'ZContours' |
---|
263 |
fem_grid_struct=get(VIZICQ4_Grid_Axes,'UserData'); |
---|
264 |
if isempty(fem_grid_struct) |
---|
265 |
vizicq4_guts('Error','No grid defined yet.') |
---|
266 |
break |
---|
267 |
end |
---|
268 |
vals=get(VIZICQ4_Contour_Vals,'String'); |
---|
269 |
if strcmp(vals,'linspace(zmin,zmax,7)') |
---|
270 |
% Determine default depth contour values |
---|
271 |
zmax=max(fem_grid_struct.z); |
---|
272 |
zmin=min(fem_grid_struct.z); |
---|
273 |
vals=linspace(zmin,zmax,7); |
---|
274 |
vals([1 7])=[]; |
---|
275 |
else |
---|
276 |
vals=['[' vals ']']; |
---|
277 |
vals=eval(vals); |
---|
278 |
end |
---|
279 |
lcontour(fem_grid_struct,'z',vals); |
---|
280 |
vizicq4_guts('Error','') |
---|
281 |
vizicq4_guts('Info','') |
---|
282 |
case 'DelCont' |
---|
283 |
ch_gca=get(VIZICQ4_Grid_Axes,'Ch'); % children of the current axes |
---|
284 |
cont_objs=findobj(ch_gca,'Tag','contour'); |
---|
285 |
delete(cont_objs); |
---|
286 |
ch_gca=get(VIZICQ4_Grid_Axes,'Ch'); % children of the current axes |
---|
287 |
textobjs=findobj(ch_gca,'Type','text'); |
---|
288 |
delete(textobjs); |
---|
289 |
|
---|
290 |
case 'LabCont' |
---|
291 |
fem_grid_struct=get(VIZICQ4_Grid_Axes,'UserData'); |
---|
292 |
if isempty(fem_grid_struct) |
---|
293 |
vizicq4_guts('Error','No grid defined yet.') |
---|
294 |
% Search for contours to label |
---|
295 |
elseif isempty(findobj(VIZICQ4_Grid_Axes,'Tag','contour')) |
---|
296 |
vizicq4_guts('Error','No contours to label yet.') |
---|
297 |
else |
---|
298 |
|
---|
299 |
private_lc(VIZICQ4_Figure,VIZICQ4_Grid_Axes,VIZICQ4_Info_Text,VIZICQ4_Error_Text) |
---|
300 |
vizicq4_guts('Error','') |
---|
301 |
vizicq4_guts('Info','') |
---|
302 |
end |
---|
303 |
|
---|
304 |
otherwise, |
---|
305 |
disp('Command hole in switch in vizicq4_guts') |
---|
306 |
end |
---|
307 |
|
---|
308 |
setptr(VIZICQ4_Figure,'arrow') |
---|