最近學了一下vtk檔案的格式, 做一個小結。文中用方括号标示出來的文字是根據實際需要自己定義的部分,其他的如DATASET, POINTS,CELLS等是vtk本身的格式要求一部分。
文章目錄
-
- 1. 第一部分,資料版本聲明(不重要)
- 2. 第二部分,标題 (不重要)
- 3. 第三部分,檔案格式聲明
- 4.第四部分,幾何拓撲結構(重要)
- 5. 第五部分,實體量(重要)
- 6. 單元類型與節點順序
- 7. 牛刀小試
- 學習資源
1. 第一部分,資料版本聲明(不重要)
這是強制的一句話,說明檔案版本
# vtk DataFile Version 3.0
2. 第二部分,标題 (不重要)
不重要,相當于自己其一個标題,以回車結束,最多256個字元
3. 第三部分,檔案格式聲明
檔案格式,
ASCII
或者
BINARY
于是前面三部分可以寫為
# vtk DataFile Version 3.0
[VTKtitle]
ASCII
4.第四部分,幾何拓撲結構(重要)
DATASET [format]
format
表示資料的格式,可以是
- STRUCTURED_POINTS
- STRUCTURED_GRID
- UNSTRUCTURED_GRID
- POLYDATA
- RECTILINEAR_GRID
- FIELD
例如,如果是非結構網格的話,就寫
DATASET UNSTRUCTURED_GRID
。這裡的非結構網格不一定是四面體或三角形網格,隻要是沒有規則的都能用UNSTRUCTURED GRID表示,比如一個三角形和一個六面體的混合。
如果是
UNSTRUCTURED_GRID
, 那麼接下來就需要指定節點和單元
POINTS [n] [dataType] (#n_point#域填入實際的點數, dataType為double float等類型)
[x_0] [y_0] [z_0]
[x_1] [y_1] [z_1]
[x_0] [y_0] [z_0]
然後是單元聲明
CELLS [n_cells] [n_list] #n_cells填入單元個數,n_list填入下方清單包含的數字的個數,即“單元數*(1+每個單元節點數)”)
[單元0上的頂點總數目] [單元0頂點0的編号] [單元0頂點1的編号] [單元0頂點2的編号] ...
[單元1上的頂點總數目] [單元1頂點0的編号] [單元1頂點1的編号] [單元1頂點2的編号] ...
.
.
.
CELL_TYPES [n_cells] #n_cells與前面CELLS那一塊的n_cells必須一樣
[單元0類型] #表示幾何類型的整數,參考vtk的文檔,比如四面體是10,六面體是11
[單元1類型]
.
.
.
5. 第五部分,實體量(重要)
有兩種:節點上的值和單元上的值,分别用
POINT_DATA
和
CELL_DATA
表示。可以表示多個實體量,實體量可以是标量(scalar),向量(vector),或者是張量(tensor)。
POINT_DATA [n]
[資料]
CELL_DATA [n]
[資料]
上述格式中,資料可以是SCALAR,VECTOR或TENSOR,不同類型的資料需要不同的格式
SCALARS [dataName] [dataType] [numComp] #dataName資料名字,dataType是double之類的,numComp一般是1
LOOKUP_TABLE [tableName] #tableName表名
s_0
s_1
...
s_n-1
6. 單元類型與節點順序

各個單元種類以及對應編号,括号中的數字為單元類型辨別
7. 牛刀小試
(1)一個最簡單的示例
下面的vtk檔案定義了一個六面體,頂點為(0,0,0), (50,0,0), (0,50,0), (50,50,0), (0,0,50), (50,0,50), (0,50,50), (50,50,50).
注意:構成一個單元的節點的排列順序一定要按照vtk文檔所定義的,不同幾何體節點編号也不一樣
# vtk DataFile Version 3.0
Right rectangular prisms grid
ASCII
DATASET UNSTRUCTURED_GRID
POINTS 8 double
0 0 0
50 0 0
0 50 0
50 50 0
0 0 50
50 0 50
0 50 50
50 50 50
CELLS 1 9
8 0 1 2 3 4 5 6 7
CELL_TYPES 1
11
CELL_DATA 1
SCALARS density double 1
LOOKUP_TABLE table1
1
SCALARS resistivity double 1
LOOKUP_TABLE table2
2
SCALARS temperature double 1
LOOKUP_TABLE table3
3
SCALARS susceptibility double 1
LOOKUP_TABLE table4
4
SCALARS permittivity double 1
LOOKUP_TABLE table4
4
(2) 一個六面體網格示例
一個六面體網格的模型, 用paraview顯示
學習資源
- python和vtk的一個入門講義:http://www.cb.uu.se/~aht/Vis2014/lecture2.pdf
- vtk官網: https://www.vtk.org/
- 各種語言接口的VTK例子,VTKExamples: https://lorensen.github.io/VTKExamples/site/