1

在我将 ImageData 传递给它之后,行进立方体类不会生成任何东西。

我正在尝试从 3D numpy 数组生成表面。我使用 evtk 将数组导出到 .vti(结构化点)文件并存储为 pointData。然后,通过 vtkXMLImageDataReader 读取文件。将 Reader 的输出 (vtkImageData) 传递给 vtkMarchingCubes 类后,该类返回一个没有点或单元的 vtkPolyData,vtkImageData 在 vtk wiki 的示例中使用,MarchingCubes 类应该没有问题处理它。

我尝试导出Reader生成的ImageData,输出可以通过ParaView可视化没有任何问题。

我只是想知道 vtk 中的行进立方体生成表面是否有任何特殊要求?如果 3D numpy 可以直接转换为适合 MarchingCubes 的数据类型就更好了。

这是我读取 .vki 文件并将其传递给行进立方体的代码:

dataReader = vtk.vtkXMLImageDataReader()
dataReader.SetFileName('model_name.vti')
dataReader.Update()
contacts = vtk.vtkDiscreteMarchingCubes()
contacts.SetInputConnection(dataReader.GetOutputPort())
contacts.SetValue(0,1)
contacts.ComputeNormalsOn()
contacts.Update()
result = contacts.GetOutput()
4

2 回答 2

0

如果您希望在 python/numpy 世界中执行此操作,那么我建议从此处使用行进立方体实现(或查看 pyqtgraph 中的等值面例程,mayavi ...)。尽管有很多关于将数据移入和移出 VTK 的教程,但如果您已经在使用 numpy 进行编程,我不会混合使用这两种方法。

于 2014-07-31T01:09:36.267 回答
0

尽管这个问题已经很老了,但我遇到了一个非常相似的问题。

正如 YC.Chui 在他的评论中指出的,我们需要在读取的数据中设置标量值。对我来说,这有帮助:

reader = vtk.vtkXMLImageDataReader()
reader.SetFileName('model_name.vti')
reader.Update()

readData = reader.GetOutput()
readData.GetPointData().SetScalars(readData.GetPointData().GetArray(0))

我对 VTK 很陌生,完全不知道为什么这可以解决问题以及是否有更好的方法。随时评论和纠正我!

于 2021-05-01T18:05:41.920 回答