XML形式のVTKの基本構成

xml形式のvtkファイルの基本構成は以下である.

<?xml version="1.0"?>
  <VTKFile type="ImageData">
   ***データセット要素 ImageData に関する記述***
  </VTKFile>

1行目は xml文書に共通であるXMLファイルであることの宣言文 である.2行目において VTKFile形式の文書 であることと, 取り扱うデータセット要素 を宣言している.XMLのversion数にはあまり拘る必要はなく,1.0で問題ない.ここではImageDataと呼ばれるデータセット要素を用いることを宣言している.VTKFile のタグ間は,以下に述べるデータセット要素のうち,いずれかを用いる.

VTKで取扱うことができる各種データセット要素

Paraview等の各種 レンダリングソフトウェア3D表示 するためには,数値計算等で得られたデータを 自己無矛盾なデータとして与える 必要がある.座標位置毎のデータ,データ同士の隣接・結合情報等の表現が必要となる.このように, 数値データと3Dレンダリングの橋渡しするデータ規格及び記述・処理用ライブラリ群がVTK である.VTKでは,以下に記す データセット要素 と呼ばれる データ構造 のうち,いずれかを用いることで3次元(2次元)データを表現する.

  • <ImageData> (.vti)

  • <RectilinearGrid> (.vtr)

  • <StructuredGrid> (.vts)

  • <PolyData> (.vtp)

  • <UnstructuredGrid> (.vtu)

ImageData

ImageDataはpixel数が定められた画像のように, 等間隔構造格子 の記述に用いることができる.ImageDataのアトリビュートに 最大・最小,原点,データ間隔を指定できる.PointDataは格子上のデータを指定する際に,CellDataは格子内のデータを指定する際に用いることができ,それぞれデータ点数が (Nx,Ny,Nz) と (Nx-1,Ny-1,Nz-1) の違いがある.

<ImageData WholeExtent="xMin xMax yMin yMax zMin zMax" Origin="x0 y0 z0" Spacing="dx dy dz">
   <Piece Extent="x1 x2 y1 y2 z1 z2">
     <PointData> Data </PointData>
     <CellData> Data </CellData>
   </Piece>
</ImageData>

RectilinearGrid

RectilinearGrid はSpacingやOriginを指定する必要がないが,PointDataタグ/CellDataタグとは別に Coordinateタグ を持ち, 各軸(e.g. x軸,y軸,z軸) を指定する.

<RectilinearGrid WholeExtent="xMin xMax yMin yMax zMin zMax">
   <Piece Extent="x1 x2 y1 y2 z1 z2">
     <PointData>  Data </PointData>
     <CellData>   Data </CellData>
     <Coordinate> Data </Coordinate>
   </Piece>
</ImageData>

Coordinateタグの例. ImageDataは等間隔直交構造格子の記述のみ であるが,RectilinearGridでは, 不等間隔格子や円柱・極座標の記述も可能 である. Coordinateタグによる各軸の指定は以下のようになる.

<Coordinates>
  <DataArray> x0 x1 x2 x3 ... </DataArray>
  <DataArray> y0 y1 y2 y3 ... </DataArray>
  <DataArray> z0 z1 z2 z3 ... </DataArray>
</Coordinates>

StructuredGrid

StructuredGrid は RectilinearGrid 同様に,構造格子上のデータを指定できる. RectilinearGrid では,データ点の座標位置を指定する際に Coordinateタグ を用いたが, StructuredGridはPointsタグを用いる .

<RectilinearGrid WholeExtent="xMin xMax yMin yMax zMin zMax">
   <Piece Extent="x1 x2 y1 y2 z1 z2">
     <PointData>  Data </PointData>
     <CellData>   Data </CellData>
     <Points>     Data </Points>
   </Piece>
</ImageData>

ここで,Pointsタグは次のような ( データ点が存在する空間の次元, データ点数 ) のデータ配列から構成される.

<Points>
  <DataArray NumberOfComponents="3">
    0.0 0.0 0.0
    1.0 0.0 0.0
    2.0 0.0 0.0
    0.0 1.0 0.0
    1.0 1.0 0.0
    ...
  </DataArray>
</Points>

データ量の観点から言えば,StructureGridは冗長なデータ点数が多い.同じ,等間隔直交構造格子上のデータを表現するのであれば, (ImageData) < (RectilinearGrid) < (StrucutredGrid) となる.