最近学了一下vtk文件的格式, 做一个小结。文中用方括号标示出来的文字是根据实际需要自己定义的部分,其他的如DATASET, POINTS,CELLS等是vtk本身的格式要求一部分。
这是强制的一句话,说明文件版本
# vtk DataFile Version 3.0
不重要,相当于自己其一个标题,以回车结束,最多256个字符
文件格式,ASCII
或者 BINARY
于是前面三部分可以写为
# vtk DataFile Version 3.0
[VTKtitle]
ASCII
DATASET [format]
format
表示数据的格式,可以是
例如,如果是非结构网格的话,就写DATASET UNSTRUCTURED_GRID
。这里的非结构网格不一定是四面体或三角形网格,只要是没有规则的都能用UNSTRUCTURED GRID表示,比如一个三角形和一个六面体的混合。
如果是UNSTRUCTURED_GRID
, 那么接下来就需要指定节点和单元
POINTS [n] [dataType] (#n_point#域填入实际的点数, dataType为double float等类型)
[x_0] [y_0] [z_0]
[x_1] [y_1] [z_1]
[x_0] [y_0] [z_0]
然后是单元声明
CELLS [n_cells] [n_list] #n_cells填入单元个数,n_list填入列表的数字的总数)
[单元0顶点数量] [单元0顶点0的编号] [单元0顶点1的编号] [单元0顶点2的编号] ...
[单元1顶点数量] [单元1顶点0的编号] [单元1顶点1的编号] [单元1顶点2的编号] ...
.
.
.
CELL_TYPES [n_cells] #n_cells与前面CELLS那一块的n_cells必须一样
[单元0类型] #表示几何类型的整数,参考vtk的文档,比如四面体是10,六面体是11
[单元1类型]
.
.
.
有两种:节点上的值和单元上的值,分别用POINT_DATA
和 CELL_DATA
表示。可以表示多个物理量,物理量可以是标量(scalar),向量(vector),或者是张量(tensor)。
POINT_DATA [n]
[数据]
CELL_DATA [n]
[数据]
上述格式中,数据可以是SCALAR,VECTOR或TENSOR,不同类型的数据需要不同的格式
SCALARS [dataName] [dataType] [numComp] #dataName数据名字,dataType是double之类的,numComp一般是1
LOOKUP_TABLE [tableName] #tableName表名
s_0
s_1
...
s_n-1
(1)一个最简单的示例
下面的vtk文件定义了一个六面体,顶点为(0,0,0), (50,0,0), (0,50,0), (50,50,0), (0,0,50), (50,0,50), (0,50,50), (50,50,50).
注意:构成一个单元的节点的排列顺序一定要按照vtk文档所定义的,不同几何体节点编号也不一样
# vtk DataFile Version 3.0
Right rectangular prisms grid
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 8 double
0 0 0
50 0 0
0 50 0
50 50 0
0 0 50
50 0 50
0 50 50
50 50 50
CELLS 1 9
8 0 1 2 3 4 5 6 7
CELL_TYPES 1
11
CELL_DATA 1
SCALARS density double 1
LOOKUP_TABLE table1
1
SCALARS resistivity double 1
LOOKUP_TABLE table2
2
SCALARS temperature double 1
LOOKUP_TABLE table3
3
SCALARS susceptibility double 1
LOOKUP_TABLE table4
4
SCALARS permittivity double 1
LOOKUP_TABLE table4
4
(2) 一个六面体网格示例
一个六面体网格的模型, 用paraview显示