paraview数据文件格式PVD 和VTK数据文件格式

目录

1.VTK(Visualization ToolKit) files

2.VTK file Format

2.1Simple Legacy Format简单传统格式

Binary Files

Dataset Format

Dataset Attribute Format.

Examples

2.2XML File Format

2.2.1Serial XML File Formats.

2.2.2Parallel File Formats.

3.PVD File Format



https://www.paraview.org/Wiki/ParaView/Data_formats

1.VTK(Visualization ToolKit) files

VTK文件格式及其所有相关文件是ParaView的首选格式。这些文件格式相当复杂,但也非常强大。VTK文件格式文档URL:https://lorensen.github.io/VTKExamples/site/VTKFileFormats/.  The original .pdf document:https://vtk.org/wp-content/uploads/2015/04/file-formats.pdf

2.VTK file Format

Visualization Toolkit提供了许多源对象和写入对象来读取和写入的流行数据文件格式。

可视化工具箱VTK还提供了一些自己的文件格式。创建自己的数据文件格式,主要原因是为各种数据集类型提供一致的数据表示方案,并提供在软件之间进行简单的数据通信方法。只要可能,我们建议您使用更广泛使用的格式。但是,如果这是不可能的,那么可以使用这个vtk格式。请注意,许多其他工具可能不支持这些格式。

VTK中有两种不同的文件格式。最简单的是传统的串行格式,这些格式易于手动或编程读写。但是,这些格式不如本节后面介绍的基于XML的文件格式灵活。XML格式支持随机存取、并行I/O和便携式数据压缩,尽可能优先于串行VTK文件格式。

2.1Simple Legacy Format简单传统格式

传统的VTK文件格式由五个基本部分组成。

1.第一部分是文件版本和标识符。此部分包含单行:# vtk DataFile Version x.x。这一行必须完全如图所示,但版本号x.x除外,该版本号将因VTK发布的不同而不同。(注:当前版本号为3.0。版本1.0和2.0文件与版本3.0文件兼容。)

2.第二部分是标题。标头由以行尾字符\\n结尾的字符串组成。标题最多256个字符。标头可用于描述数据并包括任何其他相关信息。

3.下一部分是文件格式。文件格式描述文件的类型,ASCII或二进制。在这一行上,必须出现单个单词ASCII或BINARY。

4.第四部分是数据集结构。几何体部分描述数据集的几何体和拓扑结构。这部分从包含关键字DATASET的行开始,后跟描述数据集类型的关键字。然后,根据数据集的类型,其他关键字/数据(keyword/data)组合定义实际数据。

5.最后一部分描述了数据集属性。此部分以关键字POINT_DATA或CELL_DATA开始,后跟一个整数,分别指定点或单元格的数量(POINT_DATA或CELL_DATA谁在前,无所谓)。其他关键字/数据(keyword/data)组合然后定义实际的数据集属性值(即,标量scalars、向量vectors、张量tensors、法线normals、纹理坐标texture coordinates或字段数据field data)。

文件格式的概述如图1所示。前三部分是必需的,但其他两部分是可选的。

因此,您可以通过操作系统文件操作或使用VTK过滤器合并数据,灵活地混合和匹配数据集属性和几何体。关键字不区分大小写,可以用空格分隔。

在描述数据文件格式之前,请注意以下几点:

  • dataType is one of the types bit, unsigned_char, char, unsigned_short, short, unsigned_int, int, unsigned_long, long, float, or double. 这些关键字用于描述数据的形式,既用于从文件中读取数据,也用于构造适当的内部对象。并非所有类都支持所有数据类型。
  • 无论文件是二进制还是ASCII,所有关键字短语都以ASCII格式编写。文件的二进制部分(如果是二进制形式)是正确的数据; 例如,定义点坐标、标量、单元索引等的数字。
  • 指数为0-offset。因此,第一个point是point id 0。

  • 如果文件中同时存在数据属性和几何/拓扑部分,则数据属性部分中定义的数据值数量必须与几何/拓扑部分中定义的点或单元数量完全匹配。

  • 单元格类型cell type和索引indices 类型为int型。

  • 二进制数据必须放在文件中,紧跟在前一个ASCII关键字和参数序列的“换行符”(\\n)字符之后。

  • 几何/拓扑描述必须出现在数据属性描述之前

Binary Files

只要遵守两个条件,VTK中的二进制文件就可以跨不同的计算机系统移植。

