在 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()
我想用 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()