gusucode.com > 信号处理工具箱 - signal源码程序 > signal\signal\siggui\private\ruldown.m

    function ruldown(ruler_num)
%RULDOWN Button down function for ruler lines.
 
%   Copyright (c) 1988-98 by The MathWorks, Inc.
% $Revision: 1.1 $

% ruler_num
%      1,2 button down on ruler line or marker
%      0 button down on some other line in the mainaxes, routed here
%        through pickfcn
%

    fig = gcf;
    if justzoom(fig), return, end
    ud = get(fig,'userdata');

    p = get(ud.mainaxes,'currentpoint');

    if ruler_num == 0
        % 3.5 is the "magic number" (used to be 6.5)
        mpos = get(ud.mainaxes,'position');
        if ud.ruler.type(1)=='h'
            five_pix = 3.5*diff(get(ud.mainaxes,'ylim'))/mpos(4);
            ruler_num = 2 - (abs(p(1,2)-ud.ruler.value.y1)<=five_pix);
        else
            five_pix = 3.5*diff(get(ud.mainaxes,'xlim'))/mpos(3);
            ruler_num = 2 - (abs(p(1,1)-ud.ruler.value.x1)<=five_pix);
        end
    elseif strcmp(get(gcf,'pointer'),'arrow')
        % not a hand - just return
        % This means that the user clicked on the ruler, but the
        % hand was not the cursor because the ruler motion code
        % has a narrow region which sometimes misses the true
        % buttondown region of the line.
        % disp('warning: line button down rejected')
        return
    end

    if ud.pointer == 2 % help mode
        sbhelp('rulerdown',num2str(ruler_num))
        return
    end

    save_wbmf = get(fig,'windowbuttonmotionfcn');

    setptr(fig,'closedhand')
    set(ud.ruler.lines(1),'userdata',0)

    set(fig,'windowbuttonmotionfcn',['sbswitch(''rulermo'',' ...
                    num2str(ruler_num) ')'])
    set(fig,'windowbuttonupfcn',['sbuserdata = get(gcf,''userdata''); '...
           'set(sbuserdata.ruler.lines(1),''userdata'',1), clear sbuserdata'])

    waitfor(ud.ruler.lines(1),'userdata',1)
  
    % OK we're back from the drag
    setptr(fig,['hand' num2str(ruler_num)])
    set(fig,'windowbuttonmotionfcn',save_wbmf);
    set(fig,'windowbuttonupfcn','');