Skip to content
Snippets Groups Projects
gt6DMakeFigureForPaper.m 3.32 KiB
Newer Older
function gt6DMakeFigureForPaper( vol, varargin )
% gtCSMakeFigureForPaper( vol, varargin )
%    conf = struct( ...
%        'cmap', jet, ...
%        'filename', '', ...
%        'plane', 'xy', ...
%        'layer', 1, ...
%        'clims', [], ...
%        'borders', 'no', ...
%        'colorbar', 'no');
% 

    conf = struct( ...
        'cmap', jet, ...
        'filename', '', ...
        'plane', 'xy', ...
        'layer', 1, ...
        'clims', [], ...
        'borders', 'no', ...
        'colorbar', 'no', ...
        'sample_shape', []);
    conf = parse_pv_pairs(conf, varargin);

    switch(conf.plane)
        case {'xy', 'XY'}
            slice = vol(:, :, conf.layer);
        case {'yx', 'YX'}
            slice = vol(:, :, conf.layer)';
        case {'yz', 'YZ'}
            slice = squeeze(vol(conf.layer, :, :));
        case {'zy', 'ZY'}
            slice = squeeze(vol(conf.layer, :, :))';
        case {'xz', 'XZ'}
            slice = squeeze(vol(:, conf.layer, :));
        case {'zx', 'ZX'}
            slice = squeeze(vol(:, conf.layer, :))';
    end

    if (~isempty(conf.sample_shape))
        shape = conf.sample_shape;
        if (numel(shape) == 2)
            shape = [round(([size(vol, 1), size(vol, 2)] - shape) / 2), shape];
        end
        shape = [shape(1:2) shape(1:2)+shape(3:4)];
        slice = (slice - min(slice(:))) / (max(slice(:)) - min(slice(:)));
        slice = repmat(slice, [1 1 3]);

        red_vec = reshape([1 0 0], [1 1 3]);
        slice(shape(1):shape(3), shape(2), :) = repmat(red_vec, [(shape(3)-shape(1)+1) 1 1]);
        slice(shape(1):shape(3), shape(4), :) = repmat(red_vec, [(shape(3)-shape(1)+1) 1 1]);
        slice(shape(1), shape(2):shape(4), :) = repmat(red_vec, [1 (shape(4)-shape(2)+1) 1]);
        slice(shape(3), shape(2):shape(4), :) = repmat(red_vec, [1 (shape(4)-shape(2)+1) 1]);
    end

    f = figure('colormap', conf.cmap);
    ax = axes('Parent', f);
    im = imagesc(permute(slice, [2 1 3]), 'Parent', ax);

    if (~isempty(conf.clims))
        set(ax, 'CLim', conf.clims)
    end

    set(f, 'Units', 'centimeters')
    if (strcmpi(conf.borders, 'no'))
        set(f, 'Position', [0 0 12 12])
        set(f, 'Paperposition', [0 0 12 12])

        set(ax, 'Units', 'normalized')
        set(ax, 'Position', [0 0 1 1])
    else
        set(ax, 'Units', 'centimeters')
        if (strcmpi(conf.colorbar, 'no'))
            set(f, 'Position', [0 0 14 13.5])
            set(f, 'Paperposition', [0 0 14 13.5])
        else
            set(f, 'Position', [0 0 15 14])
            set(f, 'Paperposition', [0 0 15 14])

            cb = colorbar('peer', ax, 'location', 'EastOutside');
            set(cb, 'Units', 'centimeters')
            set(cb, 'Position', [13.35 1 0.65 12])
        end
        set(ax, 'Position', [1 1 12 12])
    end

Nicola Vigano's avatar
Nicola Vigano committed
    drawnow();

    if (~isempty(conf.filename) && strcmpi(conf.filename, 'preview'))
        [filename, filedir] = uigetfile({'*.png'; '*.eps'});
        if (filename)
            conf.filename = fullfile(filedir, filename);
        else
            conf.filename = [];
        end
    end

    if (~isempty(conf.filename))
        [~, ~, ext] = fileparts(conf.filename);
        if (isempty(ext))
            saveas(f, [conf.filename '.eps']);
            saveas(f, [conf.filename '.png']);
        else
            saveas(f, conf.filename);
        end
    end
end