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

📄 ruler.m

📁 matlabDigitalSigalProcess内有文件若干
💻 M
📖 第 1 页 / 共 5 页
字号:
          % coming from an 'unfocused' state 
          if strcmp(ud.ruler.type,'horizontal')
              ylim = get(ud.mainaxes,'ylim');
              val1 = 2/3*ylim(1) + 1/3*ylim(2);
              val2 = 1/3*ylim(1) + 2/3*ylim(2);
              set(ud.ruler.lines(1:2),'visible','on')
          else
              xlim = get(ud.mainaxes,'xlim');
              val1 = 2/3*xlim(1) + 1/3*xlim(2);
              val2 = 1/3*xlim(1) + 2/3*xlim(2);
            
              if strcmp(ud.ruler.type,'track')
                  set(ud.ruler.lines(1:2),'visible','on')
                  set(ud.ruler.markers,'visible','on')
              elseif strcmp(ud.ruler.type,'slope')
                  set(ud.ruler.lines(1:3),'visible','on')
                  set(ud.ruler.markers,'visible','on')
              else
                  set(ud.ruler.lines(1:2),'visible','on')
              end
          end

          ud = setrul(fig,ud,val1,1,0,0,plotIndex);
          ud = setrul(fig,ud,val2,2,0,0,plotIndex);

          if state(1)
              ind = findpeaks(yd);
              if isempty(ind)
                  btnup(fig,'peaksgroup',1)
                  ruler('peaks')
              else
                  set(ud.ruler.lines(4),'visible','on','xdata',xd(ind),...
                                                      'ydata',yd(ind))
              end
          end
          if state(2)
              ind = findpeaks(-yd);
              if isempty(ind)
                  btnup(fig,'peaksgroup',2)
                  ruler('valleys')
              else
                  set(ud.ruler.lines(5),'visible','on','xdata',xd(ind),...
                                                      'ydata',yd(ind))
              end
          end
          set(fig,'userdata',ud)
          return
      end
      
      if state(1)
          ind = findpeaks(yd);
          if isempty(ind)
              btnup(fig,'peaksgroup',1)
              ruler('peaks')
          else 
              set(ud.ruler.lines(4),'visible','on','xdata',xd(ind),...
                                                  'ydata',yd(ind))
          end
      end
      if state(2)
          ind = findpeaks(-yd);
          if isempty(ind)
              btnup(fig,'peaksgroup',2)
              ruler('valleys')
          else 
              set(ud.ruler.lines(5),'visible','on','xdata',xd(ind),...
                                                  'ydata',yd(ind))
          end
      end
      
      mainaxes = ud.mainaxes;
      xlim = get(mainaxes,'xlim');
      ylim = get(mainaxes,'ylim');

      % don't need to change anything if type is not 'track' or 'slope'
      switch ud.ruler.type
      case 'vertical'
          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
          return
      case 'horizontal'
          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
          return
      end

      [dum,ind1] = min(abs(ud.ruler.value.x1-xd));
      [dum,ind2] = min(abs(ud.ruler.value.x2-xd));
      
      set(ud.ruler.lines(1),'xdata',[xd(ind1) xd(ind1)]);
      ud.ruler.value.x1 = xd(ind1);
      set(ud.ruler.hand.boxes(1),'string',num2str(ud.ruler.value.x1),...
           'userdata',ud.ruler.value.x1);
      if (xd(ind1) > xlim(2)) | (xd(ind1) < xlim(1)) 
          set(ud.ruler.hand.buttons(1),'visible','on')
      else
          set(ud.ruler.hand.buttons(1),'visible','off')
      end
      setrulxdata(ud.ruler.lines(2),[xd(ind2) xd(ind2)])
      ud.ruler.value.x2 = xd(ind2);
      set(ud.ruler.hand.boxes(2),'string',num2str(ud.ruler.value.x2),...
           'userdata',ud.ruler.value.x2);
      if (xd(ind2) > xlim(2)) | (xd(ind2) < xlim(1)) 
          set(ud.ruler.hand.buttons(2),'visible','on')
      else
          set(ud.ruler.hand.buttons(2),'visible','off')
      end
      
      ud.ruler.value.y1 = yd(ind1);
      ud.ruler.value.y2 = yd(ind2);
      ud.ruler.value.dy = ud.ruler.value.y2 - ud.ruler.value.y1;
      if ud.ruler.value.dx ~= 0
          ud.ruler.value.dydx = ud.ruler.value.dy / ud.ruler.value.dx;
      else
          ud.ruler.value.dydx = NaN;
      end

      set(ud.ruler.hand.y1text,'string',num2str(ud.ruler.value.y1));
      set(ud.ruler.hand.y2text,'string',num2str(ud.ruler.value.y2));
      set(ud.ruler.hand.dytext,'string',num2str(ud.ruler.value.dy));
      set(ud.ruler.hand.dydxtext,'string',num2str(ud.ruler.value.dydx));

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

      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;

          if ~isnan(ud.ruler.value.dydx) % <-- implies 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
              set(ud.ruler.lines(3),'visible','off')
          end
      end

      set(fig,'userdata',ud)

