Я хочу: указать набор точек, указать соединение, используя vtkCellArray
так, что он становится замкнутым кругом, создать vtkPolyData
от него и применить vtkTubeFilter
, чтобы придать ей объем.Создание замкнутого контура с vtkTubeFilter
Что я получаю: Петля, которая не соединяет первый и последний элементы правильно, несмотря на явное определение этого. Другая запутанная вещь заключается в том, что трубки, похоже, расширяются, приближаясь к неправильному началу/концу.
Что я сделал: Я начал с this example из вики ВТК о том, как создать полилинию. Вот код (Python 3.4, ВТК 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
или tubes
, что мне не хватает.
Это лучшее обходное решение, предлагаемое до сих пор, но [проблема связана с проблемой] (https://i.imgur.com/qlOOZxQ.png). В то время VTK работает над своей системой отслеживания ошибок, поэтому я не могу ее отправить. – Ian
Я думаю, что этот ответ так же хорош, как и он, вы также можете получить щедрость за это! – Ian