⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 progressbar.m

📁 高频地波雷达完整仿真matlab程序 网上找到的
💻 M
字号:
function progressbar(fractiondone, position)
% Description:
% progressbar(fractiondone,position) provides an indication of the progress of
% some task using graphics and text. Calling progressbar repeatedly will update
% the figure and automatically estimate the amount of time remaining.
% This implementation of progressbar is intended to be extremely simple to use
% while providing a high quality user experience.
%
% Features:
% - Can add progressbar to existing m-files with a single line of code.
% - The figure closes automatically when the task is complete.
% - Only one progressbar can exist so old figures don't clutter the desktop.
% - Remaining time estimate is accurate even if the figure gets closed.
% - Minimal execution time. Won't slow down code.
% - Random color and position options. When a programmer gets bored....
%
% Usage:
% fractiondone specifies what fraction (0.0 - 1.0) of the task is complete.
% Typically, the figure will be updated according to that value. However, if
% fractiondone == 0.0, a new figure is created (an existing figure would be
% closed first). If fractiondone == 1.0, the progressbar figure will close.
% position determines where the progressbar figure appears on screen. This
% argument only has an effect when a progress bar is first created or is reset
% by calling with fractiondone = 0. The progress bar's position can be specifed
% as follows:
% [x, y] - Position of lower left corner in normalized units (0.0 - 1.0)
% 0 - Centered (Default)
% 1 - Upper right
% 2 - Upper left
% 3 - Lower left
% 4 - Lower right
% 5 - Random [x, y] position
% The color of the progressbar is choosen randomly when it is created or
% reset. Clicking inside the figure will cause a random color change.
% For best results, call progressbar(0) (or just progressbar) before starting
% a task. This sets the proper starting time to calculate time remaining.
%
% Example Function Calls:
% progressbar(fractiondone,position)
% progressbar % Initialize/reset
% progressbar(0) % Initialize/reset
% progressbar(0,4) % Initialize/reset and specify position
% progressbar(0,[0.2 0.7]) % Initialize/reset and specify position
% progressbar(0.5) % Update
% progressbar(1) % Close
%
% Demo:
% n = 500;
% progressbar % Create figure and set starting time
% for i = 1:n
% pause(0.01) % Do something important
% progressbar(i/n) % Update figure
% end


persistent progfig progpatch starttime lastupdate
% Set defaults for variables not passed in
if nargin < 1
    fractiondone = 0;
end
if nargin < 2
    position = 0;
