1

我需要将简单几何和矢量场都导出到一些 VTK 文件中。我已经设法导出几何图形,但正在努力弄清楚如何导出矢量场。我需要的文件的结构/格式是什么?

这是我到目前为止所拥有的(顺便说一下,向量需要任意放置,这意味着结构化网格等不起作用):

<?xml version="1.0"?>

<VTKFile type="PolyData" version="0.1" byte_order="LittleEndian">
  <PolyData>
    <Piece NumberOfPoints="8" NumberOfVerts="0" NumberOfLines="0" NumberOfStrips="0" NumberOfPolys="5">
      <Points>
        <DataArray type="Float32" NumberOfComponents="3" format="ascii">
        //point data//
        </DataArray>
      </Points>

      <Polys>
        <DataArray type="Int32" Name="connectivity" format="ascii">
        //connectivity data//
        </DataArray>

        <DataArray type="Int32" Name="offsets" format="ascii">
        //offsett data//
        </DataArray>
      </Polys>

    </Piece>
      //Need to put vector field with it's own points here//
  </PolyData>
</VTKFile>

更新:根据 Chris 的建议(请参阅下面的答案),我已将文件更新为此表单:

<?xml version="1.0"?>

<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian">
  <UnstructuredGrid>
    <Piece NumberOfPoints="50" NumberOfCells="0">
      <PointData Vectors="Velocity">
        <DataArray Vectors="Velocity">
          //vector data//
        </DataArray>
      </PointData>
      <Points>
        <DataArray type="Float32" NumberOfComponents="3" format="ascii">
          //point data//
        </DataArray>
      </Points>
      <Cells/>
     <CellData/>
   </Piece>
 </UnstructuredGrid>
</VTKFile>
4

1 回答 1

1

从您的示例 XML 文件看来,矢量字段是在与 PolyData 节点不同的坐标处定义的。如果是这种情况,那么您将需要使用两个不同的文件。来自 VTK 文件格式规范,它是 VTK 用户指南的一部分(参见 www.vtk.org/VTK/img/file-formats.pdf):

按照惯例,每种数据类型和文件类型都与特定的文件扩展名配对。

您的矢量场听起来像UnstructuredGrid数据,您必须明确指定网格节点的坐标(不像ImageGrids,其中节点坐标由数据的间距和范围隐式定义)。这显然不能进入 PolyData VTK 文件(请参阅示例 XML 文件的第二行)。

因此,请尝试使用大纲(取自文件格式文档)为您的矢量数据编写一个新文件:

<VTKFile type="UnstructuredGrid" ...>
  <UnstructuredGrid>
    <Piece NumberOfPoints="#" NumberOfCells="0">
      <Points>
          <DataArray type="Float32" NumberOfComponents="3" format="ascii">
          //point data//
          </DataArray>
      </Points>
      <Cells>
          <DataArray type="Int32" Name="connectivity" .../>
          <DataArray type="Int32" Name="offsets" .../>
          <DataArray type="UInt8" Name="types" .../>
      </Cells>
      <PointData>
          <DataArray Vectors="MyVector">
            //Vector data goes here//
          </DataArray>
      </PointData>
      <CellData/>
    </Piece>
  </UnstructuredGrid>
</VTKFile>

更新:正如评论中所讨论的,Cells必须指定元素(CellData元素可以留空,因为只指定了点数据)。该Cells元素指定单元类型、连通性和偏移量。对于一系列未连接的点(即粒子),此信息被指定为长度为 的数组n,其中n是数据点的数量,其中

type = 1, 1, .... 1
connectivity = 0, 1, 2, ... n
offsets = 1, 2, 3, ... n
于 2012-04-26T15:11:27.257 回答