首先,确保数据的字节顺序正确,其次,确保每个数据类型的长度一致。

Dataset Format

可视化工具箱支持五种不同的数据集格式:结构化点structured points、结构化网格structured grid、直线网格 rectilinear grid、非结构化网格unstructured grid和多边形数据polygonal data。具有隐式拓扑的数据(结构化数据,如vtkImageData和vtkStructuredGrid)的顺序是x增长最快,然后是y,然后是z。这些格式如下:

Unstuctured Grid

非结构化网格数据集由任何可能的单元类型的任意组合组成。

非结构化网格由点points、单元cells和单元类型cell types定义。

CELLS关键字需要两个参数:单元格数n和单元格列表大小cell list size。cell list size是表示列表所需整数值的总数(即每个单元格上的numPoints和connectively indices over each cell的总和)。

CELL_TYPES关键字需要一个参数:单元格数n。此值应与CELLS关键字指定的值匹配。

单元格类型cell types数据是指定单元格类型的每个单元格的一个整数值(请参见vtkCell.h或图2)

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, i, j, k, l, ...
numPoints1, i, j, k, l, ...
numPoints2, i, j, k, l, ...
...
numPointsn-1, i, j, k, l, ...

CELL_TYPES n
type0
type1
type2
...
typen-1

Dataset Attribute Format.

可视化工具箱支持以下数据集属性:标量scalars(一到四个组件)、向量vectors、法线normals、纹理坐标texture corrdinates(1D、2D和3D)、张量tensors和场数据field data。此外,还可以定义与标量数据相关联的使用RGBA颜色规范的查找表。点points和单元格cells都支持数据集属性。

每种类型的属性数据都有一个与之关联的dataName,这是用于标识特定数据的字符串。VTK读取器使用dataName来提取数据。因此,一个文件中可以包含多个相同类型的属性数据。

例如,在数据集点上定义的两个不同标量字段“压力”和“温度”可以包含在同一个文件中。(如果未在VTK读取器中指定适当的数据名,则从文件中提取该类型的第一个数据。)

scalars标量

标量定义包括查找表的规范。查找表的定义是可选的。如果未指定,将使用默认的VTK表(tableName应为“default”)。

另外请注意,numComp变量是可选的,默认情况下,组件数等于一。(参数numComp的范围必须介于(1,4)之间;在vtk2.3之前的VTK版本中,不支持此参数。)

SCALARS dataName dataType numComp
LOOKUP_TABLE tableName
s0
s1
...
sn-1

颜色标量的定义(即,直接映射到颜色的无符号字符值)根据每个标量的值(nvalue)的数量而变化。

如果文件格式是ASCII,则颜色标量是使用nValues float值在(0,1)之间定义的。

如果文件格式为二进制,则数据流由nValues每个标量值的无符号char值组成。

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)

Lookup Table

tableName字段是用于标识查找表的字符串(没有嵌入空格)。VTK读取器使用此标签来提取特定表。查找表中的每个条目都是一个rgba[4](红-绿-蓝-alpha)数组(alpha是不透明的,其中alpha=0是透明的)。

如果文件格式是ASCII,则颜色标量是使用nValues float值在(0,1)之间定义的。

如果文件格式为二进制,则数据流由nValues每个标量值的无符号char值组成。

LOOKUP_TABLE tableName size
r0 g0 b0 a0
r1 g1 b1 a1
...
rsize-1 gsize-1 bsize-1 asize-1

 Vectors

VECTORS dataName dataType
v0x v0y v0z
v1x v1y v1z
...
v(n-1)x v(n-1)y v(n-1)z

Examples

 

例3

第三个例子是一个非结构化网格,包含19种VTK单元cell类型中的12种(参见图2和图3)。该文件包含标量和矢量数据。

# vtk DataFile Version 2.0
Unstructured Grid Example
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 27 float
0 0 0  1 0 0  2 0 0  0 1 0  1 1 0  2 1 0
0 0 1  1 0 1  2 0 1  0 1 1  1 1 1  2 1 1
0 1 2  1 1 2  2 1 2  0 1 3  1 1 3  2 1 3
0 1 4  1 1 4  2 1 4  0 1 5  1 1 5  2 1 5
0 1 6  1 1 6  2 1 6

CELLS 11 60
8 0 1 4 3 6 7 10 9
8 1 2 5 4 7 8 11 10
4 6 10 9 12
4 5 11 10 14
6 15 16 17 14 13 12
6 18 15 19 16 20 17
4 22 23 20 19
3 21 22 18
3 22 19 18
2 26 25
1 24

