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

📄 ruler.m

📁 matlabDigitalSigalProcess内有文件若干
💻 M
📖 第 1 页 / 共 5 页
字号:
                end
            elseif ~isempty(varargin{3})
                x1 = varargin{3}(1);
                x2 = varargin{3}(2);
            end
        else  % coming from horizontal to one of the verticals
            if nargin < 3 | isempty(varargin{3})
                x1 = 2/3*xlim(1) + 1/3*xlim(2);
                x2 = 1/3*xlim(1) + 2/3*xlim(2);
            elseif ~isempty(varargin{3})
                x1 = varargin{3}(1);
                x2 = varargin{3}(2);
            end
        end
    end

    ud.ruler.type = type;
    
    popupExistFlag = isfield(ud.ruler.hand,'rulerpopup');
    if popupExistFlag
       xtra_ui = 1;
    else
       xtra_ui = 0;
    end
    showhide_ruler_labels(fig,ud.ruler.type,ud.ruler.hand)
    pos_ruler_labels(fig,ud.sz,ud.ruler.type,ud.ruler.hand,xtra_ui)

    if ~isempty(ud.focusline)
        yd = get(ud.focusline,'ydata');
    else
        yd = [];
    end
    
    if isempty(yd)  % nothing to look at
          ud.ruler.value.x1 = NaN;
          ud.ruler.value.y1 = NaN;
          ud.ruler.value.x2 = NaN;
          ud.ruler.value.y2 = NaN;
          ud.ruler.value.dx = NaN;
          ud.ruler.value.dy = NaN;
          ud.ruler.value.dydx = NaN;
          set(ud.ruler.hand.boxes,'string','-','userdata',NaN)
          set(ud.ruler.hand.y1text,'string','-')
          set(ud.ruler.hand.y2text,'string','-')
          set(ud.ruler.hand.dxtext,'string','-')
          set(ud.ruler.hand.dytext,'string','-')
          set(ud.ruler.hand.dydxtext,'string','-')
          set(ud.ruler.hand.buttons,'visible','off')
          set(ud.ruler.lines,'visible','off')
          set(ud.ruler.markers,'visible','off')
          set(fig,'userdata',ud)
          return
    end

    switch ud.ruler.type
    case 'vertical'
        y1 = NaN;
        y2 = NaN;
        dx = x2 - x1;
        dy = NaN;
        dydx = NaN;
        set(ud.ruler.hand.boxes(1),'string',num2str(x1),'userdata',x1)
        set(ud.ruler.hand.boxes(2),'string',num2str(x2),'userdata',x2)
        set(ud.ruler.hand.dxtext,'string',num2str(dx),'userdata',dx)
        set(ud.ruler.lines(1:2),'visible','on')
        set(ud.ruler.lines(1),'xdata',[x1 x1])
        setrulxdata(ud.ruler.lines(2),[x2 x2])
        set(ud.ruler.lines([1 2]),'ydata',ud.limits(plotIndex).ylim)
        set(ud.ruler.lines(3),'visible','off')
        set(ud.ruler.markers,'visible','off')
    case 'horizontal'
        x1 = NaN;
        x2 = NaN;
        if nargin < 3 | isempty(varargin{3})
            y1 = 2/3*ylim(1) + 1/3*ylim(2);
            y2 = 1/3*ylim(1) + 2/3*ylim(2);
        elseif ~isempty(varargin{3})
            y1 = varargin{3}(1);
            y2 = varargin{3}(2);
        end
        dx = NaN;
        dy = y2 - y1;
        dydx = NaN;
        set(ud.ruler.hand.boxes(1),'string',num2str(y1),'userdata',y1)
        set(ud.ruler.hand.boxes(2),'string',num2str(y2),'userdata',y2)
        set(ud.ruler.hand.dytext,'string',num2str(dy),'userdata',dy)
        set(ud.ruler.lines(1:2),'visible','on')
        set(ud.ruler.lines(1),'ydata',[y1 y1])
        set(ud.ruler.lines(2),'ydata',[y2 y2])        
        set(ud.ruler.lines([1 2]),'xdata',ud.limits(plotIndex).xlim)
        set(ud.ruler.lines(1),'linewidth',get(ud.ruler.lines(2),'linewidth'))
        set(ud.ruler.lines(3),'visible','off')
        set(ud.ruler.markers,'visible','off')
    case 'track'
        xd = get(ud.focusline,'xdata');
        if length(xd)==1
           x1 = 0;
           x2 = 0;
           dx = 0;
           y1 = yd;
           y2 = yd;
           dy = 0;
           dydx = NaN;
        else
           t0 = xd(1); Ts = xd(2)-xd(1);
           ind1 = round((x1 - t0)/Ts)+1;
           ind2 = round((x2 - t0)/Ts)+1;
           if ind1>length(xd), ind1 = length(xd); end
           if ind2>length(xd), ind2 = length(xd); end
           x1 = (ind1-1)*Ts + t0;
           x2 = (ind2-1)*Ts + t0;
           dx = x2 - x1;
           y1 = yd(ind1);
           y2 = yd(ind2);
           dy = y2 - y1;
           if dx ~= 0
               dydx = dy / dx;
           else
               dydx = NaN;
           end
        end
        set(ud.ruler.hand.boxes(1),'string',num2str(x1),'userdata',x1)
        set(ud.ruler.hand.boxes(2),'string',num2str(x2),'userdata',x2)
        set(ud.ruler.hand.y1text,'string',num2str(y1));
        set(ud.ruler.hand.y2text,'string',num2str(y2));
        set(ud.ruler.hand.dxtext,'string',num2str(dx),'userdata',dx)
        set(ud.ruler.hand.dytext,'string',num2str(dy));
        set(ud.ruler.hand.dydxtext,'string',num2str(dydx));

        set(ud.ruler.markers,'visible','on')
        set(ud.ruler.markers(1),'xdata',x1,'ydata',y1)
        set(ud.ruler.markers(2),'xdata',x2,'ydata',y2)

        set(ud.ruler.lines(1:2),'visible','on')
        set(ud.ruler.lines(1),'xdata',[x1 x1])
        setrulxdata(ud.ruler.lines(2),[x2 x2])
        set(ud.ruler.lines([1 2]),'ydata',ud.limits(plotIndex).ylim)
        set(ud.ruler.lines(3),'visible','off')
    case 'slope'
        xd = get(ud.focusline,'xdata');
        if length(xd)==1
           x1 = 0;
           x2 = 0;
           dx = 0;
           y1 = yd;
           y2 = yd;
           dy = 0;
           dydx = NaN;
           set(ud.ruler.lines(3),'visible','off')
        else
           t0 = xd(1); Ts = xd(2)-xd(1);
           ind1 = round((x1 - t0)/Ts)+1;
           ind2 = round((x2 - t0)/Ts)+1;
           if ind1>length(xd), ind1 = length(xd); end
           if ind2>length(xd), ind2 = length(xd); end
           x1 = (ind1-1)*Ts + t0;
           x2 = (ind2-1)*Ts + t0;
           dx = x2 - x1;
           y1 = yd(ind1);
           y2 = yd(ind2);
           dy = y2 - y1;

           if dx ~= 0
               [xd,yd,dydx] = setslopeline(ud.mainaxes,ud.limits,...
                   x1,x2,y1,y2,dx,dy,plotIndex);
               set(ud.ruler.lines(3),'xdata',xd,'ydata',yd,'visible','on')
           else
               dydx = NaN;
               set(ud.ruler.lines(3),'visible','off')
           end
        end
        set(ud.ruler.hand.boxes(1),'string',num2str(x1),'userdata',x1)
        set(ud.ruler.hand.boxes(2),'string',num2str(x2),'userdata',x2)
        set(ud.ruler.hand.y1text,'string',num2str(y1));
        set(ud.ruler.hand.y2text,'string',num2str(y2));
        set(ud.ruler.hand.dxtext,'string',num2str(dx),'userdata',dx)
        set(ud.ruler.hand.dytext,'string',num2str(dy));
        set(ud.ruler.hand.dydxtext,'string',num2str(dydx));

        set(ud.ruler.markers,'visible','on')
        set(ud.ruler.markers(1),'xdata',x1,'ydata',y1)
        set(ud.ruler.markers(2),'xdata',x2,'ydata',y2)

        set(ud.ruler.lines(1:2),'visible','on')
        set(ud.ruler.lines(1),'xdata',[x1 x1])
        setrulxdata(ud.ruler.lines(2),[x2 x2])
        set(ud.ruler.lines([1 2]),'ydata',ud.limits(plotIndex).ylim)

    end

    ud.ruler.value.x1 = x1;
    ud.ruler.value.x2 = x2;
    ud.ruler.value.y1 = y1;
    ud.ruler.value.y2 = y2;
    ud.ruler.value.dx = dx;
    ud.ruler.value.dy = dy;
    ud.ruler.value.dydx = dydx;

    set(fig,'userdata',ud)  % save new type and position labels and edit boxes

    if strcmp(type,'horizontal')
        if (y1<ylim(1))|(y1>ylim(2))
            set(ud.ruler.hand.buttons(1),'visible','on')
        else 
            set(ud.ruler.hand.buttons(1),'visible','off')
        end
        if (y2<ylim(1))|(y2>ylim(2))
            set(ud.ruler.hand.buttons(2),'visible','on')
        else 
            set(ud.ruler.hand.buttons(2),'visible','off')
        end
    else
        if (x1<xlim(1))|(x1>xlim(2))
            set(ud.ruler.hand.buttons(1),'visible','on')
        else 
            set(ud.ruler.hand.buttons(1),'visible','off')
        end
        if (x2<xlim(1))|(x2>xlim(2))
            set(ud.ruler.hand.buttons(2),'visible','on')
        else 
            set(ud.ruler.hand.buttons(2),'visible','off')
        end
    end


