使用vtkTubeFi创建闭环

2024-07-08 15:55:23 发布

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

我想要的:指定一组点,使用vtkCellArray指定连接性,使其成为一个闭合的圆,从中创建一个vtkPolyData,并应用vtkTubeFilter给它一些体积。在

我得到的是:一个循环,它没有正确地连接第一个和最后一个元素,尽管它明确地定义了它。另一个令人困惑的事情是,在接近错误连接的起点/终点时,管道似乎变得更宽。在

this

我做了些什么:我从VTK wiki上的this example开始学习如何创建多段线。以下是代码(Python3.4、VTK 7.0):

import vtk


def rendering(mapper):
    """Takes mapper and handles the rendering."""
    actor = vtk.vtkActor()
    actor.SetMapper(mapper)

    # Create a renderer, render window, and interactor
    renderer = vtk.vtkRenderer()
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.AddRenderer(renderer)
    renderWindowInteractor = vtk.vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)
    # Add the actors to the scene
    renderer.AddActor(actor)
    # Render and interact
    renderWindow.Render()
    renderWindowInteractor.Start()
    return

pts = vtk.vtkPoints()
pts.SetNumberOfPoints(4)
pts.SetPoint(0, 0.5, 0, 0)
pts.SetPoint(1, 1, 0.5, 0)
pts.SetPoint(2, 0.5, 1, 0)
pts.SetPoint(3, 0, 0.5, 0)

lines = vtk.vtkCellArray()
lines.InsertNextCell(5)
lines.InsertCellPoint(0)
lines.InsertCellPoint(1)
lines.InsertCellPoint(2)
lines.InsertCellPoint(3)
lines.InsertCellPoint(0)

poly = vtk.vtkPolyData()
poly.SetPoints(pts)
poly.SetLines(lines)

tubes = vtk.vtkTubeFilter()
tubes.SetInputData(poly)
tubes.CappingOn()
tubes.SidesShareVerticesOff()
tubes.SetNumberOfSides(4)
tubes.SetRadius(0.1)
tubes.Update()

mapper = vtk.vtkPolyDataMapper()
mapper.SetInputData(tubes.GetOutput())
rendering(mapper)

我希望有人对如何纠正这种行为有什么建议。我想在polydata或{}中缺少一个参数。在


Tags: andtheptsrendereractorlinesmappervtk
1条回答
网友
1楼 · 发布于 2024-07-08 15:55:23

管过滤器不支持生成周期性管。应该可以通过使接缝(管的相交处)共线来近似效果。所以不是

pts = vtk.vtkPoints()
pts.SetNumberOfPoints(4)
pts.SetPoint(0, 0.5, 0, 0)
pts.SetPoint(1, 1, 0.5, 0)
pts.SetPoint(2, 0.5, 1, 0)
pts.SetPoint(3, 0, 0.5, 0)

lines = vtk.vtkCellArray()
lines.InsertNextCell(5)
lines.InsertCellPoint(0)
lines.InsertCellPoint(1)
lines.InsertCellPoint(2)
lines.InsertCellPoint(3)
lines.InsertCellPoint(0)

你可以这样做:

^{pr2}$

您可能希望将CappingOff()设置为禁用,因为接缝将出现在线段的中间。在

“凹凸”也会移动到接缝处,似乎是VTK中的一个bug。你应该搜索VTK的bug跟踪器,如果还没有列出问题,就提交一份报告。在

相关问题 更多 >

    热门问题