VTK(Python)算法更新时的分段错误

2024-07-08 17:18:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个.stl文件,每个文件都包含一个从VTK生成的圆柱体(通过vtkLineSource+vtkTubeFilter+vtkTriangleFilter和CappingOn)。每个圆柱体有不同的方向,在一端相交,并且有一个三角形网格。在

我想使用vtkTooleanOperationPolyDataFilter()将这三个圆柱体连接在一起。我用下面的代码来做这个。在

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()

代码失败,出现分段错误:

^{pr2}$

经过一些测试,我发现第一个布尔值通过了,但是第二个布尔值的更新导致了分割错误。在

boolOp2.Update()

关于如何规避这个问题有什么想法吗?我在python2.7中使用archlinux;在vtk6.1.0和5.10中进行了测试。在

你可以在这里下载stl:https://drive.google.com/file/d/0B27CeIphBFy-SEtLc1NPd3Z0bGs/view?usp=sharing


Tags: 文件updateactormapperstlren圆柱体getoutputport

热门问题