end
try
    % Access progfig to see if it exists ('try' will fail if it doesn't)
    dummy = get(progfig,'UserData');
    % If progress bar needs to be reset, close figure and set handle to empty
    if fractiondone == 0
        delete(progfig) % Close progress bar
        progfig = []; % Set to empty so a new progress bar is created
    end
catch
    progfig = []; % Set to empty so a new progress bar is created
end
% If task completed, close figure and clear vars, then exit
percentdone = floor(100*fractiondone);
if percentdone == 100 % Task completed
    delete(progfig) % Close progress bar
    clear progfig progpatch starttime lastupdate % Clear persistent vars
    return
end
% Create new progress bar if needed
if isempty(progfig)
    % Calculate position of progress bar in normalized units
    scrsz = [0 0 1 1];
    width = scrsz(3)/3.2;
    height = scrsz(4)/40;
    if (length(position) == 1)
        hpad = scrsz(3)/64; % Padding from left or right edge of screen
        vpad = scrsz(4)/24; % Padding from top or bottom edge of screen
        left = scrsz(3)/2 - width/2; % Default
        bottom = scrsz(4)/2 - height/2; % Default
        switch position
            case 0 % Center
                % Do nothing (default)
            case 1 % Top-right
                left = scrsz(3) - width - hpad;
                bottom = scrsz(4) - height - vpad;
            case 2 % Top-left
                left = hpad;
                bottom = scrsz(4) - height - vpad;
            case 3 % Bottom-left
                left = hpad;
                bottom = vpad;
            case 4 % Bottom-right
                left = scrsz(3) - width - hpad;
                bottom = vpad;
            case 5 % Random
                left = rand * (scrsz(3)-width);
                bottom = rand * (scrsz(4)-height);
            otherwise
                warning('position must be (0-5). Reset to 0.')
        end
        position = [left bottom];
    elseif length(position) == 2
        % Error checking on position
        if (position(1) < 0) | (scrsz(3)-width < position(1))
            position(1) = max(min(position(1),scrsz(3)-width),0);
            warning('Horizontal position adjusted to fit on screen.')
        end
        if (position(2) < 0) | (scrsz(4)-height < position(2))
            position(2) = max(min(position(2),scrsz(4)-height),0);
            warning('Vertical position adjusted to fit on screen.')
        end
    else
        error('position is not formatted correctly')
    end
    % Initialize progress bar
    progfig = figure(...
        'Units', 'normalized',...
        'Position', [position width height],...
        'NumberTitle', 'off',...
        'Resize', 'off',...
        'MenuBar', 'none',...
        'BackingStore', 'off' );
    progaxes = axes(...                                                     %利用axes填充patch做成进度条
        'Position', [0.02 0.15 0.96 0.70],...
        'XLim', [0 1],...
        'YLim', [0 1],...
        'Box', 'on',...
        'ytick', [],...
        'xtick', [] );
    progpatch = patch(...
        'XData', [0 0 0 0],...
        'YData', [0 0 1 1],...
        'EraseMode', 'none' );
    set(progfig, 'ButtonDownFcn',{@changecolor,progpatch});
    set(progaxes, 'ButtonDownFcn',{@changecolor,progpatch});
    set(progpatch,'ButtonDownFcn',{@changecolor,progpatch});
    changecolor(0,0,progpatch)
    % Set time of last update to ensure a redraw
    lastupdate = clock - 1;
    % Task starting time reference
    if isempty(starttime) | (fractiondone == 0)
        starttime = clock;
    end
end
% Enforce a minimum time interval between updates
if etime(clock,lastupdate) < 0.01
    return
end
% Update progress patch
set(progpatch,'XData',[0 fractiondone fractiondone 0])
% Update progress figure title bar
if (fractiondone == 0)
    titlebarstr = ' 0%';
else
    runtime = etime(clock,starttime);
    timeleft = runtime/fractiondone - runtime;
    timeleftstr = sec2timestr(timeleft);
    titlebarstr = sprintf('完成 %2d%%  剩余 %s ',percentdone,timeleftstr);
end
set(progfig,'Name',titlebarstr)
% Force redraw to show changes
drawnow
% Record time of this update
lastupdate = clock;

% if percentdone == 100 % Task completed
%     delete(progfig) % Close progress bar
%     clear progfig progpatch starttime lastupdate % Clear persistent vars
% %     return
% end

% ------------------------------------------------------------------------------


function changecolor(h,e,progpatch)
% Change the color of the progress bar patch
colorlim = 2.8; % Must be <= 3.0 - This keeps the color from being too light
thiscolor = rand(1,3);
while sum(thiscolor) > colorlim
    thiscolor = rand(1,3);
end
set(progpatch,'FaceColor',thiscolor);
% ------------------------------------------------------------------------------


function timestr = sec2timestr(sec)
% Convert a time measurement from seconds into a human readable string.
% Convert seconds to other units
d = floor(sec/86400); % Days
sec = sec - d*86400;
h = floor(sec/3600); % Hours
sec = sec - h*3600;
m = floor(sec/60); % Minutes
sec = sec - m*60;
s = floor(sec); % Seconds
% Create time string
if d > 0
    if d > 9
        timestr = sprintf('%d天',d);
    else
        timestr = sprintf('%d天,%d小时',d,h);
    end
elseif h > 0
    if h > 9
        timestr = sprintf('%d小时',h);
    else
        timestr = sprintf('%d小时,%d分',h,m);
    end
elseif m > 0
    if m > 9
        timestr = sprintf('%d分',m);
    else
        timestr = sprintf('%d分%d秒',m,s);
    end
else
    timestr = sprintf('%d秒',s);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -