接着上一节描述
1.4 数据格式Data Format
数据格式是描述第4部分“几何/拓补部分”的内容。
VTK支持5中数据格式:structured points结构化点、structured grid结构化网格、 rectilinear grid直线网格、unstructured grid非结构化网格、和polygonal data多边形数据。具有隐式拓扑的数据(结构化数据,如vtkImageData和vtkStructuredGrid)的顺序是x增长最快,然后是y,然后是z。这些格式如下。
1.4.1 Structured Points
Structured Points结构化点
VTK文件支持一维、二维和三维的结构化点数据集,维度nx、ny和nz必须大于或等于1。数据间隔(spacing) sx、sy和sz必须大于0。在VTK文件1.0版本中,间隔用纵横比(ASPECT_RATIO)属性表示,纵横比属性在2.0版本也能使用,但是不推荐使用。
例子:
DATASET STRUCTURED_POINTS
DIMENSIONS nx ny nz
ORIGIN x y z
SPACING sx sy yz
1.4.2 Structured Grid
Structured Grid结构化网格
VTK文件格式支持1维、2维和3维结构化网格数据集。维度nx、ny、nz必须大于或等于1。点坐标由POINTS部分中的数据定义,它包括每个点的x-y-z数据值。
DATASET STRUCTURED_GRID
DIMENSIONS nx ny nz
POINTS n dataType
p0x p0y p0z
p1x p1y p1z
...
p(n-1)x p(n-1)y p(n-1)z
1.4.3 Rectilinear Grid
Rectilinear Grid线性网格
线性网格定义了有规则拓扑和半规则几何体的数据集。几何体定义了三个坐标值单调递增的列表,每一个列表值对应x-y-z坐标轴。拓补结构指定了网格维度,它必须大于或者等于1。
例子:
DATASET RECTILINEAR_GRID
DIMENSIONS nx ny nz
X_COORDINATES nx dataType
x0 x1 ... x(nx-1)
Y_COORDINATES ny dataType
y0 y1 ... y(ny-1)
Z_COORDINATES nz dataType
z0 z1 ... z(nz-1)
1.4.4 Polygonal Data
Polygonal Data多边形数据
多边形数据集由曲面图形图元顶点(和多边形点)、直线(和多段线)、多边形(各种类型)和三角形带的任意组合组成。多边形数据由POINTS、VERTICES、LINES、POLYGONS或TRIANGLE_STRIPS部分定义。POINTS和Structured Grid数据集中的POINTS相同。VERTICES、LINES、POLYGONS和TRIANGLE_STRIPS定义多边形数据集拓补结构。每一个关键词,需要两个参数:单元的数量和单元列表的大小。单元格列表大小是表示列表所需的整数值的总数。这些关键词VERTICES、LINES、POLYGONS和TRIANGLE_STRIPS并不是必须的。
例子:
DATASET POLYDATA
POINTS n dataType
p0x p0y p0z
p1x p1y p1z
...
p(n-1)x p(n-1)y p(n-1)z
VERTICES n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
LINES n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
POLYGONS n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
TRIANGLE_STRIPS n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
1.4.5 Unstructured Grid
Unstructured Grid非结构化网格
非结构化网格数据集由任何可能的单元类型的任意组合组成。非结构化网格定义了点(POINTS)、单元(CELLS)和单元类型(CELL TYPES)。关键词CELLS需要两个参数:单元的数量n和单元列表的大小size。n表示单元有多少行数据,size是所有行中元素个数的总和,所以size是一个整数。关键词CELL_TYPES需要一个参数:单元的数量。CELL_TYPES参数必须和CELLS的数量相等。
例子:
DATASET UNSTRUCTURED_GRID
POINTS n dataType
p0x p0y p0z
p1x p1y p1z
...
p(n-1)x p(n-1)y p(n-1)z
CELLS n size
numPoints0, i0, j0, k0, ...
numPoints1, i1, j1, k1, ...
numPoints2, i2, j2, k2, ...
...
numPointsn-1, in-1, jn-1, kn-1, ...
CELL_TYPES n
type0
type1
type2
...
typen-1
1.4.6 Field
Field场
场数据是一个没有几何、拓补结构和特定的维度的通用格式。典型的场关联数据集的点和单元。如果场类型被指定,那么VTK数据对象也会被定义。(下面的内容对场做进一步的描述)
1.2 数据属性Dataset Attribute Format
VTK支持如下的数据集属性:scalars标量(一到四个分量)、vectors向量、normals法线、texture coordinates纹理坐标(1D、2D和3D)、tensors张量和field data场数据。另外,还有一个使用RGBA颜色指定的查询表(lookup table)关联标量数据。数据属性支持POINTS点和CELLS单元。
每种类型的属性数据都有一个与其关联的数据名称。这个名称,是一个没有空格的字符串,用于标识特定数据。这个名称也用于VTK读取器提取数据。因此,在VTK文件中,一个数据格式类型(1.4节的Data Format)可以有多个属性数据。例如,在一个VTK 文件中,在数据集点POINTS上定义的两个不同标量场属性,压力场和温度场。如果在VTK读取器中没有指定的数据属性名,则从文件中提取该类型的第一个数据。
1.5.1 Scalars
标量Scalars
标量包括指定的一个查找表(lookup table)。查找表是可选的。如果未指定查询表,VTK将使用默认的表(表名称应为“default”)。还要注意,Scalars的numComp变量属性,是可选的,默认值为1。(numComp的值必须在1~4之间,在VTK 2.3之前的版本不支持该参数)
例子:
SCALARS dataName dataType numComp
LOOKUP_TABLE tableName
s0
s1
...
sn-1
颜色标量color scalars的定义(即,直接映射到颜色的无符号字符值)取决于每个标量的值(nValue)数量。如果文件格式是ASCII,颜色标量color scalars使用nValues的0~1之间的浮点值。如果文件格式是BINARY,数据流由每个标量值的nValues无符号字符值组成。
例子:
COLOR_SCALARS dataName nValues
c00 c01 ... c0(nValues-1)
c10 c11 ... c1(nValues-1)
...
c(n-1)0 c(n-1)1 ... c(n-1)(nValues-1)
1.5.2 Lookup Table
查询表Lookup Table
一个字符串作为表名称字段,用于查询表的标识符ID。这个标识符用于VTK读取器提取指定的表。查询表中每一行都是一个rgba[4]数组,该数组代表红-绿-蓝-透明度alpha,alpha等于0时,表示透明。如果文件格式为ASCII,查询表中的值必须是0~1的浮点数。如果文件是BINARY,流数据必须是unsigned char值。
例子:
LOOKUP_TABLE tableName size
r0 g0 b0 a0
r1 g1 b1 a1
...
rsize-1 gsize-1 bsize-1 asize-1
1.5.3 Vectors
向量Vectors
例子:
VECTORS dataName dataType
v0x v0y v0z
v1x v1y v1z
...
v(n-1)x v(n-1)y v(n-1)z
1.5.4 Normals
法线Normals
法线被归一化为1,|n|=1
例子:
NORMALS dataName dataType
n0x n0y n0z
n1x n1y n1z
...
n(n-1)x n(n-1)y n(n-1)z
1.5.5 Texture Coordinates
纹理坐标Texture Coordinates
支持1维、2维和3维的纹理坐标。
例子:
NORMALS dataName dataType
n0x n0y n0z
n1x n1y n1z
...
n(n-1)x n(n-1)y n(n-1)z
1.5.6 Tensors
张量Tensors
目前仅支持实数值对称张量
TENSORS dataName dataType
t000 t001 t002
t010 t011 t012
t020 t021 t022
t100 t101 t102
t110 t111 t112
t120 t121 t122
...
tn - 100 tn - 101 tn - 102
tn - 110 tn - 111 tn - 112
tn - 120 tn - 121 tn - 122
1.5.7 Field Data
场数据Field Data
场数据的本质是数据数组的数组。定义场数据,需要定一个场的名称和场数组的数量。如下例所示,数组名称是arrayName(i),可以把数组理当作一个矩阵,或者一个二维数组。矩阵的列数是numComponents,矩阵的行数是numTuples,矩阵中的数据类型是dataType。
例子:
FIELD dataName numArrays
arrayName0 numComponents numTuples dataType
f00 f01 ... f0(numComponents-1)
f10 f11 ... f1(numComponents-1)
...
f(numTuples-1)0 f(numTuples-1)1 ... f(numTuples-1)(numComponents-1)
arrayName1 numComponents numTuples dataType
f00 f01 ... f0(numComponents-1)
f10 f11 ... f1(numComponents-1)
...
f(numTuples-1)0 f(numTuples-1)1 ... f(numTuples-1)(numComponents-1)
...
arrayName(numArrays-1) numComponents numTuples dataType
f00 f01 ... f0(numComponents-1)
f10 f11 ... f1(numComponents-1)
...
f(numTuples-1)0 f(numTuples-1)1 ... f(numTuples-1)(numComponents-1)