CELL_TYPES 11
12
12
10
10
7
6
9
5
5
3
1

POINT_DATA 27
SCALARS scalars float 1
LOOKUP_TABLE default
0.0 1.0 2.0 3.0 4.0 5.0
6.0 7.0 8.0 9.0 10.0 11.0
12.0 13.0 14.0 15.0 16.0 17.0
18.0 19.0 20.0 21.0 22.0 23.0
24.0 25.0 26.0
VECTORS vectors float
1 0 0  1 1 0  0 2 0  1 0 0  1 1 0  0 2 0
1 0 0  1 1 0  0 2 0  1 0 0  1 1 0  0 2 0
0 0 1  0 0 1  0 0 1  0 0 1  0 0 1  0 0 1
0 0 1  0 0 1  0 0 1  0 0 1  0 0 1  0 0 1
0 0 1  0 0 1  0 0 1

例子3在paraview显示效果如下:

 

 

2.2XML File Format

VTK使用XML语法提供了另一组数据格式。虽然这些格式比前面描述的原始VTK格式复杂得多(请参见2.1的“简单传统格式”),但它们支持更多的功能。

其开发的主要动机是促进数据流和并行I/O。

该格式的一些特性包括支持压缩、可移植二进制编码、随机存取、大端字节顺序和小端字节顺序、工件数据的多文件表示以及针对不同VTK数据集类型的新文件扩展名。

XML还提供了许多特性,特别是使用特定于应用程序的标记扩展文件格式的能力。

vtkxml数据文件有两种类型:并行和串行,如下所述:

•串行,文件类型设计为只由单个进程的应用程序读写。所有数据都包含在一个文件中。

•并行,为多进程并行执行的应用程序读写而设计的文件类型。数据集被分解成多个部分。每个进程分配一个或一组要读或写的片段。单个工件存储在相应的串行文件类型中。并行文件类型实际上不包含任何数据,而是描述结构信息,然后引用包含每个工件数据的其他串行文件。

在XML格式中,VTK数据集分为两类:

  • 结构化的。数据集是一个拓扑规则的单元数组,如像素和体素(如图像数据)或四边形和六面体(如结构化网格)(有关详细信息,请参阅第19页的“可视化模型”)。数据的矩形子集通过范围extents来描述。结构化数据集类型是vtkImageData,vtkRectilinearGrid和vtkStructuredGrid。
  • 非结构化。数据集形成了一组拓扑上不规则的点和单元。描述了数据的子集使用索引pieces。非结构化数据集类型为vtkPolyData和vtkUnstructuredGrid(有关详细信息,请参阅第19页的“可视化模型”)。

按照惯例,每个数据类型和文件类型都与特定的文件扩展名配对。类型和相应的扩展如下:

• ImageData (.vti) — Serial vtkImageData (structured). 图像数据,串行结构化
• PolyData (.vtp) — Serial vtkPolyData (unstructured). 多边形数据,串行非结构化
• RectilinearGrid (.vtr) — Serial vtkRectilinearGrid (structured). 直线网格,串行结构化
• StructuredGrid (.vts) — Serial vtkStructuredGrid (structured). 结构化网格,串行结构化
• UnstructuredGrid (.vtu) — Serial vtkUnstructuredGrid (unstructured).非结构化网格,串行非结构化
• PImageData (.pvti) — Parallel vtkImageData (structured). 并行结构化
• PPolyData (.pvtp) — Parallel vtkPolyData (unstructured). 并行非结构化
• PRectilinearGrid (.pvtr) — Parallel vtkRectilinearGrid (structured).并行结构化
• PStructuredGrid (.pvts) — Parallel vtkStructuredGrid (structured).并行结构化
• PUnstructuredGrid (.pvtu) — Parallel vtkUnstructuredGrid (unstructured)并行非结构化网格

所有VTK XML文件类型都是有效的XML文档。*文档级元素是VTKFile

<VTKFile type=”ImageData” version=”0.1” byte_order=”LittleEndian”>
...
</VTKFile>

VTKFile的属性包括:

type-文件的类型(上一个列表中带项目符号的项)。。

version-以“major.minor”格式的文件版本号。

byte_order—存储数据的机器字节顺序。这不是“BigEndian”就是“LittleEndian”。

