我在阅读包含多个标量的.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')
会抛出错误。我究竟做错了什么?
答案 0 :(得分:1)
富有表现力的命令
reader.ReadAllScalarsOn()
放在reader.Update()
之前完成工作,嗯。