function autoArrangeFigures(NH, NW, monitor_id) % INPUT : % NH : number of grid of vertical direction % NW : number of grid of horizontal direction % OUTPUT : % % get every figures that are opened now and arrange them. % % autoArrangeFigures selects automatically Monitor1. % If you are dual(or more than that) monitor user, I recommend to set wide % monitor as Monitor1. % % if you want arrange automatically, type 'autoArrangeFigures(0,0)' or 'autoArrangeFigures()'. % But maximum number of figures for automatic mode is 27. % % if you want specify grid for figures, give numbers for parameters. % but if your grid size is smaller than required one for accommodating % all figures, this function changes to automatic mode and if more % figures are opend than maximum number, then it gives error. % % Notes % + 2017.1.20 use monitor id(Adam Danz's idea) % % leejaejun, Koreatech, Korea Republic, 2014.12.13 % jaejun0201@gmail.com if nargin < 2 NH = 0; NW = 0; monitor_id = 1; end task_bar_offset = [30 50]; %% N_FIG = NH * NW; if N_FIG == 0 autoArrange = 1; else autoArrange = 0; end figHandle = sortFigureHandles(findobj('Type','figure')); moveitHandle = findall(figHandle, 'Type', 'figure', 'Tag', 'Hfroot'); figHandle = figHandle(ismember(figHandle,moveitHandle)~=1); n_fig = size(figHandle,1); if n_fig <= 0 warning('figures are not found'); return end screen_sz = get(0,'MonitorPositions'); screen_sz = screen_sz(monitor_id, :); scn_w = screen_sz(3) - task_bar_offset(1); scn_h = screen_sz(4) - task_bar_offset(2); scn_w_begin = screen_sz(1) + task_bar_offset(1); scn_h_begin = screen_sz(2) + task_bar_offset(2); if autoArrange==0 if n_fig > N_FIG autoArrange = 1; warning('too many figures than you told. change to autoArrange'); else nh = NH; nw = NW; end end if autoArrange == 1 grid = [2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4; 3 3 3 3 3 3 3 3 4 4 4 5 5 5 5 5 5 5 5 6 6 6 7 7 7 7 7]'; if n_fig > length(grid) warning('too many figures(maximum = %d)',length(grid)) return end if scn_w > scn_h nh = grid(n_fig,1); nw = grid(n_fig,2); else nh = grid(n_fig,2); nw = grid(n_fig,1); end end fig_width = scn_w/nw; fig_height = scn_h/nh; fig_cnt = 1; for i=1:1:nh for k=1:1:nw if fig_cnt>n_fig return end fig_pos = [scn_w_begin+fig_width*(k-1) ... scn_h_begin+scn_h-fig_height*i ... fig_width ... fig_height]; set(figHandle(fig_cnt),'OuterPosition',fig_pos); figure(figHandle(fig_cnt)); %bring to top fig_cnt = fig_cnt + 1; end end end function figSorted = sortFigureHandles(figs) [tmp, idx] = sort([figs.Number]); figSorted = figs(idx); end