compressor-文件中的某些数据可能被压缩。这指定vtkDataCompressor的子类,用于压缩数据。

嵌套在VTKFile元素中的是对应于数据格式的类型元素(例如type属性)。这个元素描述数据集的拓扑结构,对于串行和并行格式是不同的,下文将会描述。

2.2.1Serial XML File Formats.

VTKFile元素包含一个元素,其名称与文件描述的数据集类型相对应。我们将其称为dataset元素,它是ImageData、rectilinegrid、StructuredGrid、PolyData或UnstructuredGrid之一。

dataset元素包含一个或多个Piece元素,每个Piece元素描述数据集的一部分。dataset元素和Piece元素一起指定整个数据集。

数据集的每个部分必须指定该部分的几何图形(点和单元)以及与每个点或单元关联的数据。对于每个数据集类型,几何体的指定方式不同,但每个数据集的每个片段都包含PointData和CellData元素,用于指定片段中每个点和单元格的数据。

每个串行数据集格式的一般结构如下:

ImageData

每个ImageData片段Piece在数据集的整个范围WholeExtent内指定其范围。通过范围Extent、原点Origin和间距Spacing隐式地描述点Points和单元Cells。注意,所有片段Piece的原点Origin和间距Spacing都是恒定的,因此它们被指定为imagedata xml元素的属性,如下所示。

<VTKFile type=”ImageData” ...>
  <ImageData WholeExtent=”x1 x2 y1 y2 z1 z2”
   Origin=”x0 y0 z0” Spacing=”dx dy dz”>
    <Piece Extent=”x1 x2 y1 y2 z1 z2”>
      <PointData>...</PointData>
      <CellData>...</CellData>
    </Piece>
  </ImageData>
</VTKFile>

*有一种情况是文件不是有效的XML文档。如果AppendedData部分未编码为base64,则会出现可能违反XML规范的原始二进制数据。这不是默认行为,必须由用户显式启用。 

RectilinearGrid

每个矩形网格RectilinearGrid片段piece指定其在数据集的整个范围内的范围。这个

点points由坐标元素<Coordinates>描述。单元cells由范围extent隐式描述。

<VTKFile type=”RectilinearGrid” ...>
  <RectilinearGrid WholeExtent=”x1 x2 y1 y2 z1 z2”>
    <Piece Extent=”x1 x2 y1 y2 z1 z2”>
      <PointData>...</PointData>
      <CellData>...</CellData>
      <Coordinates>...</Coordinates>
    </Piece>
  </RectilinearGrid>
</VTKFile>

StructuredGrid 

每个结构网格StructuredGrid片段piece指定其在数据集的整个范围内的范围。这个

点points由坐标元素<Points>描述。单元cells由范围extent隐式描述。

<VTKFile type=”StructuredGrid” ...>
  <StructuredGrid WholeExtent=”x1 x2 y1 y2 z1 z2”>
    <Piece Extent=”x1 x2 y1 y2 z1 z2”>
      <PointData>...</PointData>
      <CellData>...</CellData>
      <Points>...</Points>
    </Piece>
  </StructuredGrid>
</VTKFile>

 PolyData

每个PolyData片段Piece指定一组独立于其他片段的点points和单元cells。

点points由<Points>元素显式描述。

单元cells由顶点<Verts>、直线<Lines>、条带<Strips>和多边形<Polys>元素明确描述。

<VTKFile type=”PolyData” ...>
  <PolyData>
    <Piece NumberOfPoints=”#” NumberOfVerts=”#” NumberOfLines=”#”
     NumberOfStrips=”#” NumberOfPolys=”#”>
      <PointData>...</PointData>
      <CellData>...</CellData>
      <Points>...</Points>
      <Verts>...</Verts>
      <Lines>...</Lines>
      <Strips>...</Strips>
      <Polys>...</Polys>
    </Piece>
  </PolyData>
</VTKFile>

UnstructuredGrid 

每个UnstructuredGrid片段Piece指定一组独立于其他片段的点points和单元cells。

点points由<Points>元素显式描述。

单元cells由<Cells>元素明确描述。

<VTKFile type=”UnstructuredGrid” ...>
  <UnstructuredGrid>
    <Piece NumberOfPoints=”#” NumberOfCells=”#”>
      <PointData>...</PointData>
      <CellData>...</CellData>
      <Points>...</Points>
      <Cells>...</Cells>
    </Piece>
  </UnstructuredGrid>
