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

📄 modedt.m

📁 ADSP TOOLBOX: Version 2.0 and gui m-files
💻 M
字号:
function modedt(mode,cur_txt)
%MODEDT Signal editing for MODGUI


% ADSP Toolbox: Version 2.0 
% For use with "Analog and Digital Signal Processing", 2nd Ed.
% Published by PWS Publishing Co.
%
% Ashok Ambardar, EE Dept. MTU, Houghton, MI 49931, USA
% http://www.ee.mtu/faculty/akambard.html
% e-mail: akambard@mtu.edu
% Copyright (c) 1998


f = gcf;
ui = get(f,'userdata');
edts = ui(15:3:21);
%slds = ui(16:3:22);
stat_bar = ui(61);
ele_mat = get(ui(1),'userdata');
ele_loc = get(ui(14),'userdata');
ele_axs = ui(2);
ele_sld = get(ele_axs,'userdata');
[r,c] = size(ele_mat);

if any(mode == [1:3]), % displaying elements

   if any(mode == [1,3]),
      axes(ele_axs);
      cla;
      top = 0.8;
      range = 1:r;
   else
      ele_loc = get(ui(14),'userdata');
      range = ele_loc;
   end

   for k = range,

      ele_vec = ele_mat(k,:);
      ele_str1 = num2str(ele_vec(1),2);
      ele_str2 = num2str(ele_vec(2),2);
      ele_str3 = num2str(ele_vec(3),2);

      if ele_vec(1) < 0, ele_str1 = ['(',ele_str1,')']; end
      if ele_vec(2) < 0, ele_str2 = ['(',ele_str2,')']; end
      if ele_vec(3) >= 0, ele_str3 = ['+',ele_str3]; end

      txt_str = [ele_str1,'*cos(2*pi*',ele_str2,'*t ',ele_str3,' deg)'];

      if any(mode == [1,3]),

%HIGHLIGHTING MODE
%%%%%%%%%%%%%% NEW ADDITION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%         if mode == 1 & k == r, clr = 'g'; else clr = 'k'; end
          clr='k';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


         if k ~= 1,
            txt1 = text(0.05,top,'+','color',clr,'fontsize',10,...
                  'fontweight','bold','verti','top','horiz','center',...
                  'clipping','on');
         else
            txt1 = text(0,top,' ','vis','off');
         end

         txt2 = text(0.1,top,txt_str,'color',clr,'fontsize',10,...
               'fontweight','bold','verti','top',...
               'clipping','on','userdata',[k,txt1],...
               'buttondownfcn','modedt(5)');

         txt_ext = get(txt2,'extent');
         if txt_ext(3) > 0.94, set(txt2,'fontsize',8); end
         top = top - txt_ext(4);

      else
      % this code determines whether to update the operator text.  it
      % all depeneds if it was the first signal selected
         set(cur_txt,'string',txt_str);
         txt_ext = get(cur_txt,'extent');
         if txt_ext(3) > 0.94, set(cur_txt,'fontsize',8);
         else set(cur_txt,'fontsize',10); end

      end

   end

   if mode == 1,
      set(ui(14),'userdata',k);
      set(ui(3),'userdata',txt2);
   end

   if any(mode == [1,3]),
%%%%%%%%%%%%%%% NEW:   CHANGE r>5 to r>4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      if r > 4, set(ele_sld,'vis','on'); end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   end

elseif mode == 4, % moving element list
   val = get(ele_sld,'value');
   set(ele_axs,'ylim',[0,1]+val);

%%%%%%%%%%%%%%% NEW:   CHANGE r<=5 to r<=4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      if val == 0 & r <= 4, set(ele_sld,'vis','off'); end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

elseif mode == 5, % selecting an element
   cur_obj = gco;
   cur_par = get(cur_obj,'parent');

% NEW ADDITIONS
%elseif mode == 5, % selecting an element
%   cur_obj = gco;
%   cur_par = get(cur_obj,'parent');

%%%%%%%%%%%% NEW ADDITION  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   colour=get(cur_obj,'color');
%   if colour(2)==1; % color is [0 1 0]=green
   if colour(3)==1; % color is [0 0 1]=blue
   set(get(cur_par,'chil'),'color','k');
   data = get(cur_obj,'userdata');
   set([cur_obj,data(2)],'color','k');
   set(ui(6),'enable','on');
   set(ui(7),'enable','off');
   set(edts,'callback','');
%   set(slds,'callback','');
   set(stat_bar,'string','ADD new signal or click on a signal to edit/delete.');
   return,end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

   set(get(cur_par,'chil'),'color','k');
   data = get(cur_obj,'userdata');
%   set([cur_obj,data(2)],'color','g');
   set([cur_obj,data(2)],'color','b');
   ele_loc = data(1);
   set(ui(14),'userdata',ele_loc);
   set(ui(3),'userdata',cur_obj);
   set(ui(7),'enable','on');

%%%%%%%%%%%%%% NEW  ADDITION  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   set(ui(6),'enable','off');
   set(stat_bar,'string','To edit, enter new values.  PRESS DEL to DELETE.');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

   for k = 1:3,
      set(edts(k),'string',num2str(ele_mat(ele_loc,k)));
      edts_val = ele_mat(ele_loc,k);
%      set(slds(k),'value',edts_val,'min',edts_val-5,'max',edts_val+5);
   end
   set(edts,'callback','modedt(6)');
%   set(slds,'callback','modedt(10)');

elseif any(mode == [6,10,11]), % editing an element via edit or slider

   if length(ele_loc) | mode == 11,
%      if any(mode == [10,11]), % slider usage
%         sld = gco;
%         edt = get(sld,'userdata');
%         edt_val = str2num(get(edt,'string'));
%         sld_val = get(sld,'value');
%         sld_min = get(sld,'min');
%         sld_max = get(sld,'max');
%         set(edt,'string',num2str(sld_val,2));

%         if sld_val >= sld_max,
%            set(sld,'min',sld_min+5,'max',sld_max+5);
%         elseif sld_val <= sld_min,
%            set(sld,'min',sld_min-5,'max',sld_max-5);
%         end

%         if mode == 11, return; end

%      else % edit usage
         edt = gco;
         sld = get(edt,'userdata');
         edt_val = str2num(get(edt,'string'));
%         sld_val = get(sld,'value');
         if ~length(edt_val),
%            errordlg('You must enter a VALID number.','Input Error');
            set(edt,'string',num2str(get(sld,'value')));
            return;
         end

%         set(sld,'value',edt_val,'min',edt_val-5,'max',edt_val+5);
%      end

      cur_obj = get(ui(3),'userdata');

      val1 = str2num(get(edts(1),'string'));
      val2 = str2num(get(edts(2),'string'));
      val3 = str2num(get(edts(3),'string'));

      if ~length(val2), val2 = 0; end
      if ~length(val3), val3 = 0; end

      ele_mat(ele_loc,:) = [val1, val2, val3];

      set(ui(1),'userdata',ele_mat);
      modplt;
      modedt(2,cur_obj);
   end

elseif mode == 7, % deleting an element
   set(ui(6),'enable','on');
   set(ui(7),'enable','off');
   set(edts,'callback','');
%   set(slds,'callback','modedt(11)');

% removing element
   ele_mat(ele_loc,:)=[];
   set(ui(1),'userdata',ele_mat);

   set(stat_bar,'string','Deleting selected signal...');
   modplt;
   modedt(3);
   set(stat_bar,'string','Signal deleted.  PRESS Add to UNDO.');

end

⌨️ 快捷键说明

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