天天看點

vtk檔案格式

最近學了一下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. 單元類型與節點順序

vtk檔案格式
vtk檔案格式
vtk檔案格式

各個單元種類以及對應編号,括号中的數字為單元類型辨別

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顯示

vtk檔案格式

學習資源

  • python和vtk的一個入門講義:http://www.cb.uu.se/~aht/Vis2014/lecture2.pdf
  • vtk官網: https://www.vtk.org/
  • 各種語言接口的VTK例子,VTKExamples: https://lorensen.github.io/VTKExamples/site/

繼續閱讀