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

📄 qdelelmt.m

📁 机器人控制仿真程序一书的所有源代码
💻 M
字号:
function qdelelmt(flag)
% QDELELMT Set up delete interface. (Utility Function)
%          QDELELMT sets up the interface to delete elements chosen by
%          the user.

% Author: Craig Borghesani
% 9/5/93
% Copyright (c) 1995-98 by The MathWorks, Inc.
%       $Revision: 1.4 $

if flag,
 f2=gcf;
 f=get(f2,'userdata');
else
 qclswin(0);
 f=gcf;
end
bthan=get(f,'userdata');
infmat=get(bthan(16),'userdata');

if flag==0,
 T=get(bthan(13),'userdata');
 cont=get(bthan(3),'userdata');

 fig_color=[0.5,0.5,0.5];
 proc_str=[];
 if infmat(25,2)>1, proc_str=[' (',int2str(infmat(25,2)),')']; end
 % check if there is anything to delete
 if ~length(T) & length(cont(:,1))==2 & cont(2,1)==0,
   errordlg('Nothing to Delete','Message','on');
 elseif length(T) & length(cont(:,1))==3,
  if sum([cont(2,1:2) cont(3,1)])==0,
   errordlg('Nothing to Delete','Message','on');
  else
   set(bthan([1,8,29]),'enable','off');
   cntdisp(f,cont,7);
  end
 else
% setup uicontrols of elements in controller matrix
  set(bthan([1,8,29]),'enable','off');
  cntdisp(f,cont,7);
 end
elseif flag==1, % Delete
 flag2=infmat(9,1);
 T=get(bthan(13),'userdata');
 lomat=get(bthan(1),'userdata');
 cont = get(bthan(3),'userdata');
 t_ele = get(bthan(23),'userdata');
 set(bthan(27),'userdata',lomat);
 set(bthan(28),'userdata',cont);
 cur_sel = gco;
 go_for_it=1;

 data = get(cur_sel,'userdata');
 delete = get(cur_sel,'value');
 cur_ele = data(1:4);

 if cur_ele(4)==0.7,
  val=str2num(get(data(5),'string'));
  if length(val) & abs(val)<=abs(cur_ele(1)),
   if cur_ele(1)>0,
    del_ele=[val,cur_ele(2:4)];
   else
    del_ele=[-val,cur_ele(2:4)];
   end
  else
   errordlg('Cannot DELETE more than you have.','Message','on');
   set(data(5),'string',int2str(abs(cur_ele(1))));
   set(cur_sel,'value',1);
   go_for_it=0;
  end
 elseif cur_ele(4)==0.6,
  val=str2num(get(data(5),'string'));
  if length(val) & abs(val)<=abs(cur_ele(1)),
   if cur_ele(1)>0,
    del_ele=[val,cur_ele(2:4)];
   else
    del_ele=[-val,cur_ele(2:4)];
   end
  else
   errordlg('Cannot DELETE more than you have.','Message','on');
   set(data(5),'string',int2str(abs(cur_ele(1))));
   set(cur_sel,'value',1);
   go_for_it=0;
  end
 elseif cur_ele(4)==0.5,
  val1=str2num(get(data(5),'string'));
  val2=str2num(get(data(6),'string'));
  if length([val1,val2])==2 & abs(val1)<=abs(cur_ele(1)) ...
                            & abs(val2)<=abs(cur_ele(2)),

   del_ele=[val1,val2,cur_ele(3:4)];
  else
   errordlg('Cannot DELETE more than you have.','Message','on');
   set(data(5),'string',int2str(cur_ele(1)));
   set(data(6),'string',int2str(cur_ele(2)));
   set(cur_sel,'value',1);
   go_for_it=0;
  end
 else
  del_ele = cur_ele;
 end
 if go_for_it,
  if any(infmat(9,1)==[1 3]), % SHAPE/DSHAPE/BODPLOT/DBODPLOT
   q=1; s=0;
  elseif infmat(9,1)==2, % FSHAPE/DFSHAPE
   q=[1;1]; s=1;
  end
  set(infmat(21,1),'enable','on');
  set(infmat(21,2),'callback','qdelelmt(3)');
  lomat2 = get(bthan(20),'userdata');
  if ~length(lomat2), lomat2 = lomat; end
  del_cp = qcntbode(del_ele,lomat2(1,:),T);
  if delete==0,
   lomat2(2:2+s,:) = lomat2(2:2+s,:)./del_cp(q,:);
   if length(data)==5, set(data(5),'enable','off');
   elseif length(data)==6, set(data(5:6),'enable','off'); end
  else
   if length(data)==6,
    set(data(5),'string',num2str(cur_ele(1)),'enable','on');
    set(data(6),'string',num2str(cur_ele(2)),'enable','on');
   elseif length(data)==5,
    set(data(5),'string',num2str(abs(cur_ele(1))),'enable','on');
   end
   lomat2(2:2+s,:) = lomat2(2:2+s,:).*del_cp(q,:);
  end

  done_flag = 1;
  for tct = 1:length(t_ele),
   if strcmp(get(t_ele(tct),'style'),'checkbox'),
    if ~get(t_ele(tct),'value') & strcmp(get(t_ele(tct),'vis'),'on'),
     done_flag = 0;
     break;
    end
   end
  end

  if done_flag,
   set(infmat(21,1),'enable','off');
   v2=get(bthan(21),'userdata');
   vo2=get(bthan(22),'userdata');
   if infmat(9,1)==1,
    set([v2(:);vo2(:)],'vis','off');
   else
    set(v2,'vis','off');
   end
   set(bthan(20),'userdata',[]);
  else
   set(bthan(20),'userdata',lomat2);
   if flag2==1, qnicplt(f);
   elseif flag2==2, qmagplt(f);
   elseif flag2==3, mgphplot(f);
   end
  end
 end