</VTKFile>

PointData和CellData

每个数据集都用PointData和CellData XML元素描述与其点和单元格关联的数据: 

<PointData Scalars=”Temperature” Vectors=”Velocity”>
  <DataArray Name=”Velocity” .../>
  <DataArray Name=”Temperature” .../>
  <DataArray Name=”Pressure” .../>
</PointData>

VTK允许任意数量的数据数组与数据集的点和单元格相关联。每个数据数组由一个DataArray元素描述,该元素给每个数组一个名称。PointData和CellData的以下属性用于按名称指定活动数组:

 Scalars — The name of the active scalars array, if any.   活动标量数组的名称(如果有)。

Vectors — The name of the active vectors array, if any.   活动向量数组的名称(如果有)。

Normals — The name of the active normals array, if any.  活动法线数组的名称(如果有)。

Tensors — The name of the active tensors array, if any.   活动张量数组的名称(如果有)。

TCoords — The name of the active texture coordinates array, if any.  -活动纹理坐标数组的名称(如果有)。

一些数据集使用以下公共元素的不同组合来描述它们的点和单元格:

Points

Points元素分别为每个点显式定义坐标。它包含一个DataArray元素,描述一个数组,每个值有三个组件,每个组件指定一个点的坐标

<Points>
  <DataArray NumberOfComponents=”3” .../>
</Points>

Coordinates 

Coordinates元素通过为范围中的每个整数值指定沿每个轴的坐标,来定义点坐标的范围。

它包含三个数据数组元素<DataArray>,分别描述沿x-y-z轴的坐标。

<Coordinates>
  <DataArray .../>
  <DataArray .../>
  <DataArray .../>
</Coordinates>

Verts, Lines, Strips, and Polys 

顶点Verts、直线Lines、条带Strips和多边形Polys元素通过指定点连接明确定义单元cells。

单元类型由指定它们的元素的类型隐式地知道。每个元素包含两个DataArray元素。第一个数组指定点连接。

所有单元格的点列表都连接在一起。第二个数组为每个单元格的结尾指定连接数组中的偏移量。

<Verts>
  <DataArray type=”Int32” Name=”connectivity” .../>
  <DataArray type=”Int32” Name=”offsets” .../>
</Verts>

Cells 

Cells元素通过指定点连接和单元类型来显式定义单元。

它包含三个DataArray元素。第一个数组指定点连接。所有单元格的点列表都连接在一起。第二个数组为每个单元格的结尾指定连接数组中的偏移量。第三个数组指定每个单元的类型(注:单元格类型如图2和图3所示)

<Cells>
  <DataArray type=”Int32” Name=”connectivity” .../>
  <DataArray type=”Int32” Name=”offsets” .../>
  <DataArray type=”UInt8” Name=”types” .../>
</Cells>

所有的数据和几何规范都使用<DataArray>元素来描述它们的实际内容,如下所示:

DataArray

DataArray元素存储一种类型的值序列。每个值可能有一个或多个组件

<DataArray type=”Float32” Name=”vectors” NumberOfComponents=”3”
           format=”appended” offset=”0”/>
<DataArray type=”Float32” Name=”scalars” format=”binary”>
           bAAAAAAAAAAAAIA/AAAAQAAAQEAAAIBA... </DataArray>
<DataArray type=”Int32” Name=”offsets” format=”ascii”>
           10 20 30 ... </DataArray>

DataArray元素的属性描述如下

type—数组的单个组件的数据类型。这是Int8、UInt8、Int16、UInt16、Int32、UInt32、Int64、UInt64、Float32、Float64之一。注意:只有启用VTK_USE_64BIT_IDS(一个CMake变量——请参见“CMake”的第8页)或平台为64位时,才支持64位整数类型。

Name—数组的名称。这通常是对存储在数组中数据的简要描述。

NumberOfComponents—数组中每个值的组件数。

format—数据值本身存储在文件中的方式。这是“ascii”、“binary”或“appended”。

offset—如果格式属性为“appended”,则指定从追加数据节的开头到该数组数据的开头的偏移量。

format属性从三种存储数据值的方式中进行选择:

format=“ascii”-数据直接在DataArray元素中以ascii格式列出。空格用于分隔。

format=“binary”-数据以base64编码,并在DataArray元素中连续列出。数据也可以在用base64编码之前进行压缩。数据的字节顺序与VTKFile元素的byte_order属性指定的字节顺序匹配。

