如何正确使用 vtkCellDataToPointData - vtk Python 库

how to properly use vtkCellDataToPointData - vtk Python library

我正在尝试利用 vtk Python 库将一些非结构化网格写成旧版 .vtk 格式

我可以毫无问题地创建几何体、单元格数据和点数据并将它们写入 vtk。

我遇到的问题是我想添加获取单元格数据并将其转换为点数据的功能。

见以下代码:

import vtk
#dfsu data
pts = df.mesh.generate_node_vertexes()
cls = df.mesh.generate_element_vertex_indexes()
cnts = df.mesh.generate_element_vertex_count()
#vtk instantiate
points = vtk.vtkPoints()
cell = vtk.vtkCellArray()
mesh_1 = vtk.vtkUnstructuredGrid()
#loop through points
for pt in pts:
    points.InsertNextPoint(pt)
#set points
mesh_1.SetPoints(points)
#loop through cells
for cl, cnt in zip(cls, cnts):
    if cnt == 3:
        tri = vtk.vtkTriangle()
        for i,j in enumerate(cl):
            tri.GetPointIds().SetId(i, j)
        mesh_1.InsertNextCell(tri.GetCellType(), tri.GetPointIds())
    elif cnt == 4:
        quad = vtk.vtkQuad()
        for i,j in enumerate(cl):
            quad.GetPointIds().SetId(i,j)
        mesh_1.InsertNextCell(quad.GetCellType(), quad.GetPointIds())
#add cell data
arr = vtk.vtkDoubleArray()
arr.SetName('test1')
for i in range(len(cls)):
    arr.InsertNextTuple([0.5])
arr1 = vtk.vtkDoubleArray()
arr1.SetName('test2')
for i in range(len(cls)):
    arr1.InsertNextTuple([0.25])
mesh_1.GetCellData().AddArray(arr)
mesh_1.GetCellData().AddArray(arr1)

#convert to point data - THIS IS THE PART I CANT FIGURE OUT!
c2p = vtk.vtkCellDataToPointData()
c2p.SetInputData(arr)

#add point data
##here i want to add the converted point data
##

#write
writer = vtk.vtkUnstructuredGridWriter()
writer.SetFileName('test.vtk')
writer.SetInputData(mesh_1)
writer.Write()

我对 VTK 很陌生,有点困惑。我不知道如何获取我的单元格数据并将其转换为点数据。

我试过:

c2p.SetInputData(arr)
c2p.SetInputData(mesh_1.GetCellData().GetArray(0))

和一堆其他的随机命令,真的不知道该怎么做。

欢迎任何建议 - 我看过很多示例,但与我尝试做的略有不同..

弄清楚了..我实际上必须将 vtkUnstructuredGrid 传递到单元格中以指向过滤器

c2p = vtk.vtkCellDataToPointData()
c2p.SetInputData(mesh_1)
c2p.Update()
ptdata = c2p.GetOutput()

这会输出另一个 vtkUnstructuredGrid 对象,其中单元格数据已转换为点数据,然后我可以将其传递给编写器