📄 ctsysgui.m
字号:
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-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
if ~isstr(xn_str),
errordlg('Signal is not a string expression.','Input Error');
return
end
end
r_str = get(ui(13),'string');
n = eval(['[',r_str,']']);
dn=str2num(get(ui(19),'string'));
if isempty(dn),dn=0.01;end
t = n(1):dn: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(t) & 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...');
ctsigedt(1);
ctsigplt(1);
ctsysplt;
elseif mode == 3, % Reset
if get(resp_btn,'value')
ctsysplt
end
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 minn~=0
errordlg('Starting index of plot reange must be 0.','Input Error');
set(ui(9),'string',get(ui(9),'userdata'));
return;
end
set(ui(13),'string',n_str);
d_str = get(ui(19),'string');
if isempty(d_str)
errordlg(['No time-step specified!'],'Input Error');
return;
end
dn = eval(['[',d_str,']']);
if length(dn) ~= 1 | dn <= 0,
errordlg(['Time step must be a positive scalar'],'Input Error');
return;
end
ctsigplt(2);
ctsysplt;
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','ctsysgui(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
%%%%%% PASTE AT END before last end statement %%%%%%%%%%%%%
elseif mode == 15, %Export data
set(resp_btn,'value',1);ctsysplt;
ostr=get(ui(48),'string');oval=get(ui(48),'value');ostr=ostr(oval,:);
str1='Export input signal x(t) as';
str2=['Export ' ostr ' response y(t) as'];
str3='Export time index for x(t) and y(t) as';
str4='Export symbolic form for y(t) as';
exp_str={str1,str2,str3,str4};
exp_var={'inputx','outputy','timeind','symby'};
expect=inputdlg(exp_str,'Save Variables as',1,exp_var);
if ~isempty(expect)
htx=get(ui(8),'userdata');
hnm=get(ui(65),'userdata');
hsym=get(ui(66),'userdata');
if ~isempty(expect{1}),assignin('base',expect{1},htx(2,:));end
if ~isempty(expect{2}),assignin('base',expect{2},hnm);end
if ~isempty(expect{3}),assignin('base',expect{3},htx(1,:));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),ctsysgui(16);
else
set(curs_btn,'value',0);
ctsysgui(9); %%% REPLACE number BY CURSOR MODE
if any(cur_axs==ui([29,32])),%%%% CHANGE UI numbers
if cur_axs==ui(29),txt='Input x(t)';%%%% CHANGE UI numbers
elseif cur_axs==ui(32),txt='Output y(t)';%%%% CHANGE UI numbers
end
axlimdlg(txt,[1 1]); %[1 1]=auto +linear/log, [1 0]=auto, no linear/log
else
ctsysgui(16);
end
end
elseif mode == 18, % zoom on
set(curs_btn,'value',0);
ctsysgui(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);
ctsysgui(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),ctsysgui(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-5,390,155],'vis','on');
set(opr_axs,'pos',[210,50,390,155],'vis','on');
% set(stat_bar,'string',[tit_str,' axis minimized.']);
end
else
ctsysgui(16);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -