📄 plot_fem_data.m
字号:
function plot_fem_data(in_data,PND)
% plot input object on GUI main form
if in_data.EL(1,2)==0 | in_data.EL(1,2)==1 | in_data.EL(1,2)==2 ...
| in_data.EL(1,2)==31 dofN = 3; end;
if in_data.EL(1,2)==3 dofN = 6; end;
if in_data.EL(1,2)==4 dofN = 2; end;
if in_data.EL(1,2)==5 | in_data.EL(1,2)==51 dofN = 2; end;
if in_data.EL(1,2)==6 dofN = 3; end;
if in_data.EL(1,2)==9 dofN = 3; end;
if in_data.EL(1,2)==10 dofN = 3; end;
if in_data.EL(1,2)==44 dofN = 1; end;
dof_ = size(in_data.ND,1)*dofN;
if in_data.EL(1,2)==9
plot_bend_data ( in_data, dof_, 120, PND);
end;
if in_data.EL(1,2)==4 | in_data.EL(1,2)==5 | in_data.EL(1,2)==51
plot_CSTQ_input( in_data, dof_, 110, PND );
end;
if in_data.EL(1,2)==3 | in_data.EL(1,2)==31
plot_3Dframe_input(in_data,PND);
end;
if in_data.EL(1,2)==6
plot_input_brick (in_data, dof_,PND);
end;
if in_data.EL(1,2)==0 | in_data.EL(1,2)==1 | in_data.EL(1,2)==2
plot_input_2dbeam (in_data,PND);
end;
if in_data.EL(1,2)==10
plot_input_tetrah (in_data, dof_,PND);
end;
if in_data.EL(1,2)==44
plot_heat_CST_input (in_data, dof_, 110, PND);
end;
% plot functions ----------------------------------------------------------
function plot_input_2dbeam (in_data,PND)
hold off;
maxX = max(in_data.ND(:,2)); minX = min(in_data.ND(:,2));
maxY = max(in_data.ND(:,3)); minY = min(in_data.ND(:,3));
labx = (maxX / 9); laby = (maxY / 9);
labx = min([labx laby]); laby = labx;
xL = [0:0.05:1]';
N = length(xL);
oo = ones(N,1);
for i=1:size(in_data.LOAD_)
node_i = find(in_data.ND(:,1)==in_data.LOAD_(i,1));
if in_data.LOAD_(i,2)~=0 & in_data.LOAD_(i,2)>0
plot([in_data.ND(node_i,2) in_data.ND(node_i,2)+labx],[in_data.ND(node_i,3) in_data.ND(node_i,3)],...
'r-','LineWidth',3); hold on;
end;
if in_data.LOAD_(i,2)~=0 & in_data.LOAD_(i,2)<0
plot([in_data.ND(node_i,2) in_data.ND(node_i,2)-labx],[in_data.ND(node_i,3) in_data.ND(node_i,3)],...
'r-','LineWidth',3); hold on;
end;
if in_data.LOAD_(i,3)~=0 & in_data.LOAD_(i,3)>0
plot([in_data.ND(node_i,2) in_data.ND(node_i,2)],[in_data.ND(node_i,3) in_data.ND(node_i,3)+laby],...
'r-','LineWidth',2); hold on;
end;
if in_data.LOAD_(i,3)~=0 & in_data.LOAD_(i,3)<0
plot([in_data.ND(node_i,2) in_data.ND(node_i,2)],[in_data.ND(node_i,3) in_data.ND(node_i,3)-laby],...
'r-','LineWidth',3); hold on;
end;
end;
for i=1:size(in_data.CON)
node_i = find(in_data.ND(:,1)==in_data.CON(i,1));
if in_data.CON(i,2)==0
plot([in_data.ND(node_i,2) in_data.ND(node_i,2)-labx],[in_data.ND(node_i,3) in_data.ND(node_i,3)],...
'g-','LineWidth',2); hold on;
end;
if in_data.CON(i,3)==0
plot([in_data.ND(node_i,2) in_data.ND(node_i,2)],[in_data.ND(node_i,3) in_data.ND(node_i,3)-laby],...
'g-','LineWidth',2); hold on;
end;
if in_data.CON(i,4)==0
plot([in_data.ND(node_i,2) in_data.ND(node_i,2)],[in_data.ND(node_i,3) in_data.ND(node_i,3)],...
'gs','LineWidth',2); hold on;
end;
end;
axis([(minX-labx) (maxX+labx) (minY-laby) (maxY+laby)]); % plot scale
dof = size(in_data.ND,1)*3; % total dof
plot(in_data.ND(:,2),in_data.ND(:,3),'y.','Markersize',2);
axis equal; axis off; hold on;
for i=1:size(in_data.EL)
node1 = find(in_data.ND(:,1)==in_data.EL(i,3));
node2 = find(in_data.ND(:,1)==in_data.EL(i,4));
% plot uniformly distributed load
x1 = in_data.ND(node1,2); y1 = in_data.ND(node1,3);
x2 = in_data.ND(node2,2); y2 = in_data.ND(node2,3);
L = sqrt( (x2-x1)^2 + (y2-y1)^2 ) ;
c = (x2-x1) / L;
s = (y2-y1) / L;
T = [ c s 0 0 0 0 ;
-s c 0 0 0 0 ;
0 0 1 0 0 0 ;
0 0 0 c s 0 ;
0 0 0 -s c 0 ;
0 0 0 0 0 1 ];
v = zeros(6,1);
u = T*v;
ld = L + u(4) - u(1);
x = u(1) + xL*ld;
xd = [ x x.*0 ] * [ c s ; -s c ];
xn = [ x ones(21,1)*labx*0.5 ] * [ c s ; -s c ];
if isfield(in_data,'q')
if in_data.q(i)~=0
plot(x1+xn(:,1),y1+xn(:,2),'r:');
end;
end
plot([in_data.ND(node1,2) in_data.ND(node2,2)], ...
[in_data.ND(node1,3) in_data.ND(node2,3)],'Color',[0.4 0.1 0.7],'LineWidth',1);
if PND == 1
h=text(in_data.ND(node1,2) , in_data.ND(node1,3), num2str(node1));
set(h,'FontSize',8); set(h,'Color','k');
h=text(in_data.ND(node2,2) , in_data.ND(node2,3), num2str(node2));
set(h,'FontSize',8); set(h,'Color','k');
x1= (in_data.ND(node2,2)-in_data.ND(node1,2))/1.8 + in_data.ND(node1,2);
y1= (in_data.ND(node2,3)-in_data.ND(node1,3))/1.8 + in_data.ND(node1,3);
h=text(x1 , y1, num2str(in_data.EL(i,1))); set(h,'FontSize',6); set(h,'Color','m');
end;
end;
h=title('Input model'); set(h,'FontSize',12);
rotate3d(gca); set(gcf,'Pointer','arrow');
hold off;
% -------------------------------------------------------------------------
function plot_bend_data ( in_data, dof, NF,PND)
hold off;
if 1
maxX = max(in_data.ND(:,2));
minX = min(in_data.ND(:,2));
maxY = max(in_data.ND(:,3));
minY = min(in_data.ND(:,3));
labx = (maxX / 15); laby = (maxY / 15);
labx = min([labx laby]); laby = labx;
SCz = 1; labz = SCz/4;
if NF > 100
for i=1:size(in_data.LOAD_)
node_i = find(in_data.ND(:,1)==in_data.LOAD_(i,1));
if in_data.LOAD_(i,3)~=0 & in_data.LOAD_(i,3)>0
plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)+labx],...
[in_data.ND(node_i,3) in_data.ND(node_i,3)],[0 0],'r-','LineWidth',2); hold on;
end;
if in_data.LOAD_(i,3)~=0 & in_data.LOAD_(i,3)<0
plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)-labx],...
[in_data.ND(node_i,3) in_data.ND(node_i,3)],[0 0],'r-','LineWidth',2); hold on;
end;
if in_data.LOAD_(i,4)~=0 & in_data.LOAD_(i,4)>0
plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
[in_data.ND(node_i,3) in_data.ND(node_i,3)+laby],[0 0],'r-','LineWidth',2); hold on;
end;
if in_data.LOAD_(i,4)~=0 & in_data.LOAD_(i,4)<0
plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
[in_data.ND(node_i,3) in_data.ND(node_i,3)-laby],[0 0],'r-','LineWidth',2); hold on;
end;
if in_data.LOAD_(i,2)~=0 & in_data.LOAD_(i,2)>0
plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
[in_data.ND(node_i,3) in_data.ND(node_i,3)],[0 labz],'r-','LineWidth',2); hold on;
end;
if in_data.LOAD_(i,2)~=0 & in_data.LOAD_(i,2)<0
plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
[in_data.ND(node_i,3) in_data.ND(node_i,3)],[0 -labz],'r-','LineWidth',2); hold on;
end;
end;
for i=1:size(in_data.CON)
node_i = find(in_data.ND(:,1)==in_data.CON(i,1));
if in_data.CON(i,3)==0
plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)-labx],...
[in_data.ND(node_i,3) in_data.ND(node_i,3)], [0 0],'g-','LineWidth',2); hold on;
end;
if in_data.CON(i,4)==0
plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
[in_data.ND(node_i,3) in_data.ND(node_i,3)-laby], [0 0],'g-','LineWidth',2); hold on;
end;
if in_data.CON(i,2)==0
plot3([in_data.ND(node_i,2) in_data.ND(node_i,2)],...
[in_data.ND(node_i,3) in_data.ND(node_i,3)], [0 labz],'g-','LineWidth',2); hold on;
end;
end;
end; % -- end if NF > 100
plot(in_data.ND(:,2),in_data.ND(:,3),'y.','Markersize',2);
axis equal; axis off; view(3); hold on;
for i=1:size(in_data.EL)
if in_data.EL(i,2)==9 % "9" - BCIZ element (bending triangle)
node1 = find(in_data.ND(:,1)==in_data.EL(i,3));
node2 = find(in_data.ND(:,1)==in_data.EL(i,4));
node3 = find(in_data.ND(:,1)==in_data.EL(i,5));
plot3([in_data.ND(node1,2) in_data.ND(node2,2) in_data.ND(node3,2) in_data.ND(node1,2)], ...
[in_data.ND(node1,3) in_data.ND(node2,3) in_data.ND(node3,3) in_data.ND(node1,3)],...
[0 0 0 0],'Color',[0.4 0.1 0.7],'LineWidth',1);
if PND == 1
h=text(in_data.ND(node1,2) , in_data.ND(node1,3), 0, num2str(node1)); set(h,'FontSize',8);
set(h,'Color','k');
h=text(in_data.ND(node2,2) , in_data.ND(node2,3), 0, num2str(node2)); set(h,'FontSize',8);
set(h,'Color','k');
h=text(in_data.ND(node3,2) , in_data.ND(node3,3), 0, num2str(node3)); set(h,'FontSize',8);
set(h,'Color','k');
x1= in_data.ND(node1,2)/3 + in_data.ND(node2,2)/3 + in_data.ND(node3,2)/3;
y1= in_data.ND(node1,3)/3 + in_data.ND(node2,3)/3 + in_data.ND(node3,3)/3;
h=text(x1 , y1, 0, num2str(in_data.EL(i,1))); set(h,'FontSize',6); set(h,'Color','m');
end;
end;
end;
end;
% =========END
axis([(-1.1*minX) (1.1*maxX) (-1.1*minY) (1.1*maxY) (-SCz) (SCz)]);
h=title('Input model'); set(h,'FontSize',12);
rotate3d(gca); set(gcf,'Pointer','arrow');
hold off;
% --------------------------------------------------------------------------------
function plot_CSTQ_input ( in_data, dof, NF, PND)
hold off;
if 1
maxX = max(in_data.ND(:,2)); minX = min(in_data.ND(:,2));
maxY = max(in_data.ND(:,3)); minY = min(in_data.ND(:,3));
labx = abs(maxX / 15); laby = abs(maxY / 15);
labx = max([labx laby]); laby = labx;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -