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

📄 plotdif.m

📁 低矮房屋风压系数、风荷载计算分析matlab程序
💻 M
📖 第 1 页 / 共 3 页
字号:
%     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 + -