%------------------------------------------------------------------------
% ruler('save')
%  put up dialog box asking for variable name, then save
%  ruler value struct as that name in base workspace.
%
case 'save'
      fig = gcf;
	   ud = get(fig,'userdata');
      prompt={sprintf(['Enter the variable name for the ruler\n' ...
                       'structure to save in the workspace.'])};
      def = {ud.ruler.varname};
      title = 'Save Measurements';
      lineNo = 1;
      varname = inputdlg(prompt,title,lineNo,def);
		if isempty(varname)
		    return
		end
		varstr = varname{:};
		if ~isvalidvar(varstr)
		    errstr = 'Sorry, that''s not a valid variable name.';
		    msgbox(errstr,'Error','error','modal')
		    return 
		end
		ud.ruler.varname = varstr;
		set(fig,'userdata',ud)
		
		val = ud.ruler.value;
		if strcmp(get(ud.ruler.lines(4),'visible'),'on')
		    val.peaks.x = get(ud.ruler.lines(4),'xdata');
		    val.peaks.y = get(ud.ruler.lines(4),'ydata');
		else
		    val.peaks.x = [];
		    val.peaks.y = [];
		end
		if strcmp(get(ud.ruler.lines(5),'visible'),'on')
		    val.valleys.x = get(ud.ruler.lines(5),'xdata');
		    val.valleys.y = get(ud.ruler.lines(5),'ydata');
		else
		    val.valleys.x = [];
		    val.valleys.y = [];
		end
		
		assignin('base',varstr,val)
		
% --------------------------------------------------------------------
% ruler('showlines',fig,focusline)
%  set the visible property of the correct lines
% Inputs:
%   fig - figure handle of the client
%   focusline - handle of the line currently focused by the rulers
%
case 'showlines'
      fig = varargin{2};
      if nargin > 2
          focuslineFlag = ~isempty(varargin{3});
      else 
          focuslineFlag = 1;
      end
      
      if focuslineFlag
          ud = get(fig,'userdata');
          set(ud.ruler.lines(1:2),'visible','on')
          if strcmp(ud.ruler.type,'track')
              set(ud.ruler.markers,'visible','on')
          elseif strcmp(ud.ruler.type,'slope')
              set(ud.ruler.markers,'visible','on')
              set(ud.ruler.lines(3),'visible','on')
          end
          state = btnstate(fig,'peaksgroup');
          if state(1)
              set(ud.ruler.lines(4),'visible','on')
          end    
          if state(2)
              set(ud.ruler.lines(5),'visible','on')
          end
      end

