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

📄 ruler.m

📁 有关matlab的电子书籍有一定的帮助希望有用
💻 M
📖 第 1 页 / 共 5 页
字号:
    c4 = 'sbswitch(''ruler'',''newtype'',''slope'')';

    r_callbackstr = str2mat(c1,c2,c3,c4);
 
    % common btngroup param/value pairs:
    group_props = {'BevelWidth',.05, 'Orientation','horizontal',...
                   'Units','pixels'};

    id = ruler_btnid(ud.prefs.ruler.type);
    initialState = [0 0 0 0];
    initialState(id) = 1;
    ud.ruler.hand.rulergroup = btngroup(fig,'GroupID','rulergroup',...
        'IconFunctions',r_iconstr,...
        'ButtonID',str2mat('vertical','track','horizontal','slope'),...
        'Exclusive','yes',...
        'InitialState',initialState,...
        'Callbacks',r_callbackstr,...
        'GroupSize',[2 2],...
        group_props{:});
    setFontUnitsPixels(ud.ruler.hand.rulergroup)

    % ====================================================================
    % Peaks and Valleys toggle buttons

    s1 =['[text(.5,.15,''Peaks''' tp ')'...
         ' line([.1 .35 .5 .65 .9],[.4 .9 .65 .8 .4],''color'',''k'') ' ...
         ' line([.35 .65],[.9 .8],''linestyle'',''none'',''marker'',''o'','...
         '''color'',''k'')  ]'];

    s2 =['[text(.5,.15,''Valleys''' tp ')' ...
         ' line([.1 .35 .5 .65 .9],1.35-[.4 .9 .65 .8 .4],''color'',''k'') ' ...
         ' line([.35 .65],1.35-[.9 .8],''linestyle'',''none'',''marker'',''o'','...
         '''color'',''k'')  ]'];

    r_iconstr = str2mat(s1,s2);
    c1 = 'sbswitch(''ruler'',''peaks'')';
    c2 = 'sbswitch(''ruler'',''valleys'')';
    r_callbackstr = str2mat(c1,c2,c3,c4);
 
    ud.ruler.hand.peaksgroup = btngroup(fig,'GroupID','peaksgroup',...
        'IconFunctions',r_iconstr,...
        'ButtonID',str2mat('peaks','valleys'),...
        'InitialState',[0 0],...
        'Callbacks',r_callbackstr,...
        'GroupSize',[1 2],...
        group_props{:});
    setFontUnitsPixels(ud.ruler.hand.peaksgroup)

    ud.ruler.evenlySpaced = 1;  % default value; used in rulermo;
                                % needs to be set by ruler's caller whenever
                                % ud.focusline is set
                                
    ud.ruler.Track_and_Slope_Allowed = 'on';                              
    set(fig,'userdata',ud)

    set(fig,'resizefcn',appstr(get(fig,'resizefcn'),...
            'sbswitch(''ruler'',''resize'')'))

    ruler('resize',1,fig)
    showhide_ruler_labels(fig,ud.ruler.type,ud.ruler.hand)

    % figure(save_fig)

%-----------------------------------------------------------------
% ruler('close',fig)
%  shutdown code - removes ruler from browser
%   Inputs:
%     fig - figure handle of browser
%     handle - HG handle that needs to be removed along
%              with the rulers (ie rulerpopup uicontrol)
%
case 'close'   
    fig = varargin{2};
    ud = get(fig,'userdata');
    if find(strcmp('rulerpopup',fieldnames(ud.ruler.hand)));  % popup exists
       delete(ud.ruler.hand.rulerpopup);
    end
    ud.prefs.tool.ruler = 0;
    delete(ud.ruler.lines)
    delete(ud.ruler.markers)
    h = ud.ruler.hand;
    ud.ruler.lines = [];
    ud.ruler.markers = [];
    ud.ruler.hand = [];

    delete_list = [
      h.rulergroup
      h.peaksgroup
      h.ruleraxes
      h.x1label
      h.y1label
      h.x2label
      h.y2label
      h.dxlabel
      h.dylabel
      h.dydxlabel
      h.boxes(:)
      h.buttons(:)
      h.saverulerbutton
      h.y1text
      h.y2text
      h.dxtext
      h.dytext
      h.dydxtext
    ];
     
    delete(delete_list)

    set(fig,'resizefcn',remstr(get(fig,'resizefcn'),...
       'sbswitch(''ruler'',''resize'')'))    

    set(fig,'userdata',ud)

%-----------------------------------------------------------------
% minWidth = ruler('minWidth',sz)
%  returns height of ruler INCLUDING toolbar, in pixels
%  can be called before or after creation of rulers
%   sz - size structure
%
case 'minwidth'
    sz = varargin{2};
    toolbar_ht = sz.ih;
    varargout{1} = sz.fus+sz.lh+3*sz.rih+8*(sz.uh+sz.fus)+2*sz.fus + toolbar_ht;
    
%-----------------------------------------------------------------
% ruler('resize',create_flag,fig)
%  resize ruler object
%   create_flag == 1 for first time call (position ALL objects)
%               == 0 to position only those that move on resize
%   fig - figure handle of client, such as the signal browser, spectrum
%         viewer or filter viewer
%
case 'resize'
    if nargin >= 2
        create_flag = varargin{2};
    else
        create_flag = 0;
    end
    if nargin >= 3
        fig = varargin{3};
    else
        fig = gcbf;
    end

    ud = get(fig,'userdata');
    sz = ud.sz;
    fp = get(fig,'position');   % in pixels already
    toolbar_ht = sz.ih;

    popupExistFlag = isfield(ud.ruler.hand,'rulerpopup');
    if popupExistFlag
       n_ui = 9;      % number of uicontrols in ruler frame
       xtra_ui = 1;
    else
       n_ui = 8;
       xtra_ui = 0;
    end
    
    minRulerHeight = sz.fus+sz.lh+3*sz.rih+n_ui*(sz.uh+sz.fus)+2*sz.fus;
    if (fp(4)-toolbar_ht) < minRulerHeight
       % disp('    RULER: figure too short - resizing')
       w = fp(3);
       h = minRulerHeight+toolbar_ht;
       fp = [fp(1) fp(2)+fp(4)-h w h];
       set(fig,'position',fp)
       return
    end
    mainaxes = ud.mainaxes;
    mp = get(mainaxes,'position');
    hand = ud.ruler.hand;
    frame_top = fp(4)-(toolbar_ht+sz.ffs+sz.lh/2);
    sizes = {
      hand.ruleraxes  [fp(3)-sz.rw 1 sz.rw fp(4)-toolbar_ht]   
      hand.rulergroup [fp(3)-sz.rw/2-sz.riw ...
                       frame_top-(xtra_ui*(sz.uh+sz.fus)+sz.lh/2+2*sz.rih) ...
		       2*sz.riw 2*sz.rih] 
      hand.peaksgroup [fp(3)-sz.rw/2-sz.riw ...
                       frame_top-(sz.lh/2+3*sz.rih+(n_ui-1)*(sz.uh+sz.fus)+1) ...
                       2*sz.riw sz.rih] 
      hand.buttons(1) [mp(1)+mp(3)-2*sz.uh mp(2)+mp(4) sz.uh sz.uh]
      hand.buttons(2) [mp(1)+mp(3)-sz.uh mp(2)+mp(4) sz.uh sz.uh]
      hand.saverulerbutton [fp(3)-sz.rw/2-sz.riw ...
                      frame_top-(sz.lh/2+3*sz.rih+n_ui*(sz.uh+sz.fus)-3) ...
                      2*sz.riw sz.uh];
    };

    set([sizes{:,1}],{'position'},sizes(:,2))
    set(hand.ruleraxes,'xlim',[0 sz.rw],'ylim',[0 fp(4)-toolbar_ht])

    if popupExistFlag
       rulerGroupPos = sizes{2,2};
       set(ud.ruler.hand.rulerpopup,'position',...
	       [rulerGroupPos(1) frame_top-sz.uh-sz.lh/2+1 sz.riw*2-2 sz.uh]);
    end
  
    % 1-by-2 position vectors (for axes text)
    pos = {
    hand.rulerlabel    [sz.rw/2 frame_top]
    };

    set([pos{:,1}],{'position'},pos(:,2))

    pos_ruler_labels(fig,sz,ud.ruler.type,hand,xtra_ui);

    % --------------------------------------------------------------------
    % specify rectangles for frame borders (line objects)
    %   [left bottom right top]
    pos = {
    hand.rulerframe  [sz.ffs ...
                   frame_top-(sz.lh/2+2*sz.rih+9*sz.fus+n_ui*sz.uh+sz.rih) ...
                   sz.rw-sz.ffs frame_top]
    };
    % convert rectangles to xdata and ydata for frame borders (line objects)
    [xdata,ydata]=lfdata(pos(:,2), hand.rulerlabel, sz.lfs);

    set([pos{:,1}],{'xdata'},xdata,{'ydata'},ydata)
    
%-----------------------------------------------------------------
% ruler('resizebtns',fig)
%  move ruler buttons (1,2) to correct location
%   fig - figure handle of the client, such as signal browser, 
%         filter viewer, or spectrum viewer
%
case 'resizebtns'
    if nargin >= 2
        fig = varargin{2};
    else
        fig = gcf;
    end

    ud = get(fig,'userdata');
    sz = ud.sz;

    mainaxes = ud.mainaxes;
    mp = get(mainaxes,'position');

    set(ud.ruler.hand.buttons(1),...
        'position',[mp(1)+mp(3)-2*sz.uh mp(2)+mp(4) sz.uh sz.uh])
    set(ud.ruler.hand.buttons(2),...
        'position',[mp(1)+mp(3)-sz.uh mp(2)+mp(4) sz.uh sz.uh])

%------------------------------------------------------------------------
% ruler('setpopup',fig,str,val)
%  set the string and value of the ruler popupmenu
% Inputs:
%   fig - figure handle of the client
%   str - ruler popupmenu string
%   val - ruler popupmenu value
%
case 'setpopup'
    fig = varargin{2};
    str = varargin{3};
    val = varargin{4};

    ud = get(fig,'userdata');
    set(ud.ruler.hand.rulerpopup,'string',str);
    set(ud.ruler.hand.rulerpopup,'value',val);

%------------------------------------------------------------------------
% [str,val] = ruler('getpopup',fig)
%  get the string and value of the ruler popupmenu
% Inputs:
%   fig - figure handle of the client
% Outputs:
%   str - ruler popupmenu string
%   val - ruler popupmenu value
%
case 'getpopup'
    fig = varargin{2};
    ud = get(fig,'userdata');
    varargout{1} = get(ud.ruler.hand.rulerpopup,'string');
    varargout{2} = get(ud.ruler.hand.rulerpopup,'value');
    
%------------------------------------------------------------------------
%   ruler('allowTrack',on_off,fig)
%     Set allowTrack property of rulers; if set to 'off', then
%     user cannot switch to track or slope modes, and the peaks and
%     valleys buttons are forced off.
%     When switched off, the ruler is switched to Vertical mode if it
%     was previously in track or slope, and the peaks and valleys are
%     turned off.
%   Side effect: sets the userdata of the figure
%   Inputs:
%     on_off - 'on' or 'off'
%     fig - figure of rulers
%
case 'allowtrack'
    on_off = varargin{2};
    fig = varargin{3};
    ud = get(fig,'userdata');
    
    switch on_off
    case 'on'
        ud.ruler.Track_and_Slope_Allowed = 'on';
        set(fig,'userdata',ud);
    case 'off'
        ud.ruler.Track_and_Slope_Allowed = 'off';
        set(fig,'userdata',ud);
        switch ud.ruler.type
        case {'track', 'slope'}
            btndown(fig,'rulergroup',1)
            btnup(fig,'rulergroup',3)
            btnup(fig,'rulergroup',4)
            ruler('newtype','vertical',fig)
        end
        ud = get(fig,'userdata');
        % turn off peaks and/or valleys
        if btnstate(fig,'peaksgroup',1)  % peaks are on
            btnup(fig,'peaksgroup',1)
            ruler('peaks')
        end
        if btnstate(fig,'peaksgroup',2)  % valleys are on
            btnup(fig,'peaksgroup',2)
            ruler('valleys')
        end    
    otherwise
        error('allowTrack must be ''on'' or ''off''.')
    end
    
%------------------------------------------------------------------------
%   ruler('newtype',type,fig)
%  OR
%   ruler('newtype',type,[x1 x2])
%    type can be 'horizontal','vertical','track' or 'slope'.
%    positions rulers in center of mainaxes, or if given two values
%    as input uses those values.
%
case 'newtype'
    type = varargin{2};
    if nargin < 3
        fig = gcf;
    elseif length(varargin{3})==1
        fig = varargin{3};
        varargin{3} = [];
    end
    ud = get(fig,'userdata');
    
    old_type = ud.ruler.type;

    plotIndex = find(ud.mainaxes == ud.ruler.allAxesList);
    
    if ud.pointer == 2  % help mode
        if ~isequal(type,old_type)
            btnup(fig,'rulergroup',ruler_btnid(type))
            btndown(fig,'rulergroup',ruler_btnid(old_type))
        end
        spthelp('exit','ruler',type)
        return
    end
    
    if strcmp(ud.ruler.Track_and_Slope_Allowed,'off') & ...
       (strcmp(type,'track') | strcmp(type,'slope'))
        btndown(fig,'rulergroup',1+strcmp(old_type,'horizontal'))
        btnup(fig,'rulergroup',3)
        btnup(fig,'rulergroup',4)
        return
    end

    if isequal(type,old_type)  % do nothing if type hasn't changed
        return
    end

    mainaxes = ud.mainaxes;
    xlim = get(mainaxes,'xlim');
    ylim = get(mainaxes,'ylim');

    if ~strcmp(type,'horizontal')
        if ~strcmp(old_type,'horizontal')
            if nargin < 3 | isempty(varargin{3})
                % if both new and old ruler type are vertical,
                % retain any visible values.
                if (ud.ruler.value.x1 < xlim(1))|(ud.ruler.value.x1>xlim(2))
                    x1 = 2/3*xlim(1) + 1/3*xlim(2);
                else
                    x1 = ud.ruler.value.x1;
                end
                if (ud.ruler.value.x2 < xlim(1))|(ud.ruler.value.x2>xlim(2))
                    x2 = 1/3*xlim(1) + 2/3*xlim(2);
                else
                    x2 = ud.ruler.value.x2;

⌨️ 快捷键说明

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