source: an2_export_gui.m @ 41

Last change on this file since 41 was 39, checked in by tjniskan, 11 years ago
  • Added "Recent Files" quick access menu in File-menu
  • Fixed a bug in plugins/copy_data_to_workspace.m that made writing a

new name for a variable difficult

  • Fixed a bug in the file prefix editbox in an2_export_gui.m
  • Changed references to Analyze 2.0 in all license notices to Aedes.

The name change should now be complete...

M an2_export_gui.m
M an2_cellsprintf.m
M an2_calc_wait.m
M an2_check_file_exist.m
M an2_iseven.m
M an2_cellwrite.m
M an2_wbar.m
M an2_rot3d.m
M an2_readfdf.m
M an2_revision.m
M an2_viewprocpar.m
M an2_checkcthdr.m
M an2_readprocpar.m
M an2_fitmaps.m
M an2_read_nifti.m
M an2_data_read.m
M an2_resviewer.m
M an2_maptool.m
M aedes.m
M an2_res2table.m
M an2_copy_roi.m
M plugins/save_roi_as_mask.m
M plugins/write_difference_images.m
M plugins/plot_profile.m
M plugins/calculate_t2_map.m
M plugins/calculate_t1r_map.m
M plugins/view_kspace.m
M plugins/copy_data_to_workspace.m
M plugins/take_snapshot.m
M an2_inputdlg.m
M an2_roi_copy_gui.m
M an2_readctdata.m
M an2_readfid.m
M an2_readfidprefs.m
M an2_readtab.m
M an2_check_updates.m
M an2_killfigs.m
M an2_roi_stats.m
M an2_saveres.m
M an2_rotateflip.m
M an2_juigetfiles.m
M an2_gui_defaults.m
M an2_editstack.m
M an2_update.m
M an2_write_nifti.m

