在 python 中将 STL 对象转换为 VTK 几何体

Convert STL object to VTK geometry in python

我想用 VTK 库中的几何图元对 STL 文件进行布尔运算。

我的问题是将 STL 几何体转换为 VTK 布尔对象将排除的对象。

我尝试了以下...

import vtk

filename = 'gyroid.stl' 
reader = vtk.vtkSTLReader()
reader.SetFileName(filename)
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(reader.GetOutputPort())
gyroid = vtk.vtkActor()
gyroid.SetMapper(mapper)

sphere = vtk.vtkSphere()
sphere.SetRadius(30)
sphere.SetCenter(0, 0, 0)

boolean = vtk.vtkImplicitBoolean()
boolean.SetOperationTypeToIntersection()
boolean.AddFunction(gyroid)
boolean.AddFunction(sphere)

但是得到如下错误...

File "D:\Python codes\VTK\untitled8.py", line 29, in <module>
    boolean.AddFunction(gyroid)

TypeError: AddFunction argument %Id: %V

如果我将 gyroid 替换为 mapper

,它会抛出相同的错误

如何将 STL 网格转换为 VTK 可用的东西?或者我不能这样做并且需要寻找其他地方吗?

问题不在于在 VTK 中转换 STL,而在于如何使用 VTK API :)

vtkImplicitBoolean 适用于隐式函数,即 类 可以生成数据,例如 vtkSphere。在这里查看 doc 这里是 usage

因为你有一个加载的数据集,你不能使用它。相反,使用 vtkBooleanOperationPolyDataFilter 并生成一个带有 vtkSphereSource 的球体。 Here and here 例如。

例子

sphere = vtk.vtkSphereSource()
booleanOperation = vtk.vtkBooleanOperationPolyDataFilter()
booleanOperation.SetOperationToIntersection()
booleanOperation.SetInputConnection(0, reader.GetOutputPort())
booleanOperation.SetInputConnection(1, sphere.GetOutputPort())

将 .stl 格式转换为 .vtk 格式的代码。使用 pip install vtk 为此安装 vtk。

import sys
import vtk

# Read the .stl file
filename = sys.argv[1] 
a = vtk.vtkSTLReader()
a.SetFileName(filename)
a.Update()
a = a.GetOutput()

# Write the .vtk file
filename = filename.replace('.stl', '.vtk')
b = vtk.vtkPolyDataWriter()
b.SetFileName(filename)
b.SetInputData(a)
b.Update()