format=“added”-数据存储在“appended data”部分。由于许多DataArray元素可能将其数据存储在此节中,因此offset属性用于指定每个DataArray的数据从何处开始。

此格式是VTK编写器使用的默认格式。

追加的数据节存储在一个AppendedData元素中,该元素嵌套在dataset元素之后的VTKFile中:

<VTKFile ...>
  ...
  <AppendedData encoding=”base64”>
    _QMwEAAAAAAAAA...
  </AppendedData>
</VTKFile>

追加的数据部分以AppendedData元素中下划线后的第一个字符开始。下划线不是数据的一部分,但始终存在。

本节中的数据始终是二进制形式,但可以进行压缩和/或base64编码。

数据的字节顺序与VTKFile元素的byte_order属性指定的字节顺序匹配。每个DataArray的数据都是连续存储的,并在前一个DataArray的数据之后立即追加,而不使用分隔符。

DataArray的offset属性表示从下划线后的第一个字符到其数据开头的文件位置偏移量。

2.2.2Parallel File Formats.

并行文件格式实际上并不在文件中存储任何数据。相反,数据被分解成片段,每个片段都存储在同一数据集类型的串行文件中。

VTKFile元素包含一个元素,其名称与文件描述的数据集类型相对应,但是前缀为“P”。我们称之为并行数据集元素,它是PImageData,precilitineargrid,PStructuredGrid、PPolyData或PUnstructuredGrid.

parallel dataset元素和嵌套在其中的元素指定数据数组的类型,数据数组用于存储点points、点数据point data和单元数据cell data。用于存储单元cells的数组类型由VTK固定。

元素实际上不包含任何数据,而是包含一个片段Pieces元素列表,这些片段pieces元素指定从中读取每个片段的源。单个片段pieces窜出在相应的串行文件格式中。并行文件需要指定类型和结构信息,以便读取器可以更新管道信息,而不必真的读取片段文件。

每个并行数据集格式的一般结构如下:

PImageData

PImageData元素指定数据集的整个范围WholeExtent以及各个片段中的范围重叠的重影级别GhostLevel数。“原点Origin”和“间距Spacing”属性隐式指定点位置。每个Piece元素描述一个片段piece的范围extent和存储它的文件.

<VTKFile type=”PImageData” ...>
  <PImageData WholeExtent=”x1 x2 y1 y2 z1 z2”
              GhostLevel=”#” Origin=”x0 y0 z0” Spacing=”dx dy dz”>
    <PPointData>...</PPointData>
    <PCellData>...</PCellData>
    <Piece Extent=”x1 x2 y1 y2 z1 z2” Source=”imageData0.vti”/>
    ...
  </PImageData>
</VTKFile>

PRectilinearGrid

 precilitineargrid元素指定数据集的整个范围WholeExtent以及各个片段中的范围重叠的重影级别GhostLevel数。

PCoordinates元素描述用于指定沿每个轴点坐标的数组类型,但实际上不包含数据。

每个Piece元素描述一个片段Piece的范围Extent和存储它的文件。

<VTKFile type=”PRectilinearGrid” ...>
  <PRectilinearGrid WholeExtent=”x1 x2 y1 y2 z1 z2”
                    GhostLevel=”#”>
    <PPointData>...</PPointData>
    <PCellData>...</PCellData>
    <PCoordinates>...</PCoordinates>
    <Piece Extent=”x1 x2 y1 y2 z1 z2”
           Source=”rectilinearGrid0.vtr”/>
    ...
  </PRectilinearGrid>
</VTKFile>

 PStructuredGrid

psStructuredGrid元素指定数据集的整个范围WholeExtent以及各个片段中的范围重叠的重影级别GhostLevel数。

PPoints元素描述用于指定点位置的数组的类型,但实际上不包含数据。

每个Piece元素描述一个片段piece的范围和存储它的文件。

<VTKFile type=”PStructuredGrid” ...>
  <PStructuredGrid WholeExtent=”x1 x2 y1 y2 z1 z2”
                   GhostLevel=”#”>
    <PPointData>...</PPointData>
    <PCellData>...</PCellData>
    <PPoints>...</PPoints>
    <Piece Extent=”x1 x2 y1 y2 z1 z2”
           Source=”structuredGrid0.vts”/>
    ...
  </PStructuredGrid>
</VTKFile>

PPolyData

 PPolyData元素指定各个片段重叠的重影级别GhostLevel数。

