📄 modedt.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 + -