阅读带有多个标量的.vtk文件

时间:2016-01-22 10:09:46

标签: python vtk

我在阅读包含多个标量的.vtk文件时遇到问题。这是一个示例文件' data_test'我假设在单格网格上描述了两个标量。

# vtk DataFile Version 2.0
1, sec.
ASCII
DATASET RECTILINEAR_GRID
FIELD FieldData 2
TIME 1 1 double
 1.0
SPACE 1 1 int
2
DIMENSIONS 2 2 1
X_COORDINATES 2 double
 0.00000000000000E+0000
 4.00000000000000E-0004
Y_COORDINATES 2 double
 -4.28049291420691E-0002
 -4.24045609948740E-0002
Z_COORDINATES 1 double
 0.00000000000000E+0000
CELL_DATA 1
SCALARS first_scalar double 1
LOOKUP_TABLE default
 1.00000071870987E+0012
SCALARS second_scalar double 1
LOOKUP_TABLE default
 2.78177630625252E-0002

以下是我尝试使用标准python-vtk工具解析此文件

from vtk import *

reader = vtk.vtkGenericDataObjectReader()
reader.SetFileName(r'data_test')
reader.Update()
vtk_out = reader.GetOutput()
scalar_names = [reader.GetScalarsNameInFile(i) for i in range(0, reader.GetNumberOfScalarsInFile())]

print 'scalar names\n', scalar_names
print '\ncell data\n', vtk_out.GetCellData()

评估给出

scalar names
**['first_scalar', 'second_scalar']**

cell data
vtkCellData (0x86671c0)
  Debug: Off
  Modified Time: 468
  Reference Count: 2
  Registered Events: (none)
  **Number Of Arrays: 1**
  **Array 0 name = first_scalar**
  Number Of Components: 1
  Number Of Tuples: 1
  Copy Tuple Flags: ( 1 1 1 1 1 0 1 1 )
  Interpolate Flags: ( 1 1 1 1 1 0 0 1 )
  Pass Through Flags: ( 1 1 1 1 1 1 1 1 )
  Scalars: 
    Debug: Off
    Modified Time: 441
    Reference Count: 1
    Registered Events: (none)
    Name: first_scalar
    Data type: double
    Size: 1
    MaxId: 0
    NumberOfComponents: 1
    Information: 0
    Name: first_scalar
    Number Of Components: 1
    Number Of Tuples: 1
    Size: 1
    MaxId: 0
    LookupTable: (none)
    Array: 0x8887198
  Vectors: (none)
  Normals: (none)
  TCoords: (none)
  Tensors: (none)
  GlobalIds: (none)
  PedigreeIds: (none)
  EdgeFlag: (none)

这里的问题是第二个标量只出现在名称空间中,但不出现在单元格数据中,我不知道如何访问它。例如,我可以使用vtk_out.GetCellData().GetArray('first_scalar'),但vtk_out.GetCellData().GetArray('second_scalar')会抛出错误。我究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

富有表现力的命令

  

reader.ReadAllScalarsOn()

放在reader.Update()之前完成工作,嗯。