Was ich will: eine Reihe von Punkten angeben, geben Sie die Konnektivität mit vtkCellArray
, so dass es einem geschlossenen Kreis wird eine vtkPolyData
daraus erstellen und anwenden, die vtkTubeFilter
ihm etwas Volumen zu geben.Erstellen eine geschlossene Schleife mit vtkTubeFilter
Was ich bekomme: Eine Schleife, die das erste und letzte Element nicht korrekt verbindet, obwohl dies explizit definiert ist. Die andere verwirrende Sache ist, dass die Röhren breiter zu werden scheinen, wenn sie sich dem falsch angeschlossenen Start/Ende nähern.
Was ich tat: begann ich mit this example vom VTK Wiki auf, wie eine Polylinie zu erstellen. Hier ist der Code (Python 3.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)
Ich hoffe, dass jemand irgendwelche Vorschläge auf, wie dieses Verhalten zu beheben. Ich denke an einen Parameter in polydata
oder tubes
, die ich vermisse.
Dies ist der bisher beste Workaround, aber [der Bump ist ein Problem] (https://i.imgur.com/qlOOZxQ.png). VTK arbeitet gerade an ihrem Bug-Tracking-System, so dass ich es nicht einreichen kann. – Ian
Ich denke, diese Antwort ist so gut wie es geht, du könntest das Kopfgeld dafür bekommen! – Ian