我有3个.stl文件,每个文件都包含一个从VTK生成的圆柱体(通过vtkLineSource + vtkTubeFilter +带CappingOn的vtkTriangleFilter)。每个圆柱体具有不同的方向,在一端相交,并且具有三角形网格。
我想使用vtkBooleanOperationPolyDataFilter()将这三个柱体连接在一起。我使用下面的代码执行此操作。
from vtk import *
def main():
a = vtkSTLReader()
a.SetFileName('booleanTest0.stl')
b = vtkSTLReader()
b.SetFileName('booleanTest1.stl')
c = vtkSTLReader()
c.SetFileName('booleanTest2.stl')
boolOp1 = vtkBooleanOperationPolyDataFilter()
boolOp1.SetOperationToUnion()
boolOp1.SetInputConnection(0,a.GetOutputPort())
boolOp1.SetInputConnection(1,b.GetOutputPort())
boolOp1.Update()
boolOp2 = vtkBooleanOperationPolyDataFilter()
boolOp2.SetOperationToUnion()
boolOp2.SetInputConnection(0,boolOp1.GetOutputPort())
boolOp2.SetInputConnection(1,c.GetOutputPort())
boolOp2.Update()
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(boolOp2.GetOutputPort(0))
actor = vtkActor()
actor.SetMapper(mapper)
map1.SetInputConnection(a.GetOutputPort())
map2.SetInputConnection(b.GetOutputPort())
map3.SetInputConnection(c.GetOutputPort())
ren = vtkRenderer()
ren.AddActor(actor)
renwin = vtkRenderWindow()
renwin.AddRenderer(ren)
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(renwin)
renwin.Render()
iren.Initialize()
iren.Start()
main()
代码无法提供分段错误:
Segmentation fault (core dumped)
经过一些测试后,我发现传递了第一个布尔值,但第二个布尔值的更新导致了分段错误。
boolOp2.Update()
有关如何规避此问题的任何想法?我正在使用Arch Linux和Python 2.7;使用VTK 6.1.0和5.10进行测试。
您可以在此处下载:https://drive.google.com/file/d/0B27CeIphBFy-SEtLc1NPd3Z0bGs/view?usp=sharing