def __init__(self, module_manager): SimpleVTKClassModuleBase.__init__(self, module_manager, vtk.vtkRibbonFilter(), 'Processing.', ('vtkPolyData', ), ('vtkPolyData', ), replaceDoc=True, inputFunctions=None, outputFunctions=None)
def __init__ (self, mod_m): debug ("In PointStreamer::__init__ ()") Common.state.busy () Base.Objects.Module.__init__ (self, mod_m) self.sphere_src = vtk.vtkSphereSource () self.sphere_map = vtk.vtkPolyDataMapper () self.sphere_act = vtk.vtkActor () self.seed = SeedManager () self.radius = 1.0 self.cen = [0.0, 0.0, 0.0] self.n_pnt = 50 self.strmln_mode = 0 self.color_mode = 1 # 1 is vector, 0 is scalar, -1 is no color self.integration_mode = 2 # 2 is Runge-Kutta 2 and 4 is RK 4. self.strmln = vtk.vtkStreamLine () self.ribbonf = vtk.vtkRibbonFilter () self.tubef = vtk.vtkTubeFilter () self.mapper = self.stream_map = vtk.vtkPolyDataMapper () self.actor = self.stream_act = vtk.vtkActor () self.done_init = 0 Common.state.idle ()
outlineActor = vtk.vtkActor() outlineActor.SetMapper(outlineMapper) outlineActor.GetProperty().SetColor(1, 1, 1) # Compute streamlines streamline = vtk.vtkStreamTracer() streamline.SetSourceConnection(plane.GetOutputPort()) streamline.SetInputConnection(reader.GetOutputPort()) streamline.SetIntegrationDirectionToForward() #streamline.SetIntegrationDirectionToBackward() #streamline.SetIntegrationDirectionToBoth() streamline.SetMaximumPropagation(1) streamline.SetComputeVorticity(True) # Visualize stream as ribbons (= Stream ribbons); i.e. we need to pass the streamlines through the ribbon filter streamRibbons = vtk.vtkRibbonFilter() streamRibbons.SetInputConnection(streamline.GetOutputPort()) streamRibbons.SetWidth(0.01) streamRibbons.Update() streamRibbonsMapper = vtk.vtkPolyDataMapper() streamRibbonsMapper.SetScalarModeToUsePointFieldData() streamRibbonsMapper.SetInputConnection(streamRibbons.GetOutputPort()) # ***TODO: apply a transfer function to the stream ribbons streamRibbonsActor = vtk.vtkActor() streamRibbonsActor.SetMapper(streamRibbonsMapper) # Visualize stream as tubes (= Stream tubes) streamTubes = vtk.vtkTubeFilter() streamTubes.SetInputConnection(streamline.GetOutputPort())
def AddStock(renderers, filename, name, zPosition): print("Adding", name) # Read the data PolyDataRead = vtk.vtkPolyDataReader() PolyDataRead.SetFileName(filename) PolyDataRead.Update() # Create the labels. TextSrc = vtk.vtkVectorText() TextSrc.SetText(name) numberOfPoints = PolyDataRead.GetOutput().GetNumberOfPoints() nameIndex = int((numberOfPoints - 1) * 0.8) nameLocation = PolyDataRead.GetOutput().GetPoint(nameIndex) x = nameLocation[0] * 0.15 y = nameLocation[1] + 5.0 z = zPosition RibbonFilter = vtk.vtkRibbonFilter() RibbonFilter.SetInputConnection(PolyDataRead.GetOutputPort()) RibbonFilter.VaryWidthOn() RibbonFilter.SetWidthFactor(5) RibbonFilter.SetDefaultNormal(0, 1, 0) RibbonFilter.UseDefaultNormalOn() Extrude = vtk.vtkLinearExtrusionFilter() Extrude.SetInputConnection(RibbonFilter.GetOutputPort()) Extrude.SetVector(0, 1, 0) Extrude.SetExtrusionType(1) Extrude.SetScaleFactor(0.7) Transform = vtk.vtkTransform() Transform.Translate(0, 0, zPosition) Transform.Scale(0.15, 1, 1) TransformFilter = vtk.vtkTransformPolyDataFilter() TransformFilter.SetInputConnection(Extrude.GetOutputPort()) TransformFilter.SetTransform(Transform) for r in range(0, len(renderers)): LabelMapper = vtk.vtkPolyDataMapper() LabelMapper.SetInputConnection(TextSrc.GetOutputPort()) LabelActor = vtk.vtkFollower() LabelActor.SetMapper(LabelMapper) LabelActor.SetPosition(x, y, z) LabelActor.SetScale(2, 2, 2) LabelActor.SetOrigin(TextSrc.GetOutput().GetCenter()) # Increment zPosition. zPosition += 8.0 StockMapper = vtk.vtkPolyDataMapper() StockMapper.SetInputConnection(TransformFilter.GetOutputPort()) StockMapper.SetScalarRange(0, 8000) StockActor = vtk.vtkActor() StockActor.SetMapper(StockMapper) renderers[r].AddActor(StockActor) renderers[r].AddActor(LabelActor) LabelActor.SetCamera(renderers[r].GetActiveCamera()) return zPosition
Stream0.SetSourceConnection(LineSourceWidget0.GetOutputPort()) Stream0.SetIntegrationStepUnit(2) Stream0.SetMaximumPropagation(20) Stream0.SetInitialIntegrationStep(0.5) Stream0.SetIntegrationDirection(0) Stream0.SetIntegratorType(0) Stream0.SetMaximumNumberOfSteps(2000) Stream0.SetTerminalSpeed(1e-12) #del mbds aa = vtk.vtkAssignAttribute() aa.SetInputConnection(Stream0.GetOutputPort()) aa.Assign("Normals", "NORMALS", "POINT_DATA") Ribbon0 = vtk.vtkRibbonFilter() Ribbon0.SetInputConnection(aa.GetOutputPort()) Ribbon0.SetWidth(0.1) Ribbon0.SetAngle(0) Ribbon0.SetDefaultNormal(0, 0, 1) Ribbon0.SetVaryWidth(0) LookupTable1 = vtk.vtkLookupTable() LookupTable1.SetNumberOfTableValues(256) LookupTable1.SetHueRange(0, 0.66667) LookupTable1.SetSaturationRange(1, 1) LookupTable1.SetValueRange(1, 1) LookupTable1.SetTableRange(0.197813, 0.710419) LookupTable1.SetVectorComponent(0) LookupTable1.Build()
mf.Merge(2,"vx",0) #mf.Print() aa = vtk.vtkAssignAttribute() aa.SetInputConnection(mf.GetOutputPort()) aa.Assign("merged","SCALARS","POINT_DATA") aa2 = vtk.vtkAssignAttribute() aa2.SetInputConnection(aa.GetOutputPort()) aa2.Assign("SCALARS","VECTORS","POINT_DATA") sl = vtk.vtkStreamLine() sl.SetInputConnection(aa2.GetOutputPort()) sl.SetStartPosition(2,-2,26) sl.SetMaximumPropagationTime(40) sl.SetIntegrationStepLength(0.2) sl.SetIntegrationDirectionToForward() sl.SetStepLength(0.001) rf = vtk.vtkRibbonFilter() rf.SetInputConnection(sl.GetOutputPort()) rf.SetWidth(1.0) rf.SetWidthFactor(5) slMapper = vtk.vtkPolyDataMapper() slMapper.SetInputConnection(rf.GetOutputPort()) slMapper.ImmediateModeRenderingOn() slActor = vtk.vtkActor() slActor.SetMapper(slMapper) outline = vtk.vtkStructuredGridOutlineFilter() outline.SetInputData(output) outlineMapper = vtk.vtkPolyDataMapper() outlineMapper.SetInputConnection(outline.GetOutputPort()) outlineActor = vtk.vtkActor() outlineActor.SetMapper(outlineMapper) # Add the actors to the renderer, set the background and size
ps.SetPoint2(2, -2, 32) psMapper = vtk.vtkPolyDataMapper() psMapper.SetInputConnection(ps.GetOutputPort()) psActor = vtk.vtkActor() psActor.SetMapper(psMapper) psActor.GetProperty().SetRepresentationToWireframe() rk4 = vtk.vtkRungeKutta4() streamer = vtk.vtkStreamTracer() streamer.SetInputData(output) streamer.SetSourceData(ps.GetOutput()) streamer.SetMaximumPropagation(100) streamer.SetInitialIntegrationStep(.2) streamer.SetIntegrationDirectionToForward() streamer.SetComputeVorticity(1) streamer.SetIntegrator(rk4) rf = vtk.vtkRibbonFilter() rf.SetInputConnection(streamer.GetOutputPort()) rf.SetInputArrayToProcess(1, 0, 0, vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS, "Normals") rf.SetWidth(0.1) rf.SetWidthFactor(5) streamMapper = vtk.vtkPolyDataMapper() streamMapper.SetInputConnection(rf.GetOutputPort()) streamMapper.SetScalarRange(output.GetScalarRange()) streamline = vtk.vtkActor() streamline.SetMapper(streamMapper) outline = vtk.vtkStructuredGridOutlineFilter() outline.SetInputData(output) outlineMapper = vtk.vtkPolyDataMapper() outlineMapper.SetInputConnection(outline.GetOutputPort()) outlineActor = vtk.vtkActor()
import vtk from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() # create pipeline # reader = vtk.vtkPolyDataReader() reader.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/vtk.vtk") # Read a ruler texture r = vtk.vtkPNGReader() r.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/ruler.png") atext = vtk.vtkTexture() atext.SetInputConnection(r.GetOutputPort()) atext.InterpolateOn() # produce some ribbons ribbon = vtk.vtkRibbonFilter() ribbon.SetInputConnection(reader.GetOutputPort()) ribbon.SetWidth(0.1) ribbon.SetGenerateTCoordsToUseLength() ribbon.SetTextureLength(1.0) ribbon.UseDefaultNormalOn() ribbon.SetDefaultNormal(0,0,1) ribbonMapper = vtk.vtkPolyDataMapper() ribbonMapper.SetInputConnection(ribbon.GetOutputPort()) ribbonActor = vtk.vtkActor() ribbonActor.SetMapper(ribbonMapper) ribbonActor.GetProperty().SetColor(1,1,0) ribbonActor.SetTexture(atext) # produce some tubes tuber = vtk.vtkTubeFilter() tuber.SetInputConnection(reader.GetOutputPort())
# line nt = 8 def lamFunc(ts): return -numpy.pi + ts * 2 * numpy.pi def latFunc(ts): return -50. * (numpy.pi / 180.) * numpy.ones((nt, ), numpy.float64) line = PiecewiseLinearLine(lamFunc, latFunc, nt=nt, radius=1.04) tubes = vtk.vtkRibbonFilter() tubes.SetWidth(0.10) tubes.SetAngle(90.0) tubes.SetInputData(line.poly) lineMapper = vtk.vtkPolyDataMapper() lineMapper.SetInputConnection(tubes.GetOutputPort()) lineMapper.Update() lineActor = vtk.vtkActor() lineActor.SetMapper(lineMapper) lineActor.GetProperty().SetSpecular(1.0) lineActor.GetProperty().SetColor(0.5, 0.08, 0) lineActor.GetProperty().SetInterpolationToPhong() actors.append(lineActor) lights = []
from vtk.test import Testing from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() # create pipeline # reader = vtk.vtkPolyDataReader() reader.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/vtk.vtk") # Read a ruler texture r = vtk.vtkPNGReader() r.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/ruler.png") atext = vtk.vtkTexture() atext.SetInputConnection(r.GetOutputPort()) atext.InterpolateOn() # produce some ribbons ribbon = vtk.vtkRibbonFilter() ribbon.SetInputConnection(reader.GetOutputPort()) ribbon.SetWidth(0.1) ribbon.SetGenerateTCoordsToUseLength() ribbon.SetTextureLength(1.0) ribbon.UseDefaultNormalOn() ribbon.SetDefaultNormal(0, 0, 1) ribbonMapper = vtk.vtkPolyDataMapper() ribbonMapper.SetInputConnection(ribbon.GetOutputPort()) ribbonActor = vtk.vtkActor() ribbonActor.SetMapper(ribbonMapper) ribbonActor.GetProperty().SetColor(1, 1, 0) ribbonActor.SetTexture(atext) # produce some tubes tuber = vtk.vtkTubeFilter() tuber.SetInputConnection(reader.GetOutputPort())
def __init__(self, parent=None): super(VTKFrame, self).__init__(parent) self.vtkWidget = QVTKRenderWindowInteractor(self) vl = QtGui.QVBoxLayout(self) vl.addWidget(self.vtkWidget) vl.setContentsMargins(0, 0, 0, 0) self.ren = vtk.vtkRenderer() self.ren.SetBackground(0.1, 0.2, 0.4) self.vtkWidget.GetRenderWindow().AddRenderer(self.ren) self.iren = self.vtkWidget.GetRenderWindow().GetInteractor() nV = 256 # No. of vertices rS = 2.0 # Spiral radius nCyc = 3 # No. of spiral cycles h = 10.0 # Height # Create points and cells for a spiral points = vtk.vtkPoints() for i in range(nV): vX = rS * math.cos(2 * math.pi * nCyc * i / (nV - 1)) vY = rS * math.sin(2 * math.pi * nCyc * i / (nV - 1)) vZ = h * i / nV points.InsertPoint(i, vX, vY, vZ) lines = vtk.vtkCellArray() lines.InsertNextCell(nV) for i in range(nV): lines.InsertCellPoint(i) polyData = vtk.vtkPolyData() polyData.SetPoints(points) polyData.SetLines(lines) # Create a mapper and actor lineMapper = vtk.vtkPolyDataMapper() lineMapper.SetInput(polyData) lineActor = vtk.vtkActor() lineActor.SetMapper(lineMapper) lineActor.GetProperty().SetColor(0.8, 0.4, 0.2) lineActor.GetProperty().SetLineWidth(3) # Cteate a ribbon around the line ribbonFilter = vtk.vtkRibbonFilter() ribbonFilter.SetInput(polyData) ribbonFilter.SetWidth(0.4) # Create a mapper and actor ribbonMapper = vtk.vtkPolyDataMapper() ribbonMapper.SetInputConnection(ribbonFilter.GetOutputPort()) ribbonActor = vtk.vtkActor() ribbonActor.SetMapper(ribbonMapper) self.ren.AddActor(lineActor) self.ren.AddActor(ribbonActor) self.ren.ResetCamera() self._initialized = False
streamer = vtk.vtkStreamTracer() streamer.SetInputConnection(reader.GetOutputPort()) streamer.SetStartPosition(0.1, 2.1, 0.5) streamer.SetMaximumPropagation(500) streamer.SetIntegrationStepUnit(2) streamer.SetMinimumIntegrationStep(0.1) streamer.SetMaximumIntegrationStep(1.0) streamer.SetInitialIntegrationStep(0.2) streamer.SetIntegrationDirection(0) streamer.SetIntegrator(rk) streamer.SetRotationScale(0.5) streamer.SetMaximumError(1.0e-8) aa = vtk.vtkAssignAttribute() aa.SetInputConnection(streamer.GetOutputPort()) aa.Assign("Normals", "NORMALS", "POINT_DATA") rf1 = vtk.vtkRibbonFilter() rf1.SetInputConnection(aa.GetOutputPort()) rf1.SetWidth(0.1) rf1.VaryWidthOff() mapStream = vtk.vtkPolyDataMapper() mapStream.SetInputConnection(rf1.GetOutputPort()) mapStream.SetScalarRange(reader.GetOutput().GetScalarRange()) streamActor = vtk.vtkActor() streamActor.SetMapper(mapStream) ren1.AddActor(outlineActor) ren1.AddActor(streamActor) ren1.SetBackground(0.4, 0.4, 0.5) cam = ren1.GetActiveCamera() cam.SetPosition(-2.35599, -3.35001, 4.59236) cam.SetFocalPoint(2.255, 2.255, 1.28413) cam.SetViewUp(0.311311, 0.279912, 0.908149)
streamer = vtk.vtkStreamTracer() streamer.SetInputConnection(reader.GetOutputPort()) streamer.SetStartPosition(0.1,2.1,0.5) streamer.SetMaximumPropagation(500) streamer.SetIntegrationStepUnit(2) streamer.SetMinimumIntegrationStep(0.1) streamer.SetMaximumIntegrationStep(1.0) streamer.SetInitialIntegrationStep(0.2) streamer.SetIntegrationDirection(0) streamer.SetIntegrator(rk) streamer.SetRotationScale(0.5) streamer.SetMaximumError(1.0e-8) aa = vtk.vtkAssignAttribute() aa.SetInputConnection(streamer.GetOutputPort()) aa.Assign("Normals","NORMALS","POINT_DATA") rf1 = vtk.vtkRibbonFilter() rf1.SetInputConnection(aa.GetOutputPort()) rf1.SetWidth(0.1) rf1.VaryWidthOff() mapStream = vtk.vtkPolyDataMapper() mapStream.SetInputConnection(rf1.GetOutputPort()) mapStream.SetScalarRange(reader.GetOutput().GetScalarRange()) streamActor = vtk.vtkActor() streamActor.SetMapper(mapStream) ren1.AddActor(outlineActor) ren1.AddActor(streamActor) ren1.SetBackground(0.4,0.4,0.5) cam = ren1.GetActiveCamera() cam.SetPosition(-2.35599,-3.35001,4.59236) cam.SetFocalPoint(2.255,2.255,1.28413) cam.SetViewUp(0.311311,0.279912,0.908149)
def main(): colors = vtk.vtkNamedColors() fileName1, fileName2, numOfStreamLines, illustration = get_program_parameters( ) if illustration: numOfStreamLines = 25 # Start by loading some data. pl3d = vtk.vtkMultiBlockPLOT3DReader() pl3d.SetXYZFileName(fileName1) pl3d.SetQFileName(fileName2) pl3d.SetScalarFunctionNumber(100) # Density pl3d.SetVectorFunctionNumber(202) # Momentum pl3d.Update() pl3d_output = pl3d.GetOutput().GetBlock(0) # Create the Renderer, RenderWindow and RenderWindowInteractor. ren = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) # Needed by: vtkStreamTracer and vtkLineWidget. seeds = vtk.vtkPolyData() streamline = vtk.vtkActor() seeds2 = vtk.vtkPolyData() streamline2 = vtk.vtkActor() # The line widget is used seed the streamlines. lineWidget = vtk.vtkLineWidget() lineWidget.SetResolution(numOfStreamLines) lineWidget.SetInputData(pl3d_output) lineWidget.GetPolyData(seeds) if illustration: lineWidget.SetAlignToNone() lineWidget.SetPoint1(0.974678, 5.073630, 31.217961) lineWidget.SetPoint2(0.457544, -4.995921, 31.080175) else: lineWidget.SetAlignToYAxis() lineWidget.ClampToBoundsOn() lineWidget.PlaceWidget() # Associate the line widget with the interactor and setup callbacks. lineWidget.SetInteractor(iren) lineWidget.AddObserver("StartInteractionEvent", EnableActorCallback(streamline)) lineWidget.AddObserver("InteractionEvent", GenerateStreamlinesCallback(seeds, renWin)) # The second line widget is used seed more streamlines. lineWidget2 = vtk.vtkLineWidget() lineWidget2.SetResolution(numOfStreamLines) lineWidget2.SetInputData(pl3d_output) lineWidget2.GetPolyData(seeds2) lineWidget2.SetKeyPressActivationValue('L') lineWidget2.SetAlignToZAxis() lineWidget.ClampToBoundsOn() lineWidget2.PlaceWidget() # Associate the line widget with the interactor and setup callbacks. lineWidget2.SetInteractor(iren) lineWidget2.AddObserver("StartInteractionEvent", EnableActorCallback(streamline2)) lineWidget2.AddObserver("InteractionEvent", GenerateStreamlinesCallback(seeds2, renWin)) # Here we set up two streamlines. rk4 = vtk.vtkRungeKutta4() streamer = vtk.vtkStreamTracer() streamer.SetInputData(pl3d_output) streamer.SetSourceData(seeds) streamer.SetMaximumPropagation(100) streamer.SetInitialIntegrationStep(0.2) streamer.SetIntegrationDirectionToForward() streamer.SetComputeVorticity(1) streamer.SetIntegrator(rk4) rf = vtk.vtkRibbonFilter() rf.SetInputConnection(streamer.GetOutputPort()) rf.SetWidth(0.1) rf.SetWidthFactor(5) streamMapper = vtk.vtkPolyDataMapper() streamMapper.SetInputConnection(rf.GetOutputPort()) streamMapper.SetScalarRange(pl3d_output.GetScalarRange()) streamline.SetMapper(streamMapper) streamline.VisibilityOff() streamer2 = vtk.vtkStreamTracer() streamer2.SetInputData(pl3d_output) streamer2.SetSourceData(seeds2) streamer2.SetMaximumPropagation(100) streamer2.SetInitialIntegrationStep(0.2) streamer2.SetIntegrationDirectionToForward() streamer2.SetComputeVorticity(1) streamer2.SetIntegrator(rk4) rf2 = vtk.vtkRibbonFilter() rf2.SetInputConnection(streamer2.GetOutputPort()) rf2.SetWidth(0.1) rf2.SetWidthFactor(5) streamMapper2 = vtk.vtkPolyDataMapper() streamMapper2.SetInputConnection(rf2.GetOutputPort()) streamMapper2.SetScalarRange(pl3d_output.GetScalarRange()) streamline2.SetMapper(streamMapper2) streamline2.VisibilityOff() # Get an outline of the data set for context. outline = vtk.vtkStructuredGridOutlineFilter() outline.SetInputData(pl3d_output) outlineMapper = vtk.vtkPolyDataMapper() outlineMapper.SetInputConnection(outline.GetOutputPort()) outlineActor = vtk.vtkActor() outlineActor.GetProperty().SetColor(colors.GetColor3d("Black")) outlineActor.SetMapper(outlineMapper) # Add the actors to the renderer, set the background and size. ren.AddActor(outlineActor) ren.AddActor(streamline) ren.AddActor(streamline2) renWin.SetSize(512, 512) cam = ren.GetActiveCamera() if illustration: # We need to directly display the streamlines in this case. lineWidget.EnabledOn() streamline.VisibilityOn() lineWidget.GetPolyData(seeds) renWin.Render() cam.SetClippingRange(14.216207, 68.382915) cam.SetFocalPoint(9.718210, 0.458166, 29.399900) cam.SetPosition(-15.827551, -16.997463, 54.003120) cam.SetViewUp(0.616076, 0.179428, 0.766979) ren.SetBackground(colors.GetColor3d("Silver")) else: cam.SetClippingRange(3.95297, 50) cam.SetFocalPoint(9.71821, 0.458166, 29.3999) cam.SetPosition(2.7439, -37.3196, 38.7167) cam.SetViewUp(-0.16123, 0.264271, 0.950876) ren.SetBackground(colors.GetColor3d("Silver")) iren.Initialize() renWin.Render() iren.Start()
def __init__(self, parent = None): super(VTKFrame, self).__init__(parent) self.vtkWidget = QVTKRenderWindowInteractor(self) vl = QtGui.QVBoxLayout(self) vl.addWidget(self.vtkWidget) vl.setContentsMargins(0, 0, 0, 0) self.ren = vtk.vtkRenderer() self.ren.SetBackground(0.1, 0.2, 0.4) self.vtkWidget.GetRenderWindow().AddRenderer(self.ren) self.iren = self.vtkWidget.GetRenderWindow().GetInteractor() nV = 256 # No. of vertices rS = 2.0 # Spiral radius nCyc = 3 # No. of spiral cycles h = 10.0 # Height # Create points and cells for a spiral points = vtk.vtkPoints() for i in range(nV): vX = rS * math.cos(2 * math.pi * nCyc * i / (nV - 1)) vY = rS * math.sin(2 * math.pi * nCyc * i / (nV - 1)) vZ = h * i / nV points.InsertPoint(i, vX, vY, vZ) lines = vtk.vtkCellArray() lines.InsertNextCell(nV) for i in range(nV): lines.InsertCellPoint(i) polyData = vtk.vtkPolyData() polyData.SetPoints(points) polyData.SetLines(lines) # Create a mapper and actor lineMapper = vtk.vtkPolyDataMapper() lineMapper.SetInput(polyData) lineActor = vtk.vtkActor() lineActor.SetMapper(lineMapper) lineActor.GetProperty().SetColor(0.8, 0.4, 0.2) lineActor.GetProperty().SetLineWidth(3) # Cteate a ribbon around the line ribbonFilter = vtk.vtkRibbonFilter() ribbonFilter.SetInput(polyData) ribbonFilter.SetWidth(0.4) # Create a mapper and actor ribbonMapper = vtk.vtkPolyDataMapper() ribbonMapper.SetInputConnection(ribbonFilter.GetOutputPort()) ribbonActor = vtk.vtkActor() ribbonActor.SetMapper(ribbonMapper) self.ren.AddActor(lineActor) self.ren.AddActor(ribbonActor) self.ren.ResetCamera() self._initialized = False