Hi Brian,<br>I remember having some problem to render a non-convex polygon. I found an example, I can't find again where it comes from, and I worked on it. Finally the following python script does what you want. <br><br>
You should try to add two filters : a GeometryFilter and a TriangleFilter. <br>Marie-Gabrielle<br><br> #!/usr/bin/env python<br><br> # This example shows how to visualize polygons, convex or not.<br><br> import vtk<br><br>
# Define a set of points - these are the ordered polygon vertices<br> polygonPoints = vtk.vtkPoints()<br> polygonPoints.SetNumberOfPoints(6)<br> polygonPoints.InsertPoint(0, 0, 0, 0)<br> polygonPoints.InsertPoint(1,.4,.4, 0)<br>
polygonPoints.InsertPoint(2, 1, 0, 0)<br> polygonPoints.InsertPoint(3, 1, 1, 0)<br> polygonPoints.InsertPoint(4,.1,.7, 0)<br> polygonPoints.InsertPoint(5, 0, 1, 0)<br><br> # Make a cell with these points<br> aPolygon = vtk.vtkPolygon()<br>
aPolygon.GetPointIds().SetNumberOfIds(6)<br> aPolygon.GetPointIds().SetId(0, 0)<br> aPolygon.GetPointIds().SetId(1, 1)<br> aPolygon.GetPointIds().SetId(2, 2)<br> aPolygon.GetPointIds().SetId(3, 3)<br> aPolygon.GetPointIds().SetId(4, 4)<br>
aPolygon.GetPointIds().SetId(5, 5)<br><br> # The cell is put into a mesh (containing only one cell)<br> aPolygonGrid = vtk.vtkUnstructuredGrid()<br> aPolygonGrid.Allocate(1, 1)<br> aPolygonGrid.InsertNextCell(aPolygon.GetCellType(), aPolygon.GetPointIds())<br>
aPolygonGrid.SetPoints(polygonPoints)<br><br> # This part is needed for non-convex polygon rendering<br> aPolygonGeomFilter = vtk.vtkGeometryFilter()<br> aPolygonGeomFilter.SetInput(aPolygonGrid)<br> aPolygonTriangleFilter = vtk.vtkTriangleFilter()<br>
aPolygonTriangleFilter.SetInput(aPolygonGeomFilter.GetOutput())<br> #<br> # This one is only to check the triangulation (when factor < 1)<br> aPolygonShrinkFilter = vtk.vtkShrinkFilter()<br> aPolygonShrinkFilter.SetShrinkFactor( 0.9 )<br>
#aPolygonShrinkFilter.SetShrinkFactor( 1.0 )<br> aPolygonShrinkFilter.SetInput( aPolygonGrid)<br><br> # Make ready for rendering<br> aPolygonMapper = vtk.vtkDataSetMapper()<br> aPolygonMapper.SetInput(aPolygonShrinkFilter.GetOutput())<br>
aPolygonActor = vtk.vtkActor()<br> aPolygonActor.SetMapper(aPolygonMapper)<br> aPolygonActor.GetProperty().SetDiffuseColor(1, .4, .5)<br><br> # Create the usual rendering stuff.<br> ren = vtk.vtkRenderer()<br> renWin = vtk.vtkRenderWindow()<br>
renWin.AddRenderer(ren)<br> renWin.SetSize(300, 150)<br> iren = vtk.vtkRenderWindowInteractor()<br> iren.SetRenderWindow(renWin)<br><br> ren.SetBackground(.1, .2, .4)<br> ren.AddActor(aPolygonActor)<br> ren.ResetCamera()<br>
<br> # Render the scene and start interaction.<br> iren.Initialize()<br> renWin.Render()<br> iren.Start()<br><br>