PPoints元素描述用于指定点位置的数组的类型,但实际上并不包含数据。

每个Piece元素指定存储工件的文件。

<VTKFile type=”PPolyData” ...>
  <PPolyData GhostLevel=”#”>
    <PPointData>...</PPointData>
    <PCellData>...</PCellData>
    <PPoints>...</PPoints>
    <Piece Source=”polyData0.vtp”/>
    ...
  </PPolyData>
</VTKFile>

 PUnstructuredGrid

PUnstructuredGrid元素指定各个片段重叠的重影级别GhostLevel数。

PPoints元素描述用于指定点位置的数组的类型,但实际上不包含数据。

每个Piece元素指定存储工件的文件。

<VTKFile type=”PUnstructuredGrid” ...>
  <PUnstructuredGrid GhostLevel=”0”>
    <PPointData>...</PPointData>
    <PCellData>...</PCellData>
    <PPoints>...</PPoints>
    <Piece Source=”unstructuredGrid0.vtu”/>
    ...
  </PUnstructuredGrid>
</VTKFile>

 PPointData和PCellData

每个数据集都使用PPointData和PCellData元素来描述与其点和单元格关联的数据数组的类型。

这些元素只是镜像PointData和CellData元素来自串行文件格式。

它们包含描述数据数组的PDataArray元素,但没有任何实际数据。

<PPointData Scalars=”Temperature” Vectors=”Velocity”>
  <PDataArray Name=”Velocity” .../>
  <PDataArray Name=”Temperature” .../>
  <PDataArray Name=”Pressure” .../>
</PPointData>

PPoints和PCoordinates

对于需要指定点的数据集,以下元素从串行文件格式镜像它们的对应项:

PPoints元素包含一个PDataArray元素,用于描述一个包含三个组件的数组。

数据数组实际上不包含任何数据

<PPoints>
  <PDataArray NumberOfComponents=”3” .../>
</PPoints>

 PCoordinates元素包含三个PDataArray元素,描述用于指定沿每个轴的坐标的数组。数据数组实际上并不包含任何数据。

<PCoordinates>
  <PDataArray .../>
  <PDataArray .../>
  <PDataArray .../>
</PCoordinates>

PDataArray 

PDataArray元素指定DataArray元素的类型、名称和NumberOfComponents属性(可选)。它不包含实际数据。

读取器可以使用它在其输出中创建数据数组,而不需要读取任何实际数据,这在某些情况下是高效管道更新所必需的

<PDataArray type=”Float32” Name=”vectors” NumberOfComponents=”3”/>

Example

 下面是一个完整的示例,它指定了一个vtkPolyData,表示在其点和面上具有一些标量数据的立方体。

<?xml version="1.0"?>
<VTKFile type="PPolyData" version="0.1" byte_order="LittleEndian">
  <PPolyData GhostLevel="0">
    <PPointData Scalars="my_scalars">
      <PDataArray type="Float32" Name="my_scalars"/>
    </PPointData>
    <PCellData Scalars="cell_scalars" Normals="cell_normals">
      <PDataArray type="Int32" Name="cell_scalars"/>
      <PDataArray type="Float32" Name="cell_normals" NumberOfComponents="3"/>
    </PCellData>
    <PPoints>
      <PDataArray type="Float32" NumberOfComponents="3"/>
    </PPoints>
    <Piece Source="polyEx0.vtp"/>
  </PPolyData>
</VTKFile>
<?xml version="1.0"?>
<VTKFile type="PolyData" version="0.1" byte_order="LittleEndian">
  <PolyData>
    <Piece NumberOfPoints="8" NumberOfVerts="0" NumberOfLines="0"
           NumberOfStrips="0" NumberOfPolys="6">
      <Points>
        <DataArray type="Float32" NumberOfComponents="3" format="ascii">
          0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1 1 1 1 0 1 1
        </DataArray>
      </Points>
      <PointData Scalars="my_scalars">
        <DataArray type="Float32" Name="my_scalars" format="ascii">
          0 1 2 3 4 5 6 7
        </DataArray>
      </PointData>
      <CellData Scalars="cell_scalars" Normals="cell_normals">
        <DataArray type="Int32" Name="cell_scalars" format="ascii">
          0 1 2 3 4 5
        </DataArray>
        <DataArray type="Float32" Name="cell_normals"
                   NumberOfComponents="3" format="ascii">
          0 0 -1 0 0 1 0 -1 0 0 1 0 -1 0 0 1 0 0
        </DataArray>
      </CellData>
      <Polys>
        <DataArray type="Int32" Name="connectivity" format="ascii">
          0 1 2 3 4 5 6 7 0 1 5 4 2 3 7 6 0 4 7 3 1 2 6 5
        </DataArray>
        <DataArray type="Int32" Name="offsets" format="ascii">
          4 8 12 16 20 24
        </DataArray>
      </Polys>
    </Piece>
  </PolyData>
