使用Python确定旧版VTK文件是否有效

时间:2016-10-30 22:38:49

标签: python numpy vtk

我需要用Python阅读传统的VTK文件。我想使用vtk模块。我一直很成功,但我需要能够在继续之前检测VTK文件是否有效,并且我找不到可以执行此操作的类型绑定过程或属性。这是VTK文件的最小示例。


# vtk DataFile Version 2.0
Scalar Data
ASCII
DATASET UNSTRUCTURED_GRID
POINTS      12 double
 -6.35000002E-03  0.00000000E+00  0.00000000E+00
  0.00000000E+00  0.00000000E+00  0.00000000E+00
 -6.35000002E-03  6.35000002E-03  0.00000000E+00
  0.00000000E+00  6.35000002E-03  0.00000000E+00
 -6.35000002E-03  0.00000000E+00  3.86600012E-02
  0.00000000E+00  0.00000000E+00  3.86600012E-02
 -6.35000002E-03  6.35000002E-03  3.86600012E-02
  0.00000000E+00  6.35000002E-03  3.86600012E-02
 -6.35000002E-03  0.00000000E+00  3.86600012E-02
  0.00000000E+00  0.00000000E+00  3.86600012E-02
 -6.35000002E-03  6.35000002E-03  3.86600012E-02
 -6.35000002E-03  6.35000002E-03  3.86600012E-02
CELLS         2        18
         8         0         1         2         3         4         5         6         7
         8         8         9        10        11        12        13        14        15
CELL_TYPES       2
11
11
CELL_DATA       2
SCALARS testdata float
LOOKUP_TABLE default
  1.0000E+00

此文件中的错误是当标题指示应该有两个时,只给出1个单元格数据。这是我的python文件来读取这些数据。


import vtk 
from vtk.util import numpy_support as VN

f1=vtk.vtkUnstructuredGridReader()
f1.SetFileName('test.vtk')
f1.ReadAllScalarsOn()
f1.Update()
arr=VN.vtk_to_numpy(f1.GetOutput().GetCellData().GetArray('testdata'))
print arr 

这是输出:

Generic Warning: In /home/vagrant/pisi/tmp/VTK-6.3.0-3/work/VTK-6.3.0/IO/Legacy/vtkDataReader.cxx, line 1379
Error reading ascii data. Possible mismatch of datasize with declaration.

[ 1.00000000e+00 7.84727140e-44]

所以你看到它正在检测不一致性,但它不会使代码崩溃。相反,我的numpy数组在数组中获得了一个虚假的值。有没有办法从vtk获取读取错误,所以我可以处理它?或者是否有一些程序会解析VTK文件,并在读取之前告诉我它是否有效?

1 个答案:

答案 0 :(得分:0)

尝试使用数据阅读器类的IsFileValidIsFileUnstructuredGrid方法。