% --------------------------------------------------------------------
% ruler('hidelines',fig,allRulerObjects)
%  set the visible property to off of the correct lines.  In the case where
%  there's a third input argument which is the string 'all' then all ruler
%  lines and markers are set to invisible.
%
% Inputs:
%   fig - figure handle of the client which called ruler
%   allRulerObjects - is the string 'all' when you want to set all ruler
%                     lines and markers to invisible
%
case 'hidelines'  
    fig = varargin{2};
    ud = get(fig,'userdata');

    if (nargin > 2) & strcmp(varargin{3}, 'all')
        h = [ud.ruler.lines(:); ud.ruler.markers(:)];
        set(h,'visible','off')
    else
        if ~strcmp(ud.ruler.type,'track') & ~strcmp(ud.ruler.type,'slope')
            set(ud.ruler.markers,'visible','off')
        end
        if ~strcmp(ud.ruler.type,'slope')
            set(ud.ruler.lines(3),'visible','off')
        end
        state = btnstate(fig,'peaksgroup');
        if ~state(1)
            set(ud.ruler.lines(4),'visible','off')
        end    
        if ~state(2)
            set(ud.ruler.lines(5),'visible','off')
        end    
    end
    
%--------------------------------------------------------------------
% [RulerLinehandles] = ruler('getRulerlines',fig)
% Get the handles to the ruler lines
%
case 'getrulerlines'  
    fig = varargin{2};

    ud = get(fig,'userdata');
    varargout{1} = [ud.ruler.lines, ud.ruler.markers];
    
% --------------------------------------------------------------------
% ruler('peaks')
%   Turn peaks on or off
%
case 'peaks'
      fig = gcf;
      ud = get(fig,'userdata');
      
      if ud.pointer == 2  % help mode
          % restore state:
          if btnstate(fig,'peaksgroup',1)
              btnup(fig,'peaksgroup',1)
          else
              btndown(fig,'peaksgroup',1)
          end
          spthelp('exit','ruler','peaks')
          return
      end

      if btnstate(fig,'peaksgroup',1)
          if strcmp(ud.ruler.Track_and_Slope_Allowed,'off')
              btnup(fig,'peaksgroup',1)
              return
          end
         % button pushed in
         if isempty(ud.focusline)
             return
         end
         xd = get(ud.focusline,'xdata');
         yd = get(ud.focusline,'ydata');
         if isempty(xd)
             return
         end

         ind = findpeaks(yd);
         if isempty(ind)   
             % line is a vector of constants (no peaks); unselect peaks btn
             btnup(fig,'peaksgroup',1)
             return
         end

         set(ud.ruler.lines(4),'xdata',xd(ind),'ydata',yd(ind))
         set(ud.ruler.lines(4),'visible','on')
         
         if strcmp(ud.ruler.type,'track') | strcmp(ud.ruler.type,'slope')
         % snap rulers to peaks:
             ud = setrul(fig,ud,ud.ruler.value.x1,1);
             ud = setrul(fig,ud,ud.ruler.value.x2,2);
             set(fig,'userdata',ud)
         end
      else
         % button out
         if isempty(ud.focusline)
             return
         end
         xd = get(ud.focusline,'xdata');
         if isempty(xd)
             return
         end
         set(ud.ruler.lines(4),'visible','off')
         
         if btnstate(fig,'peaksgroup',2) 
             if  strcmp(ud.ruler.type,'track') | strcmp(ud.ruler.type,'slope')
             % snap rulers to valleys:
                ud = setrul(fig,ud,ud.ruler.value.x1,1);
                ud = setrul(fig,ud,ud.ruler.value.x2,2);
                set(fig,'userdata',ud)
             end
         end

      end
      

% --------------------------------------------------------------------
% ruler('valleys')
%  Turn valleys on or off
%
case 'valleys'  
      fig = gcf;
      ud = get(fig,'userdata');

      if ud.pointer == 2  % help mode
          % restore state:
          if btnstate(fig,'peaksgroup',2)
              btnup(fig,'peaksgroup',2)
          else
              btndown(fig,'peaksgroup',2)
          end
          spthelp('exit','ruler','valleys')
          return
      end

      if btnstate(fig,'peaksgroup',2)
         % button pushed in
         if strcmp(ud.ruler.Track_and_Slope_Allowed,'off')
             btnup(fig,'peaksgroup',2)
             return

⌨️ 快捷键说明

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