File size: 48.2 KB
Line 
1function an2_export_gui(DATA,ROI,Clim_in,colmap_in)
2% AN2_EXPORT_GUI - Graphical user interface for exporting mri images
3%   
4%
5% Synopsis:
6%
7% Description:
8%
9% Examples:
10%
11% See also:
12%       AEDES
13
14% This function is a part of Aedes - A graphical tool for analyzing
15% medical images
16%
17% Copyright (C) 2006 Juha-Pekka Niskanen <Juha-Pekka.Niskanen@uku.fi>
18%
19% Department of Physics, (or Department of Neurobiology)
20% University of Kuopio, FINLAND
21%
22% This program may be used under the terms of the GNU General Public
23% License version 2.0 as published by the Free Software Foundation
24% and appearing in the file LICENSE.TXT included in the packaging of
25% this program.
26%
27% This program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28% WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29
30
31% Public variables
32H=[];
33Dat=[];
34
35if nargin==0
36  error('Too few input arguments!')
37elseif nargin==1
38  ROI = [];
39else
40  % Check ROI structure
41  if ~isempty(ROI) && ( ~isstruct(ROI) || ~isfield(ROI,'voxels') )
42    error('Invalid ROI structure!')
43  end
44end
45
46if ~exist('Clim_in','var')
47  Clim_in = [];
48end
49if ~exist('colmap_in','var')
50  colmap_in = [];
51end
52% $$$ if ~exist('flip_in','var')
53% $$$   flip_in = [];
54% $$$ end
55% $$$ if ~exist('rotation_in','var')
56% $$$   rotation_in = [];
57% $$$ end
58
59% Check DATA structure
60showError = false;
61Dat.isDataMixed = false;
62if isstruct(DATA)
63  if ~isfield(DATA,'FTDATA')
64    showError = true;
65  else
66    DATA = {DATA};
67  end
68elseif iscell(DATA)
69  if ~isstruct(DATA{1})
70    showError = true;
71  else
72    if length(DATA)>1
73      Dat.isDataMixed = true;
74    end
75  end
76else
77  showError = true;
78end
79
80if showError
81  error('First input argument must be a valid DATA-form structure!')
82  return
83end
84
85% Store data sizes in all directions
86if Dat.isDataMixed
87  Dat.XSize = length(DATA);
88  Dat.YSize = 0;
89  Dat.ZSize = 0;
90else
91  Dat.XSize = size(DATA{1}.FTDATA,3);
92  Dat.YSize = size(DATA{1}.FTDATA,1);
93  Dat.ZSize = size(DATA{1}.FTDATA,2);
94end
95
96% Draw GUI figure and uicontrols
97H=l_DrawGui;
98
99
100%%%%%%%%%%%%%%%%%%%%%%%%
101% Draw GUI
102%%%%%%%%%%%%%%%%%%%%%%%%
103function H=l_DrawGui
104
105  %% Load default font and colors
106  GD=an2_gui_defaults;
107 
108  % Position figure to the center of the screen
109  scrsz = get(0,'screensize');
110  fig_w = 350;
111  fig_h = 555;
112  fig_pos = [scrsz(3)/2-fig_w/2 scrsz(4)/2-fig_h/2 fig_w fig_h];
113 
114  %% Main Figure ----------------------------
115  H.MAINFIG = figure('Units','Pixel', ...
116                     'position',fig_pos,...
117                     'Name','Export Dialog', ...
118                     'Numbertitle','off', ...
119                     'Tag','export_fig', ...
120                     'Color',GD.col.mainfig, ...
121                     'Toolbar','none', ...
122                     'Menubar','none', ...
123                     'DoubleBuffer','on', ...
124                     'DockControls','off',...
125                     'renderer','painters',...
126                     'KeyPressFcn','',...
127                     'Closereq',@l_Close,...
128                     'Handlevisibility','off',...
129                     'windowstyle','normal');
130  set(H.MAINFIG,'resize','off')
131 
132  %% Uipanels --------------------------------
133 
134  % Export options
135  H.EXPORT_TYPE = uipanel('parent',H.MAINFIG,...
136                          'units','pixel',...
137                          'position',[10 fig_h-10-210 330 210],...
138                          'title','Export Type and Path',...
139                                                  'backgroundcolor',GD.col.frame);
140  H.FILE_FORMAT_TX = uicontrol('parent',H.EXPORT_TYPE,...
141                               'units','pixel',...
142                               'position',[10 170 80 15],...
143                               'string','File Format:',...
144                               'horizontalalign','left',...
145                               'style','text',...
146                                                           'backgroundcolor',GD.col.frame);
147  tmp=get(H.FILE_FORMAT_TX,'position');
148  H.FILE_FORMAT_POPUP = uicontrol('parent',H.EXPORT_TYPE,...
149                                  'units','pixel',...
150                                  'position',[tmp(1)+tmp(3) tmp(2) 225 18],...
151                                  'style','popup',...
152                                  'string',...
153                                  {'JPG - JPEG Files',...
154                      'TIFF - Tagged Image File Format',...
155                      'PNG - Portable Network Graphics',...
156                      'BMP - Windows Bitmap',...
157                      'EPS - Encapsulated PostScript'},...
158                                  'backgroundcolor','w',...
159                                  'callback',@l_ChangeFileFormat);
160  H.FILETYPE_OPTIONS = uipanel('parent',H.EXPORT_TYPE,...
161                               'units','pixel',...
162                               'position',[tmp(1)+tmp(3) tmp(2)-80 225 75],...
163                               'title','File Format Options',...
164                                                           'backgroundcolor',GD.col.frame);
165  H.RESOLUTION_TX = uicontrol('parent',H.FILETYPE_OPTIONS,...
166                              'units','pixel',...
167                              'position',[30 35 80 15],...
168                              'string','Resolution (dpi):',...
169                              'horizontalalign','left',...
170                              'style','text',...
171                                                          'backgroundcolor',GD.col.frame);
172  tmp=get(H.RESOLUTION_TX,'position');
173  H.RESOLUTION_EDIT = uicontrol('parent',H.FILETYPE_OPTIONS,...
174                                'units','pixel',...
175                                'position',[tmp(1)+tmp(3)+10 tmp(2) 50 18],...
176                                'backgroundcolor','w',...
177                                'horizontalalign','center',...
178                                'style','edit',...
179                                'string','96',...
180                                'userdata','96',...
181                                'callback',@l_ChangeResolutionQuality);
182  H.COMPRESSION_CHBOX = uicontrol('parent',H.FILETYPE_OPTIONS,...
183                                  'units','pixel',...
184                                  'position',[tmp(1) tmp(2)-25 120 18],...
185                                  'horizontalalign','center',...
186                                  'style','checkbox',...
187                                  'string','Use Compression',...
188                                  'value',1,...
189                                  'visible','off',...
190                                                                  'backgroundcolor',GD.col.frame);
191  H.QUALITY_TX = uicontrol('parent',H.FILETYPE_OPTIONS,...
192                           'units','pixel',...
193                           'position',[tmp(1) tmp(2)-25 60 18],...
194                           'string','Quality (%):',...
195                           'horizontalalign','left',...
196                           'style','text',...
197                                                   'backgroundcolor',GD.col.frame);
198  tmp2=get(H.QUALITY_TX,'position');
199  tmp3=get(H.RESOLUTION_EDIT,'position');
200  H.QUALITY_EDIT = uicontrol('parent',H.FILETYPE_OPTIONS,...
201                             'units','pixel',...
202                             'position',[tmp3(1) tmp2(2) 50 18],...
203                             'horizontalalign','center',...
204                             'style','edit',...
205                             'backgroundcolor','w',...
206                             'string','80',...
207                             'value',1,...
208                             'visible','on',...
209                             'userdata','80',...
210                             'callback',@l_ChangeResolutionQuality);
211  tmp2=get(H.FILETYPE_OPTIONS,'position');
212  tmp=get(H.FILE_FORMAT_TX,'position');
213  H.FILEPREFIX_TX = uicontrol('parent',H.EXPORT_TYPE,...
214                              'units','pixel',...
215                              'position',[tmp(1) tmp2(2)-tmp(4)-20 tmp(3:4)],...
216                              'string','File Prefix:',...
217                              'horizontalalign','left',...
218                              'style','text',...
219                                                          'backgroundcolor',GD.col.frame);
220  tmp=get(H.FILEPREFIX_TX,'position');
221  H.FILEPREFIX_EDIT = uicontrol('parent',H.EXPORT_TYPE,...
222                                'units','pixel',...
223                                'position',[tmp(1)+tmp(3) tmp(2) 225 18],...
224                                'backgroundcolor','w',...
225                                'horizontalalign','left',...
226                                'style','edit',...
227                                'string','mrimage',...
228                                'keypressfcn',@l_FilePrefixEditKeyPress);
229  % This dummy uicontrol is used to safely shift focus
230  % between uicontrols. Focus shift is used as a workaround to a Matlab
231  % keypressfcn bug with editboxes...
232  H.DUMMYUICH = uicontrol('parent',H.EXPORT_TYPE,...
233                          'units','pixel',...
234                          'position',[-20 0 2 2],...
235                          'style','pushbutton',...
236                          'visible','on');
237  H.OUTDIR_TX = uicontrol('parent',H.EXPORT_TYPE,...
238                          'units','pixel',...
239                          'position',[tmp(1) tmp(2)-25 90 15],...
240                          'string','Output directory:',...
241                          'horizontalalign','left',...
242                          'style','text',...
243                                                  'backgroundcolor',GD.col.frame);
244  tmp=get(H.OUTDIR_TX,'position');
245  H.OUTDIR_EDIT = uicontrol('parent',H.EXPORT_TYPE,...
246                            'units','pixel',...
247                            'position',[tmp(1) tmp(2)-18 280 18],...
248                            'string','',...
249                            'backgroundcolor','w',...
250                            'horizontalalign','left',...
251                            'style','edit',...
252                            'callback',@l_CheckOutputDir);
253  % Set default output directory
254  try
255    filepath=getpref('Aedes','ExportFileDir');
256    set(H.OUTDIR_EDIT,'string',filepath)
257  catch
258    set(H.OUTDIR_EDIT,'string',[pwd,filesep])
259  end
260  tmp=get(H.OUTDIR_EDIT,'position');
261  H.BROWSE_BTN = uicontrol('parent',H.EXPORT_TYPE,...
262                           'units','pixel',...
263                           'position',[tmp(1)+tmp(3)+2 tmp(2) 25 18],...
264                           'string','...',...
265                           'style','pushbutton',...
266                           'callback',@l_CheckOutputDir);
267 
268  % Separate files/mosaic uipanel
269  tmp=get(H.EXPORT_TYPE,'position');
270  H.FILES_UIPANEL = uipanel('parent',H.MAINFIG,...
271                            'units','pixel',...
272                            'position',[tmp(1) tmp(2)-10-120 160 120],...
273                            'title','Files',...
274                                                        'backgroundcolor',GD.col.frame);
275  set(H.MAINFIG,'color',get(H.FILES_UIPANEL,'backgroundcolor'));
276  H.RADIOGRP_FILES = uibuttongroup('parent',H.FILES_UIPANEL,...
277                                   'units','pixel',...
278                                   'position',[5 5 150 100],...
279                                   'bordertype','none',...
280                                   'selectionchangefcn',@l_FilesSelectionCB,...
281                                                                   'backgroundcolor',GD.col.frame);
282  H.SEP_FILES = uicontrol('parent',H.RADIOGRP_FILES,...
283                          'units','pixel',...                       
284                          'position',[10 75 130 25],...
285                          'style','radio',...
286                          'string','Separate Files',...
287                          'value',1,...
288                                                  'backgroundcolor',GD.col.frame);
289  tmp=get(H.SEP_FILES,'position');
290  H.MOSAIC_FILES = uicontrol('parent',H.RADIOGRP_FILES,...
291                             'units','pixel',...                       
292                             'position',[tmp(1) tmp(2)-tmp(4) tmp(3:4)],...
293                             'style','radio',...
294                             'string','Mosaic',...
295                             'value',0,...
296                                                         'backgroundcolor',GD.col.frame);
297  tmp=get(H.MOSAIC_FILES,'position');
298  H.ROWS_TX = uicontrol('parent',H.RADIOGRP_FILES,...
299                        'units','pixel',...
300                        'position',[40 tmp(2)-20 50 15],...
301                        'style','text',...
302                        'horizontalalign','left',...
303                        'string','Rows:',...
304                        'enable','off',...
305                                                'backgroundcolor',GD.col.frame);
306  H.ROWS_EDIT = uicontrol('parent',H.RADIOGRP_FILES,...
307                          'units','pixel',...
308                          'position',[90 tmp(2)-20 50 18],...
309                          'style','edit',...
310                          'backgroundcolor','w',...
311                          'string','',...
312                          'enable','off',...
313                          'callback',@l_CheckMosaic);
314  tmp=get(H.ROWS_TX,'position');
315  H.COLS_TX = uicontrol('parent',H.RADIOGRP_FILES,...
316                        'units','pixel',...
317                        'position',[tmp(1) tmp(2)-25 tmp(3:4)],...
318                        'style','text',...
319                        'horizontalalign','left',...
320                        'string','Columns:',...
321                        'enable','off',...
322                                                'backgroundcolor',GD.col.frame);
323  H.COLS_EDIT = uicontrol('parent',H.RADIOGRP_FILES,...
324                          'units','pixel',...
325                          'position',[90 tmp(2)-25 50 18],...
326                          'style','edit',...
327                          'backgroundcolor','w',...
328                          'string','',...
329                          'enable','off',...
330                          'callback',@l_CheckMosaic);
331 
332  % Set default values for mosaic rows/columns
333  rows = floor(sqrt(Dat.XSize));
334  cols = ceil(Dat.XSize/rows);
335  set(H.ROWS_EDIT,'string',num2str(rows),...
336                  'userdata',num2str(rows))
337  set(H.COLS_EDIT,'string',num2str(cols),...
338                  'userdata',num2str(cols))
339 
340  % X-dir, Y-dir, Z-dir
341  tmp=get(H.FILES_UIPANEL,'position');
342  H.DIR_UIPANEL = uipanel('parent',H.MAINFIG,...
343                          'units','pixel',...
344                          'position',[180 tmp(2) tmp(3) tmp(4)],...
345                          'title','Slice Direction',...
346                                                  'backgroundcolor',GD.col.frame);
347  H.RADIOGRP_DIR = uibuttongroup('parent',H.DIR_UIPANEL,...
348                                 'units','pixel',...
349                                 'position',[5 5 150 100],...
350                                 'bordertype','none',...
351                                 'selectionchangefcn',@l_DirChangeFcn,...
352                                                                 'backgroundcolor',GD.col.frame);
353  H.XDIR_RADIO = uicontrol('parent',H.RADIOGRP_DIR,...
354                           'units','pixel',...                       
355                           'position',[10 65 130 25],...
356                           'style','radio',...
357                           'string','X-Direction',...
358                           'value',1,...
359                                                   'backgroundcolor',GD.col.frame);
360  tmp=get(H.XDIR_RADIO,'position');
361  H.YDIR_RADIO = uicontrol('parent',H.RADIOGRP_DIR,...
362                           'units','pixel',...                       
363                           'position',[tmp(1) tmp(2)-tmp(4) tmp(3:4)],...
364                           'style','radio',...
365                           'string','Y-Direction',...
366                           'value',0,...
367                                                   'backgroundcolor',GD.col.frame);
368  tmp=get(H.YDIR_RADIO,'position');
369  H.ZDIR_RADIO = uicontrol('parent',H.RADIOGRP_DIR,...
370                           'units','pixel',...                       
371                           'position',[tmp(1) tmp(2)-tmp(4) tmp(3:4)],...
372                           'style','radio',...
373                           'string','Z-Direction',...
374                           'value',0,...
375                                                   'backgroundcolor',GD.col.frame);
376  if Dat.isDataMixed
377    % Disable Y- and Z-radio buttons for mixed data
378    set([H.YDIR_RADIO,H.ZDIR_RADIO],'enable','off')
379  end
380 
381  % Slice selection
382  tmp=get(H.FILES_UIPANEL,'position');
383  H.SLICE_UIPANEL = uipanel('parent',H.MAINFIG,...
384                            'units','pixel',...
385                            'position',[10 tmp(2)-150-10 tmp(3) 150],...
386                            'title','Slice Selection',...
387                                                        'backgroundcolor',GD.col.frame);
388  H.RADIOGRP_SLICE = uibuttongroup('parent',H.SLICE_UIPANEL,...
389                                   'units','pixel',...
390                                   'position',[5 5 150 120],...
391                                   'bordertype','none',...
392                                   'selectionchangefcn',@l_SliceSelection,...
393                                                                   'backgroundcolor',GD.col.frame);
394  H.ALL_SLICES = uicontrol('parent',H.RADIOGRP_SLICE,...
395                           'units','pixel',...                       
396                           'position',[10 105 130 25],...
397                           'style','radio',...
398                           'string','All Slices',...
399                           'value',1,...
400                                                   'backgroundcolor',GD.col.frame);
401  tmp=get(H.ALL_SLICES,'position');
402  H.CUSTOM_SLICES = uicontrol('parent',H.RADIOGRP_SLICE,...
403                              'units','pixel',...                       
404                              'position',[tmp(1) tmp(2)-tmp(4) tmp(3:4)],...
405                              'style','radio',...
406                              'string','Custom Slices',...
407                              'value',0,...
408                                                          'backgroundcolor',GD.col.frame);
409  tmp=get(H.CUSTOM_SLICES,'position');
410  H.CUSTOM_EDIT = uicontrol('parent',H.RADIOGRP_SLICE,...
411                            'units','pixel',...                       
412                            'position',[tmp(1)+20 tmp(2)-tmp(4)+5 110 18],...
413                            'style','edit',...
414                            'backgroundcolor','w',...
415                            'horizontalalign','left',...
416                            'string','1:end',...
417                            'userdata','1:end',...
418                            'enable','off',...
419                            'callback',@l_CheckCustomSliceSelection);
420 
421  % Additional Options
422  tmp=get(H.FILES_UIPANEL,'position');
423  H.OPTIONS_UIPANEL = uipanel('parent',H.MAINFIG,...
424                              'units','pixel',...
425                              'position',[180 tmp(2)-10-150 160 150],...
426                              'title','Additional Options',...
427                                                          'backgroundcolor',GD.col.frame);
428  if isempty(ROI)
429    roi_enable = 'off';
430  else
431    roi_enable = 'on';
432  end
433  H.DRAW_ROIS = uicontrol('parent',H.OPTIONS_UIPANEL,...
434                          'units','pixel',...
435                          'position',[10 110 130 25],...
436                          'style','checkbox',...
437                          'string','Draw ROIs',...
438                          'value',0,...
439                          'enable',roi_enable,...
440                          'callback',@l_DrawRoisCheckBoxCB,...
441                                                  'backgroundcolor',GD.col.frame);
442  if isempty(ROI)
443    % Disable "Draw ROIs" checkbox if ROIs are not available
444    set(H.DRAW_ROIS,'value',0,'enable','off')
445  end
446  tmp=get(H.DRAW_ROIS,'position');
447  H.ROI_LBOX = uicontrol('parent',H.OPTIONS_UIPANEL,...
448                         'units','pixel',...
449                         'position',[tmp(1)+20 tmp(2)-40 110 40],...
450                         'style','listbox',...
451                         'backgroundcolor','w',...
452                         'min',1,'max',3,...
453                         'string',{''},...
454                         'enable','off');
455  if ~isempty(ROI)
456    Dat.RoiLabels = {ROI(:).label};
457    set(H.ROI_LBOX,'string',Dat.RoiLabels)
458  end
459  tmp=get(H.DRAW_ROIS,'position');
460  H.DRAW_SLICENBR = uicontrol('parent',H.OPTIONS_UIPANEL,...
461                              'units','pixel',...
462                              'position',[tmp(1) tmp(2)-60 130 20],...
463                              'style','checkbox',...
464                              'string','Draw Slice Nbr.',...
465                              'value',1,...
466                                                          'backgroundcolor',GD.col.frame);
467  tmp=get(H.DRAW_SLICENBR,'position');
468  H.DRAW_FILENAME = uicontrol('parent',H.OPTIONS_UIPANEL,...
469                              'units','pixel',...
470                              'position',[tmp(1) tmp(2)-23 130 20],...
471                              'style','checkbox',...
472                              'string','Draw File Name',...
473                              'value',1,...
474                                                          'backgroundcolor',GD.col.frame);
475  tmp=get(H.DRAW_FILENAME,'position');
476  H.DRAW_COLORBAR = uicontrol('parent',H.OPTIONS_UIPANEL,...
477                              'units','pixel',...
478                              'position',[tmp(1) tmp(2)-23 130 20],...
479                              'style','checkbox',...
480                              'string','Draw Colorbar',...
481                              'value',0,...
482                                                          'backgroundcolor',GD.col.frame);
483  tmp=get(H.OPTIONS_UIPANEL,'position');
484 
485  % OK and Cancel buttons
486  H.OK_BTN = uicontrol('parent',H.MAINFIG,...
487                       'units','pixel',...
488                       'position',[tmp(1) tmp(2)-30-5 77.5 30],...
489                       'string','OK',...
490                       'style','pushbutton',...
491                       'callback',@l_CheckOptions);
492  tmp = get(H.OK_BTN,'position');
493  H.CANCEL_BTN = uicontrol('parent',H.MAINFIG,...
494                           'units','pixel',...
495                           'position',[tmp(1)+tmp(3)+5 tmp(2:4)],...
496                           'string','Cancel',...
497                           'style','pushbutton',...
498                           'callback','close(gcbf)');
499 
500  % Initialize some internal variables
501  Dat.SliceInd = 1:Dat.XSize;
502 
503 
504end % function l_DrawGui(h,
505
506%%%%%%%%%%%%%%%%%%%%%%%%%%%%
507%
508% GUI callbacks
509%
510%%%%%%%%%%%%%%%%%%%%%%%%%%%%
511function l_ChangeFileFormat(h,evd)
512
513popupval = get(H.FILE_FORMAT_POPUP,'value');
514
515if popupval==1
516  set([H.QUALITY_TX,H.QUALITY_EDIT],'visible','on')
517  set(H.COMPRESSION_CHBOX,'visible','off')
518elseif popupval==2
519  set([H.QUALITY_TX,H.QUALITY_EDIT],'visible','off')
520  set(H.COMPRESSION_CHBOX,'visible','on')
521else
522  set([H.QUALITY_TX,H.QUALITY_EDIT,H.COMPRESSION_CHBOX],...
523      'visible','off')
524end
525 
526
527end % function l_ChangeFileFormat(h,
528
529function l_FilePrefixEditKeyPress(h,evd)
530
531% This ugly stabbing of Matlab doesn't work anymore correctly with newer
532% versions so return immediately...
533return 
534
535% Switch focus between uicontrols (a Matlab bug workaround)
536uicontrol(H.DUMMYUICH)
537uicontrol(H.FILEPREFIX_EDIT)
538
539% Call drawnow twice to refresh the editbox (yet another Matlab bug
540% workaround)
541drawnow
542drawnow
543
544% Query the editbox string value
545str=get(H.FILEPREFIX_EDIT,'string');
546if isempty(str)
547  return
548end
549
550% If the string contains forbidden characters, display error and remove
551% the last character
552ind=ismember(str,'\/:*?"<>|');
553if any(ind)
554  warndlg({'A file name cannot contain any of the following characters:',...
555           '','\/:*?"<>|'},'Forbidden character entered.','modal')
556  str(ind)=[];
557  set(H.FILEPREFIX_EDIT,'string',str)
558  uicontrol(H.DUMMYUICH)
559  uicontrol(H.FILEPREFIX_EDIT)
560  drawnow
561  drawnow
562end
563
564
565end % function l_FilePrefixEditKeyPress(h,
566
567function l_DrawRoisCheckBoxCB(h,evd)
568
569if get(H.DRAW_ROIS,'value')
570  set(H.ROI_LBOX,'enable','on')
571else
572  set(H.ROI_LBOX,'enable','off')
573end
574
575end % function l_DrawRoisCheckBoxCB(h,
576
577%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
578function l_FilesSelectionCB(h,evd)
579
580if ~isempty(evd)
581  if evd.NewValue==H.MOSAIC_FILES
582    child_h = findobj(H.EXPORT_TYPE,'type','uicontrol');
583    %child_h=get(H.EXPORT_TYPE,'children');
584    %child_h = child_h(child_h~=H.FILETYPE_OPTIONS);
585    set(child_h,'enable','off')
586    set([H.ROWS_TX,H.ROWS_EDIT,H.COLS_TX,H.COLS_EDIT],'enable','on')
587    %set([H.FILE_FORMAT_TX,H.FILE_FORMAT_POPUP,...
588    %    H.OUTDIR_TX,H.OUTDIR_EDIT,H.BROWSE_BTN],'enable','off')
589  else
590    child_h = findobj(H.EXPORT_TYPE,'type','uicontrol');
591    %child_h=get(H.EXPORT_TYPE,'children');
592    %child_h = child_h(child_h~=H.FILETYPE_OPTIONS);
593    set(child_h,'enable','on')
594    %set(get(H.EXPORT_TYPE,'children'),'enable','on')
595    set([H.ROWS_TX,H.ROWS_EDIT,H.COLS_TX,H.COLS_EDIT],'enable','off')
596    %set([H.FILE_FORMAT_TX,H.FILE_FORMAT_POPUP,...
597    %    H.OUTDIR_TX,H.OUTDIR_EDIT,H.BROWSE_BTN],'enable','on')
598  end
599end
600
601end % function l_FilesSelectionCB
602
603%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
604function l_ChangeResolutionQuality(h,evd)
605
606if h==H.RESOLUTION_EDIT
607  res_val=floor(str2num(get(H.RESOLUTION_EDIT,'string')));
608  if isempty(res_val) || ~isreal(res_val) || res_val<0 || res_val>1200
609    hh=errordlg(['Invalid value for resolution! The value must be between ' ...
610                 '0-1200 dpi.'],'Error!','modal');
611    set(H.RESOLUTION_EDIT,'string',get(H.RESOLUTION_EDIT,'userdata'))
612    return
613  else
614    set(H.RESOLUTION_EDIT,'string',num2str(res_val),...
615                      'userdata',num2str(res_val))
616  end
617elseif h==H.QUALITY_EDIT
618  qval = floor(str2num(get(H.QUALITY_EDIT,'string')));
619  if isempty(qval) || ~isreal(qval) || qval<1 || qval>100
620    hh=errordlg('Invalid value for quality! The value must be between 1-100%.',...
621                'Error!','modal');
622    set(H.QUALITY_EDIT,'string',get(H.QUALITY_EDIT,'userdata'))
623    return
624  else
625    set(H.QUALITY_EDIT,'string',num2str(qval),...
626                      'userdata',num2str(qval))
627  end
628end
629
630end % function l_ChangeResolutionQuality(h,
631
632%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
633function l_CheckMosaic(h,evd)
634
635if ~isempty(h)
636
637  % Check that the value is numeric
638  val = str2num(get(h,'string'));
639  if isempty(val) || ~isreal(val) || val<=0
640    errordlg('Invalid row/column value!','Error. Invalid value!','modal');
641    set(H.COLS_EDIT,'string',get(H.COLS_EDIT,'userdata'))
642    set(H.ROWS_EDIT,'string',get(H.ROWS_EDIT,'userdata'))
643    return
644  end
645
646  total_sz = length(Dat.SliceInd);
647 
648  if val>total_sz
649    val = total_sz;
650  end
651
652  % Set values for mosaic rows/columns
653  if h==H.ROWS_EDIT
654    rows = val;
655    cols = ceil(total_sz/rows);
656    set(H.COLS_EDIT,'string',num2str(cols),...
657                    'userdata',num2str(cols))
658    set(H.ROWS_EDIT,'string',num2str(val))
659  elseif h==H.COLS_EDIT
660    cols = val;
661    rows = ceil(total_sz/cols);
662    set(H.ROWS_EDIT,'string',num2str(rows),...
663                    'userdata',num2str(rows))
664    set(H.COLS_EDIT,'string',num2str(val))
665  end
666 
667else
668 
669% $$$   % Keep number of rows constant and change the number of columns
670% $$$   total_sz = length(Dat.SliceInd);
671% $$$   val = str2num(get(H.ROWS_EDIT,'string'));
672% $$$   if val>total_sz
673% $$$     val = total_sz;
674% $$$   end
675% $$$   rows = val;
676% $$$   cols = ceil(total_sz/rows);
677% $$$   set(H.COLS_EDIT,'string',num2str(cols),...
678% $$$                   'userdata',num2str(cols))
679% $$$   set(H.ROWS_EDIT,'string',num2str(val))
680 
681  % Keep number of columns constant and change the number of rows
682  total_sz = length(Dat.SliceInd);
683  val = str2num(get(H.COLS_EDIT,'string'));
684  if val>total_sz
685    val = total_sz;
686  end
687  cols = val;
688  rows = ceil(total_sz/cols);
689  set(H.ROWS_EDIT,'string',num2str(rows),...
690                  'userdata',num2str(rows))
691  set(H.COLS_EDIT,'string',num2str(val))
692 
693end
694
695end % function l_CheckMosaic(h,
696
697%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
698function l_CheckOutputDir(h,evd)
699
700if h==H.BROWSE_BTN % Called from browse btn
701 
702  try
703    filepath=getpref('Aedes','ExportFileDir');
704  catch
705    filepath='';
706  end
707  filepath = uigetdir(filepath);
708  if isequal(filepath,0)
709    return
710  end
711  filepath = [filepath,filesep];
712  setpref('Aedes','ExportFileDir',filepath)
713  set(H.OUTDIR_EDIT,'string',filepath)
714 
715elseif h==H.OUTDIR_EDIT % Called from outdir edit
716 
717  filepath=get(H.OUTDIR_EDIT,'string');
718 
719  % Check if the inputted directory exists
720  if ~isdir(filepath)
721    errordlg({'The export path','',...
722              ['"',filepath,'"'],'','does not exist!'},...
723             'Error! File path does not exist!','modal')
724    return
725  end
726 
727  if filepath(end)~=filesep
728    filepath(end+1)=filesep;
729    set(H.OUTDIR_EDIT,'string',filepath)
730  end
731 
732end
733
734end % function l_CheckOutputDir(h,
735
736%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
737function l_CheckCustomSliceSelection(h,evd)
738
739% Get selected direction
740selobj=get(H.RADIOGRP_DIR,'selectedobject');
741if selobj==H.XDIR_RADIO
742  sz = Dat.XSize;
743elseif selobj==H.YDIR_RADIO
744  sz = Dat.YSize;
745else
746  sz = Dat.ZSize;
747end
748
749%% Get custom string
750str = get(H.CUSTOM_EDIT,'string');
751if isempty(str)
752  hh=warndlg('The custom text field cannot be empty!',...
753            'Invalid expression','modal');
754  set(H.CUSTOM_EDIT,'string',get(H.CUSTOM_EDIT,'userdata'))
755  return
756end
757
758%% Check that the string contains only valid characters
759tmp_ind=ismember(str,'0123456789end:,*+-/');
760if ~all(tmp_ind)
761  hh=warndlg(['The custom text "' str '" contains invalid characters'],...
762            'Invalid expression','modal');
763  set(H.CUSTOM_EDIT,'string',get(H.CUSTOM_EDIT,'userdata'))
764  return
765end
766
767% replace 'end' statement with ROI size
768custom_str=strrep(str,'end','sz');
769slice_ind=[];
770
771% Try to evaluate the index string
772try
773  eval(['slice_ind=[' custom_str '];']);
774catch
775  hh=warndlg({['Could not evaluate expression "' custom_str '".'],...
776             ['Custom string has to be a valid Matlab vector expression.']},...
777            'Could not evaluate expression','modal');
778  set(H.CUSTOM_EDIT,'string',get(H.CUSTOM_EDIT,'userdata'))
779  return
780end
781
782% Sort indices and make sure that all indices are unique
783%slice_ind=unique(slice_ind);
784
785% Make sure that min>=1 and max<=sz
786if max(slice_ind)>sz
787  hh=warndlg({['Could not evaluate expression "' custom_str '".'],...
788             'Maximum slice index exceeds the number of slices.'},...
789            'Could not evaluate expression','modal');
790  set(H.CUSTOM_EDIT,'string',get(H.CUSTOM_EDIT,'userdata'))
791  return
792end
793if min(slice_ind)<1
794  hh=warndlg({['Could not evaluate expression "' custom_str '".'],...
795             ['Slice indices have to be larger than zero.']},...
796            'Could not evaluate expression','modal');
797  set(H.CUSTOM_EDIT,'string',get(H.CUSTOM_EDIT,'userdata'))
798  return
799end
800
801Dat.SliceInd = slice_ind;
802set(H.CUSTOM_EDIT,'userdata',str)
803
804l_CheckMosaic([],[])
805
806end % function l_CheckCustomSliceSelection(h,
807
808%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
809function l_DirChangeFcn(h,evd)
810
811set(H.CUSTOM_EDIT,'string','1:end')
812if get(H.XDIR_RADIO,'value')==1
813  Dat.SliceInd = 1:Dat.XSize;
814elseif get(H.YDIR_RADIO,'value')==1
815  Dat.SliceInd = 1:Dat.YSize;
816else
817  Dat.SliceInd = 1:Dat.ZSize;
818end
819
820l_CheckMosaic([],[])
821
822end % function l_DirChangeFcn(h,
823
824%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
825function l_SliceSelection(h,evd)
826
827if h==H.RADIOGRP_SLICE
828  if evd.NewValue==H.ALL_SLICES
829    % Disable Custom slice editbox if All Slices is selected
830    set(H.CUSTOM_EDIT,'enable','off')
831    if get(H.XDIR_RADIO,'value')==1
832      Dat.SliceInd = 1:Dat.XSize;
833    elseif get(H.YDIR_RADIO,'value')==1
834      Dat.SliceInd = 1:Dat.YSize;
835    else
836      Dat.SliceInd = 1:Dat.ZSize;
837    end
838  else
839    set(H.CUSTOM_EDIT,'enable','on')
840  end
841end
842
843l_CheckMosaic([],[])
844
845end % function l_SliceSelection(h,
846
847%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
848% Check Options and continue
849%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
850function l_CheckOptions(h,evd)
851
852% Check output dir
853if get(H.SEP_FILES,'value')==1
854  createMosaic = false;
855  outdir = get(H.OUTDIR_EDIT,'string');
856  if ~isdir(outdir)
857    hh=errordlg({'The output directory',...
858               ['"',outdir,'"'],'does not exist!'},'Error!','modal');
859    return
860  end
861else
862  outdir = get(H.OUTDIR_EDIT,'string');
863  createMosaic = true;
864end
865
866if outdir(end)~=filesep
867  outdir(end+1)=filesep;
868end
869
870% Check File Format Options
871useCompression = logical(get(H.COMPRESSION_CHBOX,'value'));
872resolution = get(H.RESOLUTION_EDIT,'string');
873quality = str2num(get(H.QUALITY_EDIT,'string'));
874
875% Get file prefix (for separate files)
876filePrefix = get(H.FILEPREFIX_EDIT,'string');
877
878% If the string contains forbidden characters, display error and return
879ind=ismember(filePrefix,'\/:*?"<>|');
880if any(ind)
881  hh=warndlg({'A file name cannot contain any of the following characters:',...
882        '','\/:*?"<>|'},'Forbidden character entered.','modal');
883  uiwait(hh)
884  uicontrol(H.DUMMYUICH)
885  uicontrol(H.FILEPREFIX_EDIT)
886  drawnow
887  drawnow
888  return
889end
890
891% Check direction
892if get(H.XDIR_RADIO,'value')==1
893  sliceDir = 1;
894elseif get(H.YDIR_RADIO,'value')==1
895  sliceDir = 2;
896elseif get(H.ZDIR_RADIO,'value')==1
897  sliceDir = 3;
898end
899
900% Check additional options
901if get(H.DRAW_ROIS,'value')==1
902  drawRois = true;
903  roi_ind=get(H.ROI_LBOX,'value');
904  if isempty(roi_ind)
905    drawRois = false;
906  end
907else
908  drawRois = false;
909  roi_ind = [];
910end
911if get(H.DRAW_SLICENBR,'value')==1
912  drawSliceNbr = true;
913else
914  drawSliceNbr = false;
915end
916if get(H.DRAW_FILENAME,'value')==1
917  drawFileName = true;
918else
919  drawFileName = false;
920end
921if get(H.DRAW_COLORBAR,'value')==1
922  drawColorbar = true;
923else
924  drawColorbar = false;
925end
926
927% Check Colormap
928if isempty(colmap_in)
929  colmap = gray(256);
930else
931  colmap = colmap_in;
932end
933
934% Check Clim
935if isempty(Clim_in)
936  colmap = gray(256);
937else
938  colmap = colmap_in;
939end
940
941
942
943% Draw Mosaic figure
944%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
945if createMosaic
946 
947  % Estimate space for the mosaic
948  cols=str2num(get(H.COLS_EDIT,'string'));
949  rows=str2num(get(H.ROWS_EDIT,'string'));
950  if Dat.isDataMixed
951    data_sz=size(DATA{Dat.SliceInd(1)}.FTDATA);
952  else
953    if sliceDir==1
954      data_sz=size(DATA{1}.FTDATA(:,:,Dat.SliceInd(1)));
955    elseif sliceDir==2
956      data_sz=size(squeeze(DATA{1}.FTDATA(:,Dat.SliceInd(1),:)));
957    else
958      data_sz=size(squeeze(DATA{1}.FTDATA(Dat.SliceInd(1),:,:)));
959    end
960  end
961 
962  % Determine figure size
963  scrsz = get(0,'screensize'); % Get current display resolution
964  scrsz(4) = scrsz(4)-45-70; % The 47px is for taskbar,
965  scrsz(3) = scrsz(3)-16;
966  gap=3;
967  fig_w = cols*data_sz(2)+(cols+1)*gap;
968  fig_h = rows*data_sz(1)+(rows+1)*gap;
969 
970  if fig_w>scrsz(3) || fig_h>scrsz(4)
971   
972    aratio_w=[fig_w fig_h]./fig_w;
973    aratio_h=[fig_w fig_h]./fig_h;
974    for ii=1:2
975      if fig_w>scrsz(3)
976        tmp=aratio_w*scrsz(3);
977        fig_w = tmp(1);
978        fig_h = tmp(2);
979      elseif fig_h>scrsz(4)
980        tmp=aratio_h*scrsz(4);
981        fig_w = tmp(1);
982        fig_h = tmp(2);
983      end
984    end
985  end
986 
987  %% Determine paper orientation
988  if fig_w>fig_h
989    paperorient = 'landscape';
990   
991    %% Determine paperposition
992    papersize = [29.7 21.0];
993    tmp=[fig_w,fig_h]./fig_h;
994    pap_h = tmp(2)*(papersize(2)-2);
995    pap_w = tmp(1)*(papersize(2)-2);
996    if pap_w>(papersize(1)-2)
997      pap_h=((papersize(1)-2)/pap_w)*pap_h;
998      pap_w = papersize(1)-2;
999    end
1000    paperpos = [papersize(1)/2-pap_w/2 ...
1001                papersize(2)/2-pap_h/2 ...
1002                pap_w ...
1003                pap_h];
1004  else
1005    paperorient = 'portrait';
1006
1007    %% Determine paperposition
1008    papersize = [21.0 29.7];
1009    tmp=[fig_w,fig_h]./fig_w;
1010    pap_h = tmp(2)*(papersize(1)-2);
1011    pap_w = tmp(1)*(papersize(1)-2);
1012    if pap_h>(papersize(2)-2)
1013      pap_w=((papersize(2)-2)/pap_h)*pap_w;
1014      pap_h = papersize(2)-2;
1015    end
1016    paperpos = [papersize(1)/2-pap_w/2 ...
1017                papersize(2)/2-pap_h/2 ...
1018                pap_w ...
1019                pap_h];
1020  end
1021 
1022 
1023  %% Show wait dialog
1024  [wait_h,txh]=an2_calc_wait('Creating mosaic from slices...');
1025 
1026  % Draw the mosaic figure
1027  fh = figure('position',[scrsz(3)/2-fig_w/2+4 ...
1028                      scrsz(4)/2-fig_h/2+45 fig_w fig_h],...
1029              'visible','on',...
1030              'inverthardcopy','off',...
1031              'renderer','painters',...
1032              'numbertitle','off',...
1033              'name','Mosaic View',...
1034              'colormap',colmap,...
1035              'color','w',...
1036              'papertype','a4',...
1037              'paperpositionmode','manual',...
1038              'paperorientation',paperorient,...
1039              'paperunits','centimeters',...
1040              'paperposition',paperpos);
1041  set(fh,'paperunits','inches')
1042 
1043  %% Set header text
1044  if ~Dat.isDataMixed
1045    hs = getappdata(fh,'PrintHeaderHeaderSpec');
1046    if isempty(hs)
1047      hs = struct('dateformat','none',...
1048                  'string',[date,',  ',...
1049                          strrep(strrep(DATA{1}.HDR.fpath,'\','\\'),'_','\_'),...
1050                          strrep(strrep(DATA{1}.HDR.fname,'\','\\'),'_','\_')],...
1051                  'fontname','Times',...
1052                  'fontsize',12,...          % in points
1053                  'fontweight','normal',...
1054                  'fontangle','normal',...
1055                  'margin',15);            % in points
1056    end
1057    setappdata(fh,'PrintHeaderHeaderSpec',hs)
1058  end
1059 
1060 
1061  %% images and axes'
1062  count=1;
1063  gap_w=gap/fig_w;
1064  gap_h=gap/fig_h;
1065  for ii=1:rows
1066    for kk=1:cols
1067      ax=axes('parent',fh,...
1068              'units','normal',...
1069              'position',[(kk-1)*((1-(cols+1)*gap_w)/cols)+kk*gap_w ...
1070                          (rows-ii)*((1-(rows+1)*gap_h)/rows)+(rows+1-ii)*gap_h ...
1071                          (1-(cols+1)*gap_w)/cols (1-(rows+1)*gap_h)/rows],...
1072              'visible','off',...
1073              'ydir','reverse',...
1074              'xtick',[],...
1075              'ytick',[],...
1076              'xticklabel',[],...
1077              'yticklabel',[],...
1078              'DataAspectRatio',[1 1 1],...
1079              'PlotBoxAspectRatio',[data_sz(2) data_sz(1) 1],...
1080              'PlotBoxAspectRatioMode','manual');
1081      if count<=length(Dat.SliceInd)
1082       
1083        if Dat.isDataMixed
1084          imdata=DATA{Dat.SliceInd(count)}.FTDATA;
1085        else
1086          if sliceDir==1
1087            imdata=DATA{1}.FTDATA(:,:,Dat.SliceInd(count));
1088          elseif sliceDir==2
1089            imdata=squeeze(DATA{1}.FTDATA(:,Dat.SliceInd(count),:));
1090          else
1091            imdata=squeeze(DATA{1}.FTDATA(Dat.SliceInd(count),:,:));
1092          end
1093        end
1094       
1095
1096       
1097        %% Plot image
1098        h=image('parent',ax,...
1099                'cdata',imdata,...
1100                'cdatamapping','scaled');
1101       
1102        %% Check Clim
1103        if isempty(Clim_in)
1104          clim = [min(min(imdata)) max(max(imdata))];
1105          set(ax,'clim',clim)
1106        elseif size(Clim_in)>1
1107          set(ax,'clim',Clim_in(Dat.SliceInd(count),:))
1108        else
1109          clim = Clim_in;
1110          set(ax,'clim',clim)
1111        end
1112       
1113        % Draw ROIs
1114        if drawRois
1115          for tt=1:length(roi_ind)
1116            if Dat.isDataMixed
1117              roidata = ROI(roi_ind(tt)).voxels{Dat.SliceInd(count)};
1118            else
1119              if sliceDir==1
1120                roidata = ROI(roi_ind(tt)).voxels{1}(:,:,Dat.SliceInd(count));
1121              elseif sliceDir==2
1122                roidata = squeeze(ROI(roi_ind(tt)).voxels{1}(:,Dat.SliceInd(count),:));
1123              else
1124                roidata = squeeze(ROI(roi_ind(tt)).voxels{1}(Dat.SliceInd(count),:,:));
1125              end
1126              if isempty(find(roidata))
1127                continue;
1128              end
1129            end
1130            B=bwboundaries(roidata,4,'holes');
1131            for jj=1:length(B)
1132              boundary = B{jj};
1133              line('parent',ax,...
1134                   'xdata',boundary(:,2),'ydata',boundary(:,1),...
1135                   'color',ROI(roi_ind(tt)).color./255,...
1136                   'tag','roiedge',...
1137                   'linewidth',0.5,...
1138                   'linestyle','-',...
1139                   'hittest','off');
1140            end % for jj=1:length(B)
1141          end % for tt=1:length(roi_ind)
1142        end % if drawRois
1143       
1144        % Draw slice number and filename
1145        if drawSliceNbr || drawFileName
1146          if (rows*cols)<=50
1147            fontsz=8;
1148          elseif (rows*cols)>50 & (rows*cols)<100
1149            fontsz=7;
1150          else
1151            fontsz=6;
1152          end
1153          if drawSliceNbr && drawFileName
1154            if Dat.isDataMixed
1155              fname = DATA{Dat.SliceInd(count)}.HDR.fname;
1156              fpath = DATA{Dat.SliceInd(count)}.HDR.fpath;
1157            else
1158              fname=DATA{1}.HDR.fname;
1159              fpath = DATA{1}.HDR.fpath;
1160            end
1161            if strcmp(fname,'fid')
1162              [fp,fn,fe]=fileparts(fpath(1:end-1));
1163              fname = [fn,fe];
1164            end
1165            slicetxt = sprintf('%03d: %s',Dat.SliceInd(count),fname);
1166          elseif drawFileName
1167            if Dat.isDataMixed
1168              fname = DATA{Dat.SliceInd(count)}.HDR.fname;
1169              fpath = DATA{Dat.SliceInd(count)}.HDR.fpath;
1170            else
1171              fname=DATA{1}.HDR.fname;
1172              fpath = DATA{1}.HDR.fpath;
1173            end
1174            if strcmp(fname,'fid')
1175              [fp,fn,fe]=fileparts(fpath(1:end-1));
1176              fname = [fn,fe];
1177            end
1178            slicetxt = fname;
1179          elseif drawSliceNbr
1180            slicetxt = sprintf('%03d',Dat.SliceInd(count));
1181          end
1182          tx_slice=text('parent',ax,...
1183                        'units','normal',...
1184                        'position',[0.01 0.99],...
1185                        'verticalalign','top',...
1186                        'horizontalalign','left',...
1187                        'interpreter','none',...
1188                        'string',slicetxt,...
1189                        'backgroundcolor','w',...
1190                        'clipping','off',...
1191                        'fontsize',fontsz);
1192        end
1193       
1194% $$$         % Draw file name text
1195% $$$         if drawFileName
1196% $$$           if (rows*cols)<=50
1197% $$$             fontsz=8;
1198% $$$           elseif (rows*cols)>50 & (rows*cols)<100
1199% $$$             fontsz=7;
1200% $$$           else
1201% $$$             fontsz=6;
1202% $$$           end
1203% $$$           if drawSliceNbr
1204% $$$             tmp_ext=get(tx_nbr,'extent');
1205% $$$           else
1206% $$$             tmp_ext=[0.01 0.99 0 0];
1207% $$$           end
1208% $$$           if Dat.isDataMixed
1209% $$$             fname = DATA{Dat.SliceInd(count)}.HDR.fname;
1210% $$$             fpath = DATA{Dat.SliceInd(count)}.HDR.fpath;
1211% $$$           else
1212% $$$             fname=DATA{1}.HDR.fname;
1213% $$$             fpath = DATA{1}.HDR.fpath;
1214% $$$           end
1215% $$$           if strcmp(fname,'fid')
1216% $$$             [fp,fn,fe]=fileparts(fpath(1:end-1));
1217% $$$             fname = [fn,fe];
1218% $$$           end
1219% $$$           tx_fname=text('parent',ax,...
1220% $$$                         'units','normal',...
1221% $$$                         'position',[tmp_ext(1)+tmp_ext(3) 0.99],...
1222% $$$                         'verticalalign','top',...
1223% $$$                         'horizontalalign','left',...
1224% $$$                         'interpreter','none',...
1225% $$$                         'string',fname,...
1226% $$$                         'backgroundcolor','w',...
1227% $$$                         'clipping','off',...
1228% $$$                         'fontsize',fontsz);
1229% $$$         end
1230       
1231        count=count+1;
1232      end % if count<=length(Dat.
1233    end % for kk=1:cols
1234  end % for ii=1:rows
1235 
1236 
1237  delete(wait_h)
1238 
1239% Draw separate files
1240%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1241else
1242 
1243  % Get file extension
1244  fext_val = get(H.FILE_FORMAT_POPUP,'value');
1245  if fext_val==1
1246    fext = 'jpg';
1247    print_type = 'jpeg';
1248    quality = sprintf('%02d',quality);
1249  elseif fext_val==2
1250    fext = 'tif';
1251    quality = '';
1252    if useCompression
1253      print_type = 'tiff';
1254    else
1255      print_type = 'tiffnocompression';
1256    end
1257  elseif fext_val==3
1258    fext = 'png';
1259    print_type = 'png';
1260    quality = '';
1261  elseif fext_val==4
1262    fext = 'bmp';
1263    print_type = 'bmp';
1264    quality = '';
1265  elseif fext_val==5
1266    fext = 'eps';
1267    print_type = 'epsc2';
1268    quality = '';
1269  end
1270 
1271  % Create file names
1272  fnames={};
1273  for ii=1:length(Dat.SliceInd)
1274    fnames{ii}=sprintf('%s_%03d.%s',filePrefix,Dat.SliceInd(ii),fext);
1275  end
1276 
1277  % Get file names from the output directory
1278  tmp=dir(outdir);
1279  outdir_files={tmp(~[tmp(:).isdir]).name};
1280 
1281  if ~isunix % Check file names, in windows ignore case
1282    ind=ismember(lower(fnames),lower(outdir_files));
1283  else
1284    ind=ismember(fnames,outdir_files);
1285  end
1286  if any(ind)
1287    % Warn if some files are about to be overwritten
1288    overwrited_files = {fnames{ind}};
1289   
1290    % Limit the file list to 20 files
1291    if length(overwrited_files)>20
1292      overwrited_files = {overwrited_files{1:20}};
1293      overwrited_files{end+1}='...';
1294    end
1295   
1296    resp=questdlg({['The following files already exist in the output directory' ...
1297                 ' "',outdir,'"'],'','(NOTE: max. 20 files shown here)','',...
1298                   overwrited_files{:},'',...
1299                   'Do you want to overwrite these files?'},...
1300                  'Overwrite Existing Files?','Overwrite','Abort','Abort');
1301    if strcmpi(resp,'Abort')
1302      return
1303    end
1304  end
1305 
1306  % Initialize waitbar
1307  wbar_h = an2_wbar(0,sprintf('Creating %s-image %d/%d to folder\n"%s"',...
1308                          upper(fext),0,length(fnames),outdir));
1309 
1310  % Print images to files
1311  for ii=1:length(Dat.SliceInd)
1312   
1313    % Initialize waitbar
1314    an2_wbar(ii/length(fnames),wbar_h,sprintf('Creating %s-image %d/%d to folder\n"%s"',...
1315                                          upper(fext),ii,length(fnames),...
1316                                          outdir));
1317   
1318   
1319    % Image data
1320    if Dat.isDataMixed
1321      imdata = DATA{Dat.SliceInd(ii)}.FTDATA;
1322    else
1323      if sliceDir==1
1324        imdata = DATA{1}.FTDATA(:,:,Dat.SliceInd(ii));
1325      elseif sliceDir==2
1326        imdata = squeeze(DATA{1}.FTDATA(:,Dat.SliceInd(ii),:));
1327      else
1328        imdata = squeeze(DATA{1}.FTDATA(Dat.SliceInd(ii),:,:));
1329      end
1330    end
1331   
1332    sz = size(imdata);
1333   
1334    % Create invisible figure
1335    if drawColorbar
1336      sz(2)=sz(2)+65;
1337    end
1338    fh = figure('position',[300 200 sz(2) sz(1)],...
1339                'visible','off',...
1340                'inverthardcopy','off',...
1341                'renderer','painters',...
1342                'paperpositionmode','auto',...
1343                'color','w');
1344   
1345    % Create axes
1346    if isempty(Clim_in)
1347      clim = [min(min(imdata)) max(max(imdata))];
1348    else
1349      clim = Clim_in;
1350    end
1351    ax = axes('parent',fh,...
1352              'units','normal',...
1353              'position',[0 0 1 1],...
1354              'clim',clim,...
1355              'xlim',[0.5 sz(2)+0.5],...
1356              'ylim',[0.5 sz(1)+0.5],...
1357              'ydir','reverse',...
1358              'visible','off');
1359   
1360    % Create image
1361    im = image('parent',ax,...
1362               'cdatamapping','scaled',...
1363               'cdata',imdata);
1364    set(fh,'colormap',colmap)
1365   
1366    % Draw Colorbar
1367    if drawColorbar
1368      colorbar('peer',ax,'East',...
1369               'fontsize',7);
1370    end
1371   
1372    % Draw ROIs
1373    if drawRois
1374      for kk=1:length(roi_ind)
1375        if Dat.isDataMixed
1376          roidata = ROI(roi_ind(kk)).voxels{Dat.SliceInd(ii)};
1377        else
1378          if sliceDir==1
1379            roidata = ROI(roi_ind(kk)).voxels{1}(:,:,Dat.SliceInd(ii));
1380          elseif sliceDir==2
1381            roidata = squeeze(ROI(roi_ind(kk)).voxels{1}(:,Dat.SliceInd(ii),:));
1382          else
1383            roidata = squeeze(ROI(roi_ind(kk)).voxels{1}(Dat.SliceInd(ii),:,:));
1384          end
1385          if isempty(find(roidata))
1386            continue;
1387          end
1388        end
1389        B=bwboundaries(roidata,4,'holes');
1390        for jj=1:length(B)
1391          boundary = B{jj};
1392          line('parent',ax,...
1393               'xdata',boundary(:,2),'ydata',boundary(:,1),...
1394               'color',ROI(roi_ind(kk)).color./255,...
1395               'tag','roiedge',...
1396               'linewidth',0.5,...
1397               'linestyle','-',...
1398               'hittest','off');
1399        end
1400      end
1401    end
1402   
1403    % Draw slice number
1404    if drawSliceNbr
1405      if drawFileName
1406        slicenbr = sprintf('%03d:',Dat.SliceInd(ii));
1407      else
1408        slicenbr = sprintf('%03d',Dat.SliceInd(ii));
1409      end
1410      tx_nbr=text('parent',ax,...
1411                  'units','normal',...
1412                  'position',[0.015 0.965],...
1413                  'interpreter','none',...
1414                  'string',slicenbr,...
1415                  'backgroundcolor','w',...
1416                  'clipping','off',...
1417                  'fontsize',7);
1418    end
1419   
1420    % Draw file name text
1421    if drawFileName
1422      if drawSliceNbr
1423        tmp_ext=get(tx_nbr,'extent');
1424      else
1425        tmp_ext=[0.015 0.965 0 0];
1426      end
1427      if Dat.isDataMixed
1428        fname = DATA{Dat.SliceInd(ii)}.HDR.fname;
1429        fpath = DATA{Dat.SliceInd(ii)}.HDR.fpath;
1430      else
1431        fname=DATA{1}.HDR.fname;
1432        fpath = DATA{1}.HDR.fpath;
1433      end
1434      if strcmp(fname,'fid')
1435        [fp,fn,fe]=fileparts(fpath(1:end-1));
1436        fname = [fn,fe];
1437      end
1438      tx_fname=text('parent',ax,...
1439                    'units','normal',...
1440                    'position',[tmp_ext(1)+tmp_ext(3) 0.965],...
1441                    'interpreter','none',...
1442                    'string',fname,...
1443                    'backgroundcolor','w',...
1444                    'clipping','off',...
1445                    'fontsize',7);
1446    end
1447   
1448% $$$     % Draw slice number
1449% $$$     if drawSliceNbr
1450% $$$       tx=text('parent',ax,...
1451% $$$               'units','normal',...
1452% $$$               'position',[0.015 0.965],...
1453% $$$               'string',sprintf('%03d',Dat.SliceInd(ii)),...
1454% $$$               'backgroundcolor','w',...
1455% $$$               'fontsize',7);
1456% $$$     end
1457   
1458    % Print figure
1459    print(fh,['-d',print_type,quality],['-r',resolution],[outdir,fnames{ii}]);
1460   
1461    delete(fh);
1462  end
1463 
1464  % Delete waitbar
1465  delete(wbar_h)
1466 
1467end
1468
1469end % function l_CheckOptions(h,
1470
1471%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1472% Close figure
1473%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1474function l_Close(h,evd)
1475
1476% Store figure handle before clearing variables
1477fig_h = H.MAINFIG;
1478
1479% Clear public variables
1480clear H Dat DATA ROI
1481
1482% Close figure
1483delete(fig_h);
1484
1485end % function l_Close(h,
1486
1487end
Note: See TracBrowser for help on using the repository browser.

Powered by Trac 1.0.9.Copyright © Juha-Pekka Niskanen 2008