Question:
如何从 Python 中的 VTK 中提取数据集数组并将其保存在新文件中?e.g.对于具有幅度数据集的 VTKforce, 移位 and current仅提取移位并将其保存在较小的文件中。
Problem:
我在远程服务器上有数百个 4GB VTK 文件,我想提取为不同量级生成的几个数据集之一。在这些数据集中,我有标量和向量。
我编写了以下 VTK Python 代码,在其中读取非结构化网格,并获取第二个数据数组,以便稍后使用“vtkArrayWriter”保存它。
import vtk
Filename = 'file.vtk'
reader = vtk.vtkUnstructuredGridReader()
reader.SetFileName(Filename)
reader.ReadAllScalarsOn()
reader.ReadAllVectorsOn()
reader.Update()
obj = reader.GetOutput().GetPointData().GetArray(1)
writer = vtk.vtkArrayWriter()
writer.SetInputData(obj)
writer.SetFileName('test.vtk')
writer.Update()
该代码给我以下输出:
类型错误:SetInputData 参数 1:方法需要一个 vtkDataObject、一个
提供了 vtkFloatArray。
我没有设法将“vtkFloatArray”转换为“vtkDataObject”或找到支持“vtkFloatArray”作为输入的特定方法。我没有找到很多相关代码,但可能是我用谷歌搜索了错误的关键字。此时我陷入了困境。
Note:
这与通过在 Paraview 中应用过滤器“PassArays”然后保存可以实现的过程相同,但是考虑到我的问题的大小和特征,这不是一个可行的解决方案。
VTK 有一个vtkPassArrays
过滤器的文档是here https://www.vtk.org/doc/nightly/html/classvtkPassArrays.html#details。您需要知道输出文件中所需的数组的名称以及该数组是否是点/单元/场数据。
import vtk as v
Filename = 'file.vtk'
reader = v.vtkUnstructuredGridReader()
reader.SetFileName(Filename)
reader.ReadAllScalarsOn()
reader.ReadAllVectorsOn()
pa = v.vtkPassArrays()
pa.SetInputConnection(reader.GetOutputPort())
pa.AddArray( 0, 'Array1Name' ) # 0 for PointData, 1 for CellData, 2 for FieldData
writer = v.vtkDataSetWriter()
writer.SetFileName('test.vtk')
writer.SetInputConnection(pa.GetOutputPort())
writer.Update()
writer.Write()
输出文件test.vtk
将包含所有点和单元格,但仅包含您指定的数组名称。如果您只需要数组而不需要点或单元格,则可以使用以下解决方案VTK NumPy 集成 https://blog.kitware.com/improved-vtk-numpy-integration and numpy.savetxt https://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html.
import numpy as np
import vtk as v
from vtk.numpy_interface import dataset_adapter as dsa
reader = v.vtkUnstructuredGridReader()
reader.SetFileName(Filename)
reader.ReadAllScalarsOn()
reader.ReadAllVectorsOn()
reader.Update()
usg = dsa.WrapDataObject( reader.GetOutput() )
array1 = usg.PointData['Array1Name'] # Assuming you know the name of the array
# array1 is a child class type of numpy.ndarray type
np.savetxt('array1.dat', array1, fmt='%4.5f' )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)