% --------------------------------------------------------------------
% ruler('newaxes',fig,plotIndex,newMainaxes)
%  move the rulers to new visible mainaxes of the client
%   fig - figure handle of the client
%   plotIndex - index into ud.limits(plotIndex).xlim and 
%              ud.limits(plotIndex).ylim
%   newMainaxes - new subplot that rulers should focus on
%
case 'newaxes'
    if nargin >= 4
        newMainaxes = varargin{4};
        plotIndex = varargin{3};
        fig = varargin{2};
    elseif nargin == 2
        fig = varargin{2};
        plotIndex = 1;
    else
        fig = gcf;
        plotIndex = 1;
    end
    
    % Set ruler lines and markers visible off and move rulers to the new
    % visible axes
    ud = get(fig,'userdata');
    set(ud.ruler.lines,'visible', 'off','parent',newMainaxes)
    set(ud.ruler.markers,'visible','off','parent',newMainaxes)
    
    ruler('newlimits',fig,plotIndex);
    ruler('newsig',fig,plotIndex);
    ruler('showlines',fig,ud.focusline);
    ruler('resizebtns',fig)
    
% --------------------------------------------------------------------
% ruler('newlimits',fig,plotIndex,focusline)
%  case in which the x or y limits
%  have changed, but the ydata and line pick have not necessarily changed
%   plotIndex - index into ud.limits(plotIndex).xlim and 
%              ud.limits(plotIndex).ylim
%
case 'newlimits'
     if nargin > 3
         focuslineFlag = ~isempty(varargin{4});
     else
         focuslineFlag = 1;
     end
     
     if nargin > 2
         plotIndex = varargin{3};
         fig = varargin{2};
     elseif nargin == 2
         fig = varargin{2};
         plotIndex = 1;
     else
         fig = gcf;
         plotIndex = 1;
     end
     ud = get(fig,'userdata');
    
     mainaxes = ud.mainaxes;

     if strcmp(ud.ruler.type,'horizontal')
         set(ud.ruler.lines([1 2]),'xdata',ud.limits(plotIndex).xlim)
         set(ud.ruler.lines(1),'linewidth',get(ud.ruler.lines(2),'linewidth'))
         ylim = get(mainaxes,'ylim');
         if focuslineFlag  % if focusline is set (not empty)
             if (ud.ruler.value.y1 > ylim(2)) | (ud.ruler.value.y1 < ylim(1)) 
                 set(ud.ruler.hand.buttons(1),'visible','on')
             else
                 set(ud.ruler.hand.buttons(1),'visible','off')
             end
             if (ud.ruler.value.y2 > ylim(2)) | (ud.ruler.value.y2 < ylim(1)) 
                 set(ud.ruler.hand.buttons(2),'visible','on')
             else
                 set(ud.ruler.hand.buttons(2),'visible','off')
             end
         end
      else
          set(ud.ruler.lines([1 2]),'ydata',ud.limits(plotIndex).ylim)
          xlim = get(mainaxes,'xlim');
          if focuslineFlag  % if focusline is set (not empty)
              if (ud.ruler.value.x1 > xlim(2)) | (ud.ruler.value.x1 < xlim(1)) 
                  set(ud.ruler.hand.buttons(1),'visible','on')
              else
                  set(ud.ruler.hand.buttons(1),'visible','off')
              end
              if (ud.ruler.value.x2 > xlim(2)) | (ud.ruler.value.x2 < xlim(1)) 
                  set(ud.ruler.hand.buttons(2),'visible','on')
              else
                  set(ud.ruler.hand.buttons(2),'visible','off')
              end
          end
      end
      if strcmp(ud.ruler.type,'slope')
          x1 = ud.ruler.value.x1;
          x2 = ud.ruler.value.x2;
          y1 = ud.ruler.value.y1;
          y2 = ud.ruler.value.y2;
          dx = ud.ruler.value.dx;
          dy = ud.ruler.value.dy;
          [xd,yd,dydx] = setslopeline(mainaxes,ud.limits,...
              x1,x2,y1,y2,dx,dy,plotIndex);
          if focuslineFlag  % if focusline is set (not empty)
              set(ud.ruler.lines(3),'xdata',xd,'ydata',yd,'visible','on')
          end
      end
      
