相关文章推荐
一身肌肉的汤圆  ·  Servlet--HttpServletRe ...·  1 年前    · 

如何将.vtu文件中的单元格数据转换为点数据

0 人关注

我对使用.vtu文件真的很陌生,我需要从解决方案中的一些数组中提取网格数据和数据,将它们存储在两个.npy文件中,一个用于网格,一个用于变量,然后继续进行一些后处理。 虽然我能够从网格中提取点,从数组中提取单元数据,并在numpy数组中进行转换,但我不知道如何将单元数据转换为点数据。

Here is my code:

reader = vtk.vtkXMLUnstructuredGridReader() 
reader.SetFileName("myfile.vtu")
reader.Update()
# Get the coordinates of nodes in the mesh
nodes_vtk_array= reader.GetOutput().GetPoints().GetData()
OH_vtk_array = reader.GetOutput().GetCellData().GetArray('OH mass frac.')
#Get the coordinates of the nodes
nodes_nummpy_array = vtk_to_numpy(nodes_vtk_array)
x,y,z= nodes_nummpy_array[:,0] , nodes_nummpy_array[:,1] , nodes_nummpy_array[:,2]
OH_numpy_array = vtk_to_numpy(OH_vtk_array)
OH = OH_numpy_array

我希望有人能帮助我,即使这是个非常愚蠢的问题:)

非常感谢!!!

python
numpy
vtk
Federica Tonti
Federica Tonti
发布于 2021-03-03
2 个回答
Nico Vuaille
Nico Vuaille
发布于 2022-03-18
已采纳
0 人赞同

你可以使用 细胞数据到点数据 过滤器。(python为相同的API)

Something like:

converter = vtk.vtkCellDataToPointData()
converter.ProcessAllArraysOn()
converter.SetInputConnection(reader.GetOutputPort())
converter.Update()
OH_vtk_array = converter.GetOutput().GetPointData().GetArray('OH mass frac.')
    
非常感谢你的回答!我试了一下,不幸的是我得到了这个。 AttributeError: 'vtkFiltersCorePython.vtkCellDataToPointData' object has no attribute 'SetProcessAllArraysOn''.也许我错过了一些导入或其他的东西?@Nico Vuaille
If I comment SetProcessAllArraysOn() and I execute the program, then I get **File "/neshvtu3.py", line 39, in <module> OH_numpy_array = vtk_to_numpy(OH_vtk_array) ** _File "/anaconda2/lib/python2.7/site-packages/vtk/util/numpy_support.py", line 215, in vtk_to_numpy typ = vtk_array.GetDataType() _ AttributeError: 'NoneType' object has no attribute 'GetDataType'
对不起,我犯了一个错误,是 ProcessAllArraysOn () 。我更新了我的答案
我还是会遇到这种情况:( 也许需要补充的是,我使用的是Python 2.7,也许我必须换成Python 3。 AttributeError: 'vtkFiltersCorePython.vtkCellDataToPointData'对象没有属性'ProcessAllArraysOn'。 @NicoVuaille
哦,好吧,我走得太快了,对不起......答案更新
Aakash Patil
Aakash Patil
发布于 2022-03-18
0 人赞同

来自vtkIOXMLPython.vtkXMLUnstructuredGridReader的信息

reader = vtk.vtkXMLUnstructuredGridReader()  
reader.SetFileName(filenameVTU) 
reader.Update()

From vtkCommonCorePython.vtkPoints

points = reader.GetOutput().GetPoints()
coordinates = np.array(points.GetData())

来自vtkCommonExecutionModelPython.vtkAlgorithmOutput

reader.GetOutputPort() 

来自于vtkFiltersCorePython.vtkCellDataToPointData

converter = vtk.vtkCellDataToPointData()    

这里,SetInputConnection方法需要一个vtkAlgorithmOutput

converter.SetInputConnection(reader.GetOutputPort() )
converter.Update() 

最后,从vtkCommonCorePython.vtkDoubleArray开始