📄 dtsimgui.m
字号:
else
ele_mat = get(ui(1),'userdata');
ele_vec = ele_mat(ele_loc,:);
set(cust_edt,'string',get(ele_vec(1),'userdata'));
set(ui(13),'string',[int2str(ele_vec(7)),',',int2str(ele_vec(9))]);
end
end
elseif mode == 2, % adding
% obtain local range values
n_str = get(ui(13),'string');
if isempty(n_str)
errordlg('No values entered for signal range.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
n_val = eval(['[',n_str,']'],'[]');
if isempty(n_val)
errordlg('MATLAB syntax error for signal range.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
if length(n_val)~=2
errordlg('Signal range requires 2 values.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
minn=n_val(1);maxn=n_val(2);
if minn >= maxn,
errordlg('Signal range must be entered as min, max.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
if rem(minn,1) | rem(maxn,1)
errordlg('Signal range must be entered as integers.','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
if minn<0 | maxn<0
errordlg('Signal range must be non-negative (causal).','Input Error');
set(ui(13),'string',get(ui(13),'userdata'));
return;
end
set(ui(13),'userdata',n_str);
val1 = str2num(get(edts(1),'string'));
val2 = str2num(get(edts(2),'string'));
val3 = str2num(get(edts(3),'string'));
val4 = str2num(get(edts(4),'string'));
val5 = str2num(get(edts(5),'string'));
val6 = get(ui(5),'value');
val7 = minn; % min value of range
val8 = 1; % step value
val9 = maxn; % max value of range
if ~length(val1), val1 = 1; end
if ~length(val2), val2 = 0; end
if ~length(val3), val3 = 0; end
if ~length(val4), val4 = 0; end
if ~length(val5), val5 = 0; end
if val6 == 1
if val2 == 0,
errordlg(' a must be non-empty and non-zero.','Input Error');
return;
end
if rem(val3,1),
errordlg(' b must be an integer.','Input Error');
return;
end
end
if val6 == 2
val1=NaN;
r_str = get(ui(13),'string');
loc_inf = find(r_str == 'n');
xn_str = get(cust_edt,'string');
if ~length(xn_str)
errordlg('Nothing entered for x[n]!','Input Error');
return
end
problem=0;if xn_str(1)=='W',
xn_str(1)=[];evalin('base',[xn_str ';'],'problem=1;')
if problem==0, xn_str=evalin('base',xn_str);
else
errordlg('MATLAB Syntax error.','Input Error');
return
end
end
r_str = get(ui(13),'string');
n = eval(['[',r_str,']']);
n = n(1):n(2);
if isstr(xn_str)
xn_str = ['[',xn_str,']'];
ttt=0;
eval([xn_str ';'],'ttt=1;');
if ttt
errordlg('Incorrect Matlab Syntax.','Input Error');
return
end
xn_str=eval(xn_str);
end
if length(xn_str) ~= length(n) & length(xn_str) ~= 1
errordlg('Time and signal arrays have different length.','Input Error');
return
end
end
ele_mat = [ele_mat;val1, val2, val3, val4, val5, val6, val7, val8, val9];
set(ui(1),'userdata',ele_mat);
set(stat_bar,'string','Adding new signal...');
dtsigedt(1);
dtsigplt(1);
dtsimplt;
elseif mode == 3, % Reset
set([ui(43),ui(45)],'string','1');
set(ui(47),'string','');
set(ui(48),'value',1);
dtsimplt
elseif mode == 4, %Check for correct range and causal input
n_str = get(ui(9),'string');
if isempty(n_str)
errordlg('No values entered for plot range.','Input Error');
set(ui(9),'string',get(ui(9),'userdata'));
return;
end
n_val = eval(['[',n_str,']'],'[]');
if isempty(n_val)
errordlg('MATLAB syntax error for plot range.','Input Error');
set(ui(9),'string',get(ui(9),'userdata'));
return;
end
if length(n_val)~=2
errordlg('Plot range requires 2 values.','Input Error');
set(ui(9),'string',get(ui(9),'userdata'));
return;
end
minn=n_val(1);maxn=n_val(2);
if minn >= maxn,
errordlg('Plot range must be entered as min, max.','Input Error');
set(ui(9),'string',get(ui(9),'userdata'));
return;
end
if rem(minn,1) | rem(maxn,1)
errordlg('Plot range must be entered as integers.','Input Error');
set(ui(9),'string',get(ui(9),'userdata'));
return;
end
if minn~=0
errordlg('Starting index of plot reange must be 0.','Input Error');
set(ui(9),'string',get(ui(9),'userdata'));
return;
end
dtsigplt(2);
dtsimplt
elseif mode == 9, % cursor
if get(curs_btn,'value')
set(curs_dsp,'vis','on');
set(stat_bar,'string','To activate cursor, click inside a plot. Double click to maximize/minimize.');
set(f,'WindowButtonMotionFcn','dtsimgui(10)');
else
set(f,'Pointer','arrow','WindowButtonMotionFcn','');
set(curs_dsp,'vis','off')
set(curs_btn,'value',0),
set(stat_bar,'string','');
end
elseif mode == 10, % cursor movement
h=gca;
set(f,'currentaxes',h);
lim=get(h,'pos'); % get current axis position
c_p = [lim(1) lim(1)+lim(3) lim(2) lim(2)+lim(4)];
f_p=get(f,'CurrentPoint'); % get co-ordinates of current point
if f_p(1) < c_p(1) | f_p(1) > c_p(2) | f_p(2) < c_p(3) | f_p(2) > c_p(4)
set(f,'Pointer','arrow');
set(curs_dsp(2),'string','');
set(curs_dsp(4),'string','');
else
curr_pt=get(h,'CurrentPoint'); % get current mouse position
set(f,'Pointer','crosshair');
set(curs_dsp(2),'string',num2str(curr_pt(1,1)));
set(curs_dsp(4),'string',num2str(curr_pt(1,2)));
end
elseif mode == 15, %Export data
dtsimplt;
ostr=get(ui(48),'string');oval=get(ui(48),'value');ostr=ostr(oval,:);
str1='Export index as';
str2='Export input signal x[n] as';
str3=['Export ' ostr ' response y[n] as'];
str4='Export symbolic form for y[n] as';
exp_str={str1,str2,str3,str4};
exp_var={'dtindex','dtin','dtout','dtyn'};
expect=inputdlg(exp_str,'Save Variables as',1,exp_var);
if ~isempty(expect)
h_t=get(ui(8),'userdata');%%% FIX FOR UIs
ha=get(ui(65),'userdata');%%% FIX FOR UIs
hsym=get(ui(66),'userdata');%%% FIX FOR UIs
if ~isempty(expect{1}),assignin('base',expect{1},h_t(1,:));end
if ~isempty(expect{2}),assignin('base',expect{2},h_t(2,:));end
if ~isempty(expect{3}),assignin('base',expect{3},ha);end
if ~isempty(expect{4}),assignin('base',expect{4},hsym);end
end
elseif mode == 16, % Axis Control Help
msgbox([' First click in a plot window. ',...
' Then, come back and execute'],...
'Axis Control Info','help')
elseif mode == 17, % Axis Control
cur_axs=[]; cur_obj = gco;
cur_par = get(cur_obj,'parent');
if ~isempty(cur_par)
if cur_par == f,
cur_axs = cur_obj;
else
cur_axs = cur_par;
end
end
if isempty(cur_axs),dtsimgui(16);
else
set(curs_btn,'value',0);
dtsimgui(9); %%% REPLACE number BY CURSOR MODE
if any(cur_axs==ui([29,32])),%%%% CHANGE UI numbers
if cur_axs==ui(29),txt='Input x[n]';%%%% CHANGE UI numbers
elseif cur_axs==ui(32),txt='Output y[n]';%%%% CHANGE UI numbers
end
axlimdlg(txt,[1 1]); %[1 1]=auto +linear/log, [1 0]=auto, no linear/log
else
dtsimgui(16);
end
end
elseif mode == 18, % zoom on
set(curs_btn,'value',0);
dtsimgui(9); % Use CURSOR MODE
if get(ui(15),'userdata')==0 %%Change ui(15) to whatever
zoom on
set(ui(15),'userdata',1);
else
msgbox('Zoom is already ON.','Zoom Info','help')
end
elseif mode == 19, % zoom off
set(curs_btn,'value',0);
dtsimgui(9); % Use CURSOR MODE
if get(ui(15),'userdata')==1
%%%%%Insert old zoom off here
set(f,'currentaxes',ui(29));
zoom out,zoom reset,zoom off
set(f,'currentaxes',ui(32));
zoom out,zoom reset,zoom off
set(ui(15),'userdata',0);
else
msgbox('Zoom is already OFF.','Zoom Info','help')
end
elseif mode == 20, % mouse functionality
cur_axs = []; cur_obj = gco;
cur_par = get(cur_obj,'parent');
if ~isempty(cur_par)
if cur_par == f,
cur_axs = cur_obj;
else
cur_axs = cur_par;
end
end
if isempty(cur_axs),dtsimgui(16);return,end
if any(cur_axs == [sig_axs,opr_axs]),
axes(cur_axs);
tit_str = get(get(cur_axs,'title'),'string');
axs_pos = get(cur_axs,'pos');
if axs_pos(4) == 155, % need to maximize
set([sig_axs,opr_axs],'vis','off');
set(cur_axs,'pos',[210,50,390,360],'vis','on');
set(stat_bar,'string',[tit_str,' axis maximized.']);
else % minimization
set(sig_axs,'pos',[210,260,390,155],'vis','on');
set(opr_axs,'pos',[210,50,390,155],'vis','on');
set(stat_bar,'string',[tit_str,' axis minimized.']);
end
else
dtsimgui(16);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -