我想要的:指定一组点,使用vtkCellArray
指定连接性,使其成为一个闭合的圆,从中创建一个vtkPolyData
,并应用vtkTubeFilter
给它一些体积。在
我得到的是:一个循环,它没有正确地连接第一个和最后一个元素,尽管它明确地定义了它。另一个令人困惑的事情是,在接近错误连接的起点/终点时,管道似乎变得更宽。在
我做了些什么:我从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
或{
管过滤器不支持生成周期性管。应该可以通过使接缝(管的相交处)共线来近似效果。所以不是
你可以这样做:
^{pr2}$您可能希望将CappingOff()设置为禁用,因为接缝将出现在线段的中间。在
“凹凸”也会移动到接缝处,似乎是VTK中的一个bug。你应该搜索VTK的bug跟踪器,如果还没有列出问题,就提交一份报告。在
相关问题 更多 >
编程相关推荐