[vtkusers] vtkStripper question (maybe vtkPolyDataAlgorithm question)

David Gobbi david.gobbi at gmail.com
Fri Jan 27 18:00:06 EST 2012


Hi Eric,

The issue here is that the output of vtkCutter is no a polygon, it is
a set of lines that form a contour.  So the goal here should be to
triangulate the output of the cutter, and then write the result to a
file with the vtkSTLWriter.

The ClipCow example demonstrates a kludgy way of doing the
triangulation: the contour is converted into a continuous polyline
with vtkStripper, and then VTK is fooled into interpreting that
polyline as a polygon.

To answer your question about the stripper, though, the stripper is
doing exactly what it should: it takes all of the line segments that
are produced by the cutter and joins them end-to-end to create a
single polyline.  This is how stripper behaves when given lines as
input.  (When given triangles as input, it produces triangle strips...
but that isn't the case here because the output of your vtkCutter is
lines, not triangles).

 - David


On Fri, Jan 27, 2012 at 3:07 PM, Fahlgren, Eric
<efahlgren at lifemodeler.com> wrote:
> I'm missing something fundamental here.  I have a script culled from the Python/ClipCow example, boiled down to its basic pieces.  Why can't I force the stripper's output object, a vtkPolyData, to feed the STL writer (or indeed use it as input to filters or whatever)?  Why is the intermediate vtkPolyData object needed?  When I use a different object derived from vtkPolyDataAlgorithm (say a vtkCubeSource), I get the values I expect, it's just the vtkStripper that is behaving in a way I don't expect.
>
> Thanks,
> Eric
>
>
> With line 20 True, the stl contains:
>
>  solid ascii
>  endsolid
>
> With line 20 set to False, we get:
>
>  solid ascii
>   facet normal 0.70014 0.70014 0.140028
>    outer loop
>     vertex -0.5 0.44 0.3
>     vertex -0.5 0.24 1.3
>     vertex 0.24 -0.5 1.3
>    endloop
>   endfacet
>  endsolid
>
>
>     1  #!/usr/bin/env python
>     2  # vim: set expandtab softtabstop=3 shiftwidth=3:
>     3
>     4  import vtk
>     5
>     6  block = vtk.vtkCubeSource()
>     7  block.SetCenter((0.0, 0.0, 0.8))
>     8
>     9  plane = vtk.vtkPlane()
>    10  plane.SetNormal(1.0,1.0,0.2)
>    11
>    12  cutter = vtk.vtkCutter()
>    13  cutter.SetCutFunction(plane)
>    14  cutter.SetInputConnection(block.GetOutputPort())
>    15
>    16  stripper = vtk.vtkStripper()
>    17  stripper.SetInputConnection(cutter.GetOutputPort())
>    18  stripper.Update()
>    19
>    20  if True:
>    21     poly = stripper.GetOutput() # Why doesn't this work?
>    22  else:
>    23     poly = vtk.vtkPolyData()
>    24     poly.SetPoints(stripper.GetOutput().GetPoints())
>    25     poly.SetPolys (stripper.GetOutput().GetLines())
>    26
>    27  writer = vtk.vtkSTLWriter()
>    28  writer.SetInput(poly)
>    29  writer.SetFileName("outline.stl")
>    30  writer.Update()
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers



More information about the vtkusers mailing list