elseif flag == 2, % Done
 cont = get(bthan(3),'userdata');
 T = get(bthan(13),'userdata');
 if length(T), cont_new = cont(1:3,:);
 else cont_new = cont(1:2,:); end
 objects = get(bthan(23),'userdata');
 for k = 1:length(objects),
  if strcmp(get(objects(k),'vis'),'on'),
   data = get(objects(k),'userdata');
   kept = get(objects(k),'value');
   if ~kept & length(data)==6, % discrete integrators/differentiators
    loc = find(data(4)==cont_new(:,4));
    cont_new(loc,1:2) = cont_new(loc,1:2) - ...
            [str2num(get(data(5),'string')),str2num(get(data(6),'string'))];
   elseif ~kept & length(data)==5, % integ/diff/pred/delay
    loc = find(data(4)==cont_new(:,4));
    if cont_new(loc,1) > 0, % integ/pred
     cont_new(loc,1) = cont_new(loc,1) - str2num(get(data(5),'string'));
    else % diff/delay
     cont_new(loc,1) = cont_new(loc,1) + str2num(get(data(5),'string'));
    end
   elseif kept & length(data)==4,
    cont_new = [cont_new;data];
   end
  end
 end
 lomat = get(bthan(20),'userdata');
 if length(lomat),
  set(bthan(1),'userdata',lomat);
 end
 set(bthan(3),'userdata',cont_new);
 set(bthan([1,8,29]),'enable','on');
 set(bthan([19,20]),'userdata',[]);
 v=get(bthan(10),'userdata');
 v2=get(bthan(21),'userdata');
 if infmat(9,1)==1,
  vo2=get(bthan(22),'userdata');
  vo=get(bthan(17),'userdata');
  set([v,vo],'vis','off');
  set(bthan(22),'userdata',vo);
  set(bthan(17),'userdata',vo2);
 else
  set(v,'vis','off');
 end
 set(v2,'linestyle','-');
 set(v,'linestyle','--');
 set(bthan(10),'userdata',v2);
 set(bthan(21),'userdata',v);
 set(infmat(8,1),'enable','on');
 set(f2,'vis','off');

elseif any(flag == [3,4]), % Cancel
 set(bthan([1,8,29]),'enable','on');
 if flag==3, % Cancel
  v2=get(bthan(21),'userdata');
  vo2=get(bthan(22),'userdata');
  if infmat(9,1)==1,
   set([v2(:);vo2(:)],'vis','off');
  else
   set(v2,'vis','off');
  end
 end
 set(bthan([19,20]),'userdata',[]);
 set(f2,'vis','off');
end

⌨️ 快捷键说明

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