📄 plotdif.m
字号:
% set(all_radio, 'Visible','off','Enable','inactive');
% symbol_list = {'+','x','s','d','*','^','v','>','<'};
% % symbol_list = {'b.','r.','g.','c.','m.','y.'};
% end
legend_ckbox = uicontrol(menuB, 'Style','checkbox','String','Show legend with plot',...
'Units','characters','Value',1,'Position',[2 B-18.5 mw-4 1.5],'Callback',@FrameSelectCallback);
theta_txt = uicontrol(menuC,'BackgroundColor',clr, 'Style', 'text', 'String','Select wind direction:',...
'HorizontalAlignment','left','Units','characters','Position',[2 C-3.5 mw-4 1.5]);
theta_popup = uicontrol(menuC, 'Style', 'popupmenu', 'String',theta_label,'Value',q,...
'Units','characters','Position',[2 C-5 mw-4 1.5],'BackgroundColor','w','Callback',@WindDirCallback );
loadsym_label{1} = 'Averaged loading';
if isfield(DIF_struct,'load_max_all') && ~isempty(DIF_struct.load_max_all)
load_max_all = DIF_struct.load_max_all;
load_min_all = DIF_struct.load_min_all;
theta_all = DIF_struct.theta_all;
n_qa = length(theta_all);
ind_a = 1:n_qa/4;
ind_b = n_qa/4+1:n_qa/2;
ind_c = n_qa/2+1:n_qa*3/4;
ind_d = n_qa*3/4+1:n_qa;
theta_a = theta_all(ind_a);
theta_b = theta_all(ind_b);
theta_c = theta_all(ind_c);
theta_d = theta_all(ind_d);
loadsym_ind = find(theta_all==theta(q));
for i = 1:length(loadsym_ind)
if loadsym_ind(i)<=n_qa/4
loadsym_label{i+1} = 'Wind direction A';
elseif loadsym_ind(i)<=n_qa/2
loadsym_label{i+1} = 'Wind direction B';
elseif loadsym_ind(i)<=n_qa*3/4
loadsym_label{i+1} = 'Wind direction C';
else
loadsym_label{i+1} = 'Wind direction D';
end
end
end
loadsym_txt = uicontrol(menuC,'BackgroundColor',clr, 'Style', 'text', 'String','Results obtained by exploiting model symmetry:',...
'HorizontalAlignment','left','Units','characters','Position',[2 C-7.5 mw-4 1.5]);
loadsym_popup = uicontrol(menuC, 'Style', 'popupmenu', 'String',loadsym_label,'Value',1,...
'Units','characters','Position',[2 C-9 mw-4 1.5],'BackgroundColor','w','Callback',@FrameSelectCallback );
loadinterp_txt = uicontrol(menuC,'BackgroundColor',clr, 'Style', 'text', 'String','Results obtained by interpolation:',...
'HorizontalAlignment','left','Units','characters','Position',[2 C-7.5 mw-4 1.5]);
loadinterp_popup = uicontrol(menuC, 'Style', 'popupmenu', 'String',loadinterp_label,'Value',1,...
'Units','characters','Position',[2 C-9 mw-4 1.5],'BackgroundColor','w','Callback',@FrameSelectCallback );
% determine whether to display interpolation or symmetry plotting options:
if n_m==1
set(loadinterp_txt, 'Visible','off','Enable','inactive');
set(loadinterp_popup, 'Visible','off','Enable','inactive');
else
set(loadsym_txt, 'Visible','off','Enable','inactive');
set(loadsym_popup, 'Visible','off','Enable','inactive');
load_max_bnd = DIF_struct.load_max_bnd;
load_min_bnd = DIF_struct.load_min_bnd;
end
loadpk_txt = uicontrol(menuC,'BackgroundColor',clr, 'Style', 'text', 'String','Load distribution producing:',...
'HorizontalAlignment','left','Units','characters','Position',[2 C-11 mw-4 1.5]);
loadmax_radio = uicontrol(menuC, 'Style','radiobutton','String','Maximum value','Value',1,...
'Units','characters','Position',[4 C-12.5 mw-6 1.5],'Callback',@LoadMaxCallback);
loadmin_radio = uicontrol(menuC, 'Style','radiobutton','String','Minimum value','Value',0,...
'Units','characters','Position',[4 C-14 mw-6 1.5],'Callback',@LoadMinCallback);
loadcirc_ckbox = uicontrol(menuC, 'Style','checkbox','String','Circle peak on DIF plot',...
'Units','characters','Value',1,'Position',[2 C-16 mw-4 1.5],'Callback',@FrameSelectCallback);
if ~isfield( DIF_struct, 'load_max' ) || isempty(DIF_struct.load_max)
set(load_panel,'Title', 'Load Distribution (none available)');
set(menuC,'Title', 'Load Distributions (none available)');
set(theta_txt, 'Enable','off');
set(theta_popup,'Value',1);
set(theta_popup, 'String',' ');
set(theta_popup, 'Enable','off');
set(loadsym_txt, 'Enable','off');
set(loadsym_popup, 'String',' ');
set(loadsym_popup, 'Enable','off');
set(loadinterp_txt, 'Enable','off');
set(loadinterp_popup, 'String',' ');
set(loadinterp_popup, 'Enable','off');
set(loadpk_txt, 'Enable','off');
set(loadmax_rad,'Value',0);
set(loadmax_rad,'Enable','off');
set(loadmin_rad,'Enable','off');
else
load_max = DIF_struct.load_max;
load_min = DIF_struct.load_min;
end
close_button = uicontrol(menuD, 'Style','pushbutton','String','Close',...
'Units','characters','Position',[.4*mw .5 13 1.5],'Callback','close');
UpdateDIFplot;
UpdateLoadPlot;
uiwait(fig);
% callback functions:
function FrameSelectCallback( src, event )
f = get( frame_popup, 'Value');
UpdateDIFplot;
UpdateLoadPlot;
end
function RespSelectCallback( src, event )
r = get( resp_popup, 'Value');
UpdateDIFplot;
UpdateLoadPlot;
end
function MaxCallback( src, event )
max_val = get( max_radio, 'Value');
if max_val==0
set( min_radio, 'Enable', 'inactive');
else
set( min_radio, 'Enable', 'on');
end
UpdateDIFplot;
UpdateLoadPlot;
end
function MinCallback( src, event )
min_val = get( min_radio, 'Value');
if min_val==0
set( max_radio, 'Enable', 'inactive');
else
set( max_radio, 'Enable', 'on');
end
UpdateDIFplot;
UpdateLoadPlot;
end
function AveCallback( src, event )
ave_val = get( ave_radio, 'Value');
if ave_val==0
set( all_radio, 'Enable', 'inactive');
else
set( all_radio, 'Enable', 'on');
end
UpdateDIFplot;
UpdateLoadPlot;
end
function AllCallback( src, event )
all_val = get( all_radio, 'Value');
if all_val==0
set( ave_radio, 'Enable', 'inactive');
else
set( ave_radio, 'Enable', 'on');
end
UpdateDIFplot;
UpdateLoadPlot;
end
function InterpCallback( src, event )
interp_val = get( interp_radio, 'Value');
if interp_val==0
set( intbnd_radio, 'Enable', 'inactive');
else
set( intbnd_radio, 'Enable', 'on');
end
UpdateDIFplot;
UpdateLoadPlot;
end
function IntBndCallback( src, event )
intbnd_val = get( intbnd_radio, 'Value');
if intbnd_val==0
set( interp_radio, 'Enable', 'inactive');
else
set( interp_radio, 'Enable', 'on');
end
UpdateDIFplot;
UpdateLoadPlot;
end
function ObsPksCallback( src, event )
obs_val = get( obs_radio, 'Value');
if obs_val==0
set( est_radio, 'Enable', 'inactive');
else
set( est_radio, 'Enable', 'on');
end
UpdateDIFplot;
UpdateLoadPlot;
end
function EstPksCallback( src, event )
est_val = get( est_radio, 'Value');
if est_val==0
set( obs_radio, 'Enable', 'inactive');
else
set( obs_radio, 'Enable', 'on');
end
UpdateDIFplot;
UpdateLoadPlot;
end
function WindDirCallback( src, event )
% wind direction selection change:
% check which symmetric wind directions are available
q = get(theta_popup, 'Value');
if strcmp(get(loadsym_popup,'Enable'),'on')
loadsym_ind = find(theta_all==theta(q));
loadsym_label = cell(1,length(loadsym_ind));
loadsym_label{1} = 'Averaged Loading';
for i = 1:length(loadsym_ind)
if loadsym_ind(i)<=n_qa/4
loadsym_label{i+1} = 'Wind Direction A';
elseif loadsym_ind(i)<=n_qa/2
loadsym_label{i+1} = 'Wind Direction B';
elseif loadsym_ind(i)<=n_qa*3/4
loadsym_label{i+1} = 'Wind Direction C';
else
loadsym_label{i+1} = 'Wind Direction D';
end
end
current_label = get(loadsym_popup, 'String');
if ~isempty(setxor(current_label,loadsym_label)) | length(current_label)~=length(loadsym_label)
set( loadsym_popup, 'Value',1);
end
set( loadsym_popup, 'String',loadsym_label);
end
UpdateDIFplot;
UpdateLoadPlot;
end
function LoadMaxCallback( src, event )
loadmax_val = get( loadmax_radio, 'Value');
if loadmax_val==1
set( loadmin_radio, 'Value', 0);
else
set( loadmin_radio, 'Value', 1);
end
UpdateDIFplot;
UpdateLoadPlot;
end
function LoadMinCallback( src, event )
loadmin_val = get( loadmin_radio, 'Value');
if loadmin_val==1
set( loadmax_radio, 'Value', 0);
else
set( loadmax_radio, 'Value', 1);
end
UpdateDIFplot;
UpdateLoadPlot;
end
function UpdateDIFplot(src, event)
axes(DIF_axes);
cla reset;
DIF_legend = {};
count = 1;
if get(obs_radio, 'Value')
if get(ave_radio,'Value')
if get(max_radio, 'Value') & get(min_radio, 'Value')
plot(DIF_axes,[theta; theta],[X_max_obs(r,:,f) X_min_obs(r,:,f)],'k.'); hold on;
DIF_legend{count} = 'Obs Max/Min'; count = count+1;
elseif get(max_radio, 'Value')
plot(DIF_axes,theta,X_max_obs(r,:,f),'k.'); hold on;
DIF_legend{count} = 'Obs Max'; count = count+1;
elseif get(min_radio, 'Value')
plot(DIF_axes,theta,X_min_obs(r,:,f),'k.'); hold on;
DIF_legend{count} = 'Obs Min'; count = count+1;
end
end
if get(all_radio,'Value')
if get(max_radio, 'Value') & get(min_radio, 'Value')
plot(DIF_axes,[theta_a; theta_a],[X_max_obs_all(r,ind_a,f) X_min_obs_all(r,ind_a,f)],'k+'); hold on;
DIF_legend{count} = 'Obs Max/Min A'; count = count+1;
plot(DIF_axes,[theta_b; theta_b],[X_max_obs_all(r,ind_b,f) X_min_obs_all(r,ind_b,f)],'ks'); hold on;
DIF_legend{count} = 'Obs Max/Min B'; count = count+1;
plot(DIF_axes,[theta_c; theta_c],[X_max_obs_all(r,ind_c,f) X_min_obs_all(r,ind_c,f)],'kx'); hold on;
DIF_legend{count} = 'Obs Max/Min C'; count = count+1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -