source: aedes_export_gui.m @ 151

Last change on this file since 151 was 147, checked in by tjniskan, 9 years ago
  • Added support for Windows network paths (
    server\share) to

aedes_juigetfiles.m (Windows only)

  • Added a link for suppressing the license information from printing to

workspace

  • Fixed some uicontrol colors in aedes_headerbrowser.m
  • Changed the buffer size for reading VNMR PROCPAR to 1MB. The

previous buffer size (10kB) was apparently too low for some SWIFT data

  • aedes_killfigs.m now has an option to force close only Aedes-related

figures

  • Updated figure tags for aedes_killfigs.m
  • Added a request for restarting Aedes to the "Update successful" dialog

M aedes_readprocpar.m
M aedes_killfigs.m
M aedes_data_read.m
M aedes_gui_defaults.m
M aedes_resviewer.m
M aedes.m
M aedes_update.m
M aedes_export_gui.m
M aedes_headerbrowser.m
M aedes_revision.m
M aedes_juigetfiles.m
M aedes_errordump.m

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

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