📄 plot_structure.m
字号:
%*****************************************************************
% function plot_structure
%
% plot out structure, loads and constraints
%*****************************************************************
function plot_structure(Geom,BCs,solution_vector)
% pad coord data for 1D plotting
if length( Geom.Nodes(1).coord ) == 1
for inod = 1:Geom.nnodes
Geom.Nodes(inod).coord(2) = 0;
end
end
% plot original elements
clf % clear current plot window
axis equal
%Nodes_e = [Geom.Nodes( Geom.ElemData(iel).connect(:) )];
%coor = [Geom.Nodes( Geom.ElemData(iel).connect(:) ).coord]
for iel = 1:Geom.nelems
elemType = Geom.ElemData(iel).elemType;
nnodes = Geom.ElemType(elemType).nnodes;
for inod = 1:nnodes
X_e(inod) = Geom.Nodes( Geom.ElemData(iel).connect(inod) ).coord(1);
Y_e(inod) = Geom.Nodes( Geom.ElemData(iel).connect(inod) ).coord(2);
end
patch(X_e, Y_e, 'b','Edgecolor','b','FaceColor','none')
end
if ~isempty(solution_vector)
if Geom.ndofs_node == 1 % colinear spring elements
for inod = 1:Geom.nnodes;
coordnew(inod,:) = Geom.Nodes(inod).coord;
end
title_string = Geom.title;
else % determine scaling for displaced nodes
maxdisp = max(abs(solution_vector));
axissize = axis;
scale_factor = (axissize(2) - axissize(1))/maxdisp*0.03;
% create new displaced scaled nodal positions
for inod = 1:Geom.nnodes
coordnew(inod,1) = Geom.Nodes(inod).coord(1) + ...
solution_vector( Geom.ndofs_node*(inod-1) + 1 )*scale_factor;
coordnew(inod,2) = Geom.Nodes(inod).coord(2) +...
solution_vector( Geom.ndofs_node*(inod-1) + 2 )*scale_factor;
end
% plot displaced elements
for iel = 1:Geom.nelems
patch( coordnew(Geom.ElemData(iel).connect(:), 1),...
coordnew(Geom.ElemData(iel).connect(:), 2),...
[0 0.75 1],'LineStyle',':','FaceAlpha',0.1,'Edgecolor','b')
end
title_string = strcat(Geom.title,'; [deflection scale factor: ',...
num2str(scale_factor),']');
end
else
for inod = 1:Geom.nnodes;
coordnew(inod,:) = Geom.Nodes(inod).coord;
end
title_string = Geom.title;
end
% display element numbers
for iel = 1:Geom.nelems
meanx = mean(coordnew( Geom.ElemData(iel).connect(:), 1));
meany = mean(coordnew( Geom.ElemData(iel).connect(:), 2));
text(meanx, meany, int2str(iel),'color','r');
end
% display node numbers
axissize = axis; % determine offsets for numbering
dx = (axissize(2) - axissize(1))/60;
for inod = 1:Geom.nnodes
text(coordnew(inod,1) + dx,coordnew(inod,2) - dx, int2str(inod),'color','k');
end
% show constraint symbols
hold on % hold current graph or it disappears with plot command
for ic = 1:BCs.nnodeConstraint
nodenum = BCs.NodeConstraint(ic).nodeID;
p = [0 -1.5 -1.5; 0 0.7 -0.7];
if BCs.NodeConstraint(ic).dof == 2 % i.e. y direction
p = flipud(p);
end
patch(p(1,:)*dx+coordnew(nodenum,1),p(2,:)*dx+coordnew(nodenum,2),...
'm','EdgeColor','m','FaceColor','none')
end
% show load symbols
for il = 1:BCs.npointLoads
loadnum = BCs.PointLoad(il).nodeID;
p(1,:)=abs((BCs.PointLoad(il).value<0)*5 - [5 3.8 3.8]);
p(2,:) = [0 0.6 -0.6];
if BCs.PointLoad(il).dof == 1 % lines in x direction
line([coordnew(loadnum,1) + 5*dx coordnew(loadnum,1)], ...
[coordnew(loadnum,2) coordnew(loadnum,2)],'color','m')
else % line in y direction
line([coordnew(loadnum,1) coordnew(loadnum,1)], ...
[coordnew(loadnum,2) + 5*dx coordnew(loadnum,2)],'color','m')
p(2,:) = -p(2,:);
p = flipud(p);
end
patch(p(1,:)*dx+coordnew(loadnum,1),p(2,:)*dx+coordnew(loadnum,2),...
'm','EdgeColor','m','FaceColor','m')
end
title(title_string)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -