VTK传统文件1

586 阅读6分钟

VTK提供许多读写对象,用于读写流行的模型格式文件。VTK也提供了一些自己才有的文件格式。VTK创建另一种数据文件格式的主要原因是为各种数据集类型提供一致的数据表示方案,并提供一种在软件之间通信数据的简单方法。如果可能的话,我们推荐您使用流行的模型文件格式。如果不可能,下面描述了如何使用VTK格式代替流行的格式文件。请注意,这些VTK格式,可能不被其他工具支持。

VTK有两种不同样式文件格式。最简单的是传统、串行格式,无论是手动还是编程都很容易读取和写入。但是,这些格式不如本节稍后描述的基于XML的文件格式灵活。XML格式支持随机访问、并行I/O和可移植数据压缩,并且优于串行VTK文件格式。

VTK 10.0版本引入了HDF文件格式。这项工作的目标是为仿真提供一种以HDF格式保存数据的方法,该格式可以很容易地加载到VTK中,而不需要外部数据描述(如XDMF)。目前,我们仅提供图像数据和非结构化网格的读取对象。(当前最新版本是9.2.6,2023年04月17日)

1 简单传统格式

1.1 5个基本组成部分

1.1.1 第1部分

第1部分,文件的版本和标识符

这部分只包含了一行:

vtk DataFile Version x.x

这一行,除了版本号x.x以外,其他的必须与上面一模一样。当前的VTK格式文件的版本是3.0。3.0的版本兼容1.0和2.0。

1.1.2 第2部分

第2部分,是文件的头部

头部由一个字符串组成,字符串以换行符结尾,且最大为256个字符。头部用于描述数据包括任何其他相关信息。

1.1.3 第3部分

第3部分,是文件类型格式

文件格式描述文件类型,类型可以是ASCII或者binary。这一行只能出现ASCII或者BINARY。

1.1.4  第4部分

第4部分,是数据集结构

几何部分描述了数据集的几何结构和拓扑结构。这部分以一行开头,该行包含关键字DATASET,后跟描述数据集类型的关键字。根据数据集类型,和其他的关键词、以及数据组合,定义实际的数据。

1.1.5 第5部分

第5部分,是最后1部分,是数据集属性

这一部分,以POINT_DATA或者CELL_DATA关键词开头,后面跟着一个整数,用于指定POINTS(点)或者CELL(单元)的数量。POINT_DATA和CELL_DATA谁第一个出现,没有影响。其他关键词和数据,定义了实际属性值(如:scalars标量、vectors矢量、tensors张量、normals法线、texture coordinates纹理坐标和field data场数据等)。

1.1.6 总结表

文件格式概述表

# vtk DataFile Version 2.0(1)
Really cool data(2)
ASCII / BINARY(3)
DATASET type……(4)
POINT_DATA type……CELL_DATA type……(5)

关键点表

第1部分:头部
第2部分:标题,最大256个字符,以换行符\n结尾
第3部分:数据类型,文件格式,ASCII或者BINARY
第4部分:几何或者拓补,数据格式,类型是STRUCTURED_POINTS          STRUCTURED_GRID          UNSTRUCTURED_GRID          POLYDATA          RECTILINEAR_GRID          FIELD
第5部分:数据集属性,每种类型中元素的数量必须与数据集中的点POINTS或单元CELLS中的元素数量相等。如果类型是场FIELD,点和单元数据被省略。

1.2 五个部分概述注意事项

前三部分是强制性的,但其他两部分是可选的。因此,您可以通过操作系统文件操作或使用VTK滤波器合并数据,灵活地混合和匹配数据集属性和几何图形。

  • 第4部分数据类型,必须是bit、unsigned_char、char、unsigned_short、short、unsigned_int、int、unsigned_long、long、float、double中的一种。这些关键字用于描述数据的形式,既用于从文件中读取数据,也用于构建适当的内部对象。并非所有类型都支持。 

  • 第3部分无论文件是BINNARY还是ASCII,所有关键字短语都以ASCII形式编写。如果文件中二进制部分合理,关键词短语定义了点坐标、标量、单元格索引等的数字。 

  • 索引为0偏移。因此,第一个点是点id 0。  

  • 如果一个VTK文件中,同时出现了第5部分的数据属性和第4部分的几何/拓补部分,则第5部分的“数据属性部分”的“数据值数量”必须和“几何/拓补部分”中定义的“点或者单元数量”相等。

  • 单元格类型和索引必须为整型。

  • 如果文件中有二进制数据,则二进制数据必须放在ASCII关键字后面,且ASCII关键后,有参数序列,参数序列有“换行符”(\n)字符。  

  • 第4部分的“几何/拓补部分”,必须出现在第5部分的“数据属性”之前。  

1.3 二进制文件

二进制文件跨平台的两个条件:首先,确保数据的字节顺序正确,其次,确保每个数据类型的长度一致。

大多数时候,VTK为您管理二进制文件的字节顺序。当您在一台计算机上写入二进制文件并从另一台计算机读取时,表示数据的字节将根据需要自动交换。例如,在Sun(UNIX系统)上编写的二进制文件以大端顺序存储,而在PC上的二进制文件则以小端顺序存储。因此,在Sun工作站上编写的文件在PC上读取时需要进行字节交换。(有关实现的详细信息,请参阅vtkByteSwap类。)这里描述的VTK数据文件是以大端(big-endian)形式编写的。

然而,有些文件格式并没有明确定义字节排序形式。您会发现,由外部程序读取或写入的数据,或vtkVolume16Reader、vtkMCubesReader和vtkMCubesWriter类,可能会有不同的字节顺序,具体取决于原始系统。在这种情况下,VTK允许您使用以下方法指定字节顺序

SetDataByteOrderToBigEndian()

SetDataByteOrderToLittleEndian()

二进制文件的另一个问题是,系统可能使用不同数量的字节来表示整数或其他本机类型。例如,一些64位系统将表示具有8字节的整数,而另一些系统表示具有4字节的整数。目前,可视化工具包无法处理在数据长度不兼容的系统之间传输二进制文件。在这种情况下,请改用ASCII文件格式。