[英]Determine if legacy VTK file is valid using Python
我需要使用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
该文件中的错误是,当标头指示应该有两个单元格数据时,仅给出了一个单元格数据。 这是读取此数据的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文件并在读取之前告诉我它是否有效?
尝试使用数据读取器类的IsFileValid
或IsFileUnstructuredGrid
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.