% --------------------------------------------------------------------
% ruler('newsig',fig,plotIndex)
%  case in which a new line has been picked (i.e., ud.focusline
%  has changed, but type hasn't changed and  xlimits / ylimits have not
%  necessarily changed but may have)
%     plotIndex - index into ud.limits(plotIndex).xlim and 
%                 ud.limits(plotIndex).ylim
%
case 'newsig'
      if nargin >= 3
          fig = varargin{2};
          plotIndex = varargin{3};
      elseif nargin == 2
          fig = varargin{2};
          plotIndex = 1;
      else
          fig = gcf;
          plotIndex = 1;
      end
      ud = get(fig,'userdata');

      state = btnstate(fig,'peaksgroup');
      if ~isempty(ud.focusline)
          xd = get(ud.focusline,'xdata');
          yd = get(ud.focusline,'ydata');
      else
          xd = [];
          yd = [];
      end
      if isempty(xd)  % nothing to look at
          ud.ruler.value.x1 = NaN;
          ud.ruler.value.y1 = NaN;
          ud.ruler.value.x2 = NaN;
          ud.ruler.value.y2 = NaN;
          ud.ruler.value.dx = NaN;
          ud.ruler.value.dy = NaN;
          ud.ruler.value.dydx = NaN;
          set(ud.ruler.hand.boxes,'string','-','userdata',NaN)
          set(ud.ruler.hand.y1text,'string','-')
          set(ud.ruler.hand.y2text,'string','-')
          set(ud.ruler.hand.dxtext,'string','-')
          set(ud.ruler.hand.dytext,'string','-')
          set(ud.ruler.hand.dydxtext,'string','-')
          set(ud.ruler.hand.buttons,'visible','off')
          set(ud.ruler.lines,'visible','off')
          set(ud.ruler.markers,'visible','off')
          set(fig,'userdata',ud)
          return
      elseif isnan(ud.ruler.value.x1) & isnan(ud.ruler.value.y1)

⌨️ 快捷键说明

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