</VTKFile>

该例子在paraview显示效果如下:

 

3.PVD File Format

PVD,ParaView Data file format,是ParaView的本机数据文件格式。PVD支持在ParaView中加载或创建的任何类型的数据集(多边形、均匀直线、非均匀直线、曲线或非结构化),包括空间分区、多块和时间序列数据。

PVD文件格式是基于XML的。

PVD文件实际上提供指向数据文件集合的指针,数据文件集合用于存储当前数据集各种组件。

集合Collection中的每个数据文件都使用基于XML的VTK文件格式(串行或并行版本-但不是传统的“.VTK”文件格式)VTK有两种文件格式,PVD使用的是第二种

PVD文件中的第一行指定XML版本(当前为“1.0”)。

<?xml version="1.0"?>

接下来是VTKFile元素。此元素的属性如下所示:

<VTKFile type="Collection" version="0.1"
         byte_order="LittleEndian"
         compressor="vtkZLibDataCompressor">

type:此属性设置为“Collection”,表示加载此数据文件需要加载一组数据文件。

version:version属性列出用于写入此文件的vtkXMLWriter的版本。当前版本为“0.1”。此属性仅供参考;它不是必需的。

byte_order:因为这是一个ASCII文件,所以不需要此属性。如果存在,则设置为“BigEndian”或“LittleEndian”,具体取决于写入此文件的平台的字节顺序。Intel CPU(大多数商用笔记本电脑和台式机)使用小端字节顺序;powerpccpu(旧的Macintosh机器、IBM集群和超级计算机)使用big-endian。

compressor:该属性应设置为“vtkZLibDataCompressor”。此属性不是必需的。

VTKFile下面的XML子元素是Collection。<Collection></Collection>标记列出此集合中各个数据文件的DataSet元素。DataSet元素(每个子文件一个)支持以下XML属性:

 <Collection>
    <DataSet timestep="0" group="" part="0"
             file="examplePVD/examplePVD_T0000.vtp"/>
    <DataSet timestep="1" group="" part="0"
             file="examplePVD/examplePVD_T0001.vtp"/>
    <DataSet timestep="2" group="" part="0"
             file="examplePVD/examplePVD_T0002.vtp"/>
    <DataSet timestep="3" group="" part="0"
             file="examplePVD/examplePVD_T0003.vtp"/>
    <DataSet timestep="4" group="" part="0"
             file="examplePVD/examplePVD_T0004.vtp"/>
  </Collection>

timestep:此属性仅用于存储时变数据集。它的值是浮点值。

group:group属性列出ParaView分配的唯一标识符,该标识符标识创建此数据集Dataset的源Source、读取器reader或筛选器filter的。此属性不是必需的;仅供参考。

part:此属性的值是当前数据集此部分的标识号。它是一个大于或等于0的整数值。

file:此属性包含此数据集中某个子文件的文件名。如果子文件与.pvd文件不在同一目录中,则此属性将包含从.pvd文件位置到子文件的相对路径。

下面显示了一个.pvd文件示例。它是包含五个时间步骤的时变数据集。

<?xml version="1.0"?>
<VTKFile type="Collection" version="0.1"
         byte_order="LittleEndian"
         compressor="vtkZLibDataCompressor">
  <Collection>
    <DataSet timestep="0" group="" part="0"
             file="examplePVD/examplePVD_T0000.vtp"/>
    <DataSet timestep="1" group="" part="0"
             file="examplePVD/examplePVD_T0001.vtp"/>
    <DataSet timestep="2" group="" part="0"
             file="examplePVD/examplePVD_T0002.vtp"/>
    <DataSet timestep="3" group="" part="0"
             file="examplePVD/examplePVD_T0003.vtp"/>
    <DataSet timestep="4" group="" part="0"
             file="examplePVD/examplePVD_T0004.vtp"/>
  </Collection>
</VTKFile>

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片