Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将STL对象转换为VTK几何体_Python_Stl_Boolean_Vtk - Fatal编程技术网

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

在python中将STL对象转换为VTK几何体,python,stl,boolean,vtk,Python,Stl,Boolean,Vtk,我想用VTK库中的几何原语对STL文件执行布尔运算 我的问题是将STL几何体转换为VTK布尔对象将忽略的内容 我尝试了以下方法 import vtk filename = 'gyroid.stl' reader = vtk.vtkSTLReader() reader.SetFileName(filename) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(reader.GetOutputPort()) gyroid =

我想用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
文件“D:\Python codes\VTK\untitled8.py”,第29行,在
boolean.AddFunction(gyroid)
TypeError:AddFunction参数%Id:%V
如果我将
gyroid
替换为
mapper


如何将STL网格转换为VTK可用的内容?或者我不能这样做&需要去别处看看吗?

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

vtkImplicitBoolean
使用其函数,即可以生成数据的类,如vtkSphere。请看这里 这是给你的

由于已加载数据集,因此无法使用此数据集。相反,使用
vtkBooleanOperationPolyDataFilter
并使用
vtkSphereSource
生成一个球体。及 例如

示例

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

这是可行的,但只有当裁剪球体的半径=30时,所有其他值都会导致一个空集。事实上,没有一个布尔运算符工作正常!经过调查,这并不是VTK最好的部分。。。关于在VTK中使用。谢谢Nico,我已经就此提出了一个新问题