You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.6 KiB

3 years ago
%--------------------------
% @Author: Jingqiao Hu
% @Date: 2021-03-18 18:17:09
% @LastEditTime: 2021-03-18 21:42:10
% vtk: edofMat:
% y 4-----5 3-----2
% | /| /| /| /|
% 0---x 7-0---6 1 7-0---6 1
% / | |/ | |/
% z 3-----2 4-----5
%--------------------------
function voxel2vtk(filename, nodes, eles)
delete(filename);
fidOUT = fopen(filename, 'w');
fprintf(fidOUT, '# vtk DataFile Version 2.0\n');
fprintf(fidOUT, 'Unstructured Grid Example\n');
fprintf(fidOUT, 'ASCII\n');
fprintf(fidOUT, 'DATASET UNSTRUCTURED_GRID\n');
nodes_num = size(nodes, 1);
fprintf(fidOUT, 'POINTS %i float\n', nodes_num);
for i = 1:nodes_num
fprintf(fidOUT, '%f %f %f\n', nodes(i,1), nodes(i,2), nodes(i,3));
end
eles_num = size(eles, 1);
eles_size = eles_num * 9;
fprintf(fidOUT, 'CELLS %i %i\n', eles_num, eles_size);
for ele = 1:eles_num
nid0 = eles(ele, :);
nid = vtk_order(nid0) - 1;
fprintf(fidOUT, '%i %i %i %i %i %i %i %i %i\n', 8, nid(1), nid(2), nid(3), nid(4), nid(5), nid(6), nid(7), nid(8));
end
fprintf(fidOUT, 'CELL_TYPES %i\n', eles_num);
for ele = 1:eles_num
fprintf(fidOUT, '12\n');
end
fprintf(fidOUT, 'POINT_DATA %i\n', nodes_num);
fclose(fidOUT);
end
% change the nodes's order of edofMat to vtk
function node = vtk_order(node_id)
node = node_id;
node([0,1,6,7]+1) = node_id([0,1,6,7]+1);
node([3,2]+1) = node_id([4,5]+1);
node([4,5]+1) = node_id([3,2]+1);
end