<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=us-ascii" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 9.00.8112.16447"></HEAD>
<BODY>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=503222302-14082012>Fantastic - one line code change and it all works - 
below is full working example for future reference - thanks!</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 
face=Arial></FONT>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>#include 
&lt;vtkPolyData.h&gt;<BR>#include &lt;vtkSTLReader.h&gt;<BR>#include 
&lt;vtkSmartPointer.h&gt;<BR>#include &lt;vtkPolyDataMapper.h&gt;<BR>#include 
&lt;vtkIdTypeArray.h&gt;<BR>#include &lt;vtkSelectionNode.h&gt;<BR>#include 
&lt;vtkActor.h&gt;<BR>#include &lt;vtkRenderWindow.h&gt;<BR>#include 
&lt;vtkRenderer.h&gt;<BR>#include 
&lt;vtkRenderWindowInteractor.h&gt;<BR>#include 
&lt;vtkSelection.h&gt;<BR>#include &lt;vtkExtractSelection.h&gt;<BR>#include 
&lt;vtkDataSetMapper.h&gt;<BR>#include &lt;vtkProperty.h&gt;<BR>#include 
&lt;vtkObjectFactory.h&gt;<BR>#include &lt;vtkCellArray.h&gt;<BR>#include 
&lt;vtkCell.h&gt;<BR>#include &lt;vtkInformation.h&gt;<BR>#include 
&lt;vtkExtractSelectedPolyDataIds.h&gt;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>// C++<BR>#include 
&lt;iostream&gt;</FONT></DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>using namespace 
std;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>int main(int argc, 
char *argv[])<BR>{<BR><SPAN class=503222302-14082012>&nbsp;&nbsp;&nbsp; 
</SPAN>// check and get the stl input file provided<BR>&nbsp;&nbsp;&nbsp; if ( 
argc != 2 )<BR>&nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "Required 
parameters: Filename" &lt;&lt; 
endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
EXIT_FAILURE;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; std::string 
inputfile = argv[1];</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>&nbsp;&nbsp;&nbsp; 
// read STL and print out some info<BR>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; 
"Reading: " &lt;&lt; inputfile &lt;&lt; std::endl;<BR>&nbsp;&nbsp;&nbsp; 
vtkSmartPointer&lt;vtkSTLReader&gt; stlReader = 
vtkSmartPointer&lt;vtkSTLReader&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
stlReader-&gt;SetFileName(inputfile.c_str());<BR>&nbsp;&nbsp;&nbsp; 
vtkSmartPointer&lt;vtkPolyData&gt; polydata = 
vtkSmartPointer&lt;vtkPolyData&gt;::New(); <BR>&nbsp;&nbsp;&nbsp; polydata = 
stlReader-&gt;GetOutput();<BR>&nbsp;&nbsp;&nbsp; 
polydata-&gt;Update();<BR>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "Cells: " &lt;&lt; 
polydata-&gt;GetNumberOfCells() &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp; cout 
&lt;&lt; "Points: " &lt;&lt; polydata-&gt;GetNumberOfPoints() &lt;&lt; 
endl;<BR>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "Polys: " &lt;&lt; 
polydata-&gt;GetNumberOfPolys() &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp; cout 
&lt;&lt; "Verts: " &lt;&lt; polydata-&gt;GetNumberOfVerts() &lt;&lt; 
endl;<BR>&nbsp;&nbsp;&nbsp; polydata-&gt;Print(cout);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>&nbsp;&nbsp;&nbsp; 
// select cells of interest<BR>&nbsp;&nbsp;&nbsp; // ref: <A 
href="http://www.kitware.com/media/html/SelectionsInVTK.html">http://www.kitware.com/media/html/SelectionsInVTK.html</A><BR>&nbsp;&nbsp;&nbsp; 
vtkSmartPointer&lt;vtkSelectionNode&gt; cellSelectionNode = 
vtkSmartPointer&lt;vtkSelectionNode&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
cellSelectionNode-&gt;SetFieldType(vtkSelectionNode::CELL);<BR>&nbsp;&nbsp;&nbsp; 
cellSelectionNode-&gt;SetContentType(vtkSelectionNode::INDICES);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>&nbsp;&nbsp;&nbsp; 
//cellSelectionNode-&gt;SetFieldType(vtkSelectionNode::POINT);<BR>&nbsp;&nbsp;&nbsp; 
vtkSmartPointer&lt;vtkIdTypeArray&gt; ids = 
vtkSmartPointer&lt;vtkIdTypeArray&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
ids-&gt;SetNumberOfComponents(1);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>&nbsp;&nbsp;&nbsp; 
int nCellsNum = polydata-&gt;GetNumberOfCells();<BR>&nbsp;&nbsp;&nbsp; for (int 
nCellID = 0; nCellID &lt; nCellsNum/2; nCellID++) <BR>&nbsp;&nbsp;&nbsp; { 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vtkCell* cell; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell = 
polydata-&gt;GetCell(nCellID);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
ids-&gt;InsertNextValue(nCellID);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
cellSelectionNode-&gt;SetSelectionList(ids);<BR>&nbsp;&nbsp;&nbsp; 
vtkSmartPointer&lt;vtkSelection&gt; cellSelection = 
vtkSmartPointer&lt;vtkSelection&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
cellSelection-&gt;AddNode(cellSelectionNode);<BR>&nbsp;&nbsp;&nbsp; cout 
&lt;&lt; "Selected Cells: " &lt;&lt; 
cellSelection-&gt;GetNode(0)-&gt;GetSelectionList()-&gt;GetNumberOfTuples() 
&lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp; cellSelection-&gt;Print(cout);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>&nbsp;&nbsp;&nbsp; 
// Extract Selection<BR>&nbsp;&nbsp;&nbsp; // doesn't work 
vtkSmartPointer&lt;vtkExtractSelection&gt; extractSelection = 
vtkSmartPointer&lt;vtkExtractSelection&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
vtkSmartPointer&lt;vtkExtractSelectedPolyDataIds&gt; extractSelection = 
vtkSmartPointer&lt;vtkExtractSelectedPolyDataIds&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
extractSelection-&gt;SetInput(0, polydata);&nbsp;&nbsp;// The dataset is given 
on its first input port<BR>&nbsp;&nbsp;&nbsp; extractSelection-&gt;SetInput(1, 
cellSelection);&nbsp;// The subset is described by the contents of the 
vtkSelection on its second input port<BR>&nbsp;&nbsp;&nbsp; 
extractSelection-&gt;Update();<BR>&nbsp;&nbsp;&nbsp; 
extractSelection-&gt;Print(cout);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>&nbsp;&nbsp;&nbsp; 
vtkSmartPointer&lt;vtkPolyData&gt; selectedPolydata = 
vtkSmartPointer&lt;vtkPolyData&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
selectedPolydata-&gt;ShallowCopy(extractSelection-&gt;GetOutput());<BR>&nbsp;&nbsp;&nbsp; 
selectedPolydata-&gt;Print(cout);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>&nbsp;&nbsp;&nbsp; 
// Visualise<BR>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkPolyDataMapper&gt; 
selectedPolydataMapper = 
vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
selectedPolydataMapper-&gt;SetInput(selectedPolydata);<BR>&nbsp;&nbsp;&nbsp; 
vtkSmartPointer&lt;vtkActor&gt; actor = 
vtkSmartPointer&lt;vtkActor&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
actor-&gt;SetMapper(selectedPolydataMapper);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>&nbsp;&nbsp;&nbsp; 
vtkSmartPointer&lt;vtkRenderer&gt; renderer = 
vtkSmartPointer&lt;vtkRenderer&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
vtkSmartPointer&lt;vtkRenderWindow&gt; renderWindow = 
vtkSmartPointer&lt;vtkRenderWindow&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
renderWindow-&gt;AddRenderer(renderer);<BR>&nbsp;&nbsp;&nbsp; 
vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; renderWindowInteractor = 
vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();<BR>&nbsp;&nbsp;&nbsp; 
renderWindowInteractor-&gt;SetRenderWindow(renderWindow);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>&nbsp;&nbsp;&nbsp; 
renderer-&gt;AddActor(actor);<BR>&nbsp;&nbsp;&nbsp; 
renderer-&gt;SetBackground(.3, .6, .3); // Background color green</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>&nbsp;&nbsp;&nbsp; 
renderWindow-&gt;Render();<BR>&nbsp;&nbsp;&nbsp; 
renderWindowInteractor-&gt;Start();</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial>&nbsp;&nbsp;&nbsp; 
return EXIT_SUCCESS;<BR>}</FONT></DIV><BR>
<DIV dir=ltr lang=en-us class=OutlookMessageHeader align=left>
<HR tabIndex=-1>
<FONT size=2 face=Tahoma><B>From:</B> Gonzalo Amadio 
[mailto:gonzaloamadio@gmail.com] <BR><B>Sent:</B> Monday, 13 August 2012 10:31 
PM<BR><B>To:</B> Paul McIntosh<BR><B>Cc:</B> David Doria; 
vtkusers@vtk.org<BR><B>Subject:</B> Re: [vtkusers] vtkPolyData and extracted 
selections<BR></FONT><BR></DIV>
<DIV></DIV>Hello Paul, instead of using vtkExtractSelection, you can use 
vtkExtractSelectedPolydataIds. &nbsp;Here is a code example you can use.
<DIV>And you will have a polydata as a result instead of an UG .<BR>
<DIV><BR></DIV>
<DIV><BR></DIV>
<DIV>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>vtkSmartPointer&lt;vtkIdTypeArray&gt; ids = 
  vtkSmartPointer&lt;vtkIdTypeArray&gt;::New();<BR><SPAN 
  style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>ids-&gt;SetNumberOfComponents(1);<BR></BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote>&nbsp;</BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>&nbsp;// Set values<BR></BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote>&nbsp; &nbsp; &nbsp; 
  &nbsp;&nbsp;std::vector&lt;int&gt;&nbsp;idsForNewPolydata&nbsp;;</BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//Put ids you want into 
  &nbsp;idsForNewPolydata</BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote><FONT color=#0000ff size=2 face=Arial></FONT><BR></BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>std::vector&lt;int&gt;::iterator it;<BR><SPAN 
  style="WHITE-SPACE: pre" class=Apple-tab-span></SPAN>for (it = 
  idsForNewPolydata.begin(); it !=&nbsp;idsForNewPolydata.end(); it++) 
  &nbsp;//&nbsp;idsForNewPolydata&nbsp;in your case should be id's from 0 
  to&nbsp;<SPAN 
  style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: arial,sans-serif; COLOR: rgb(34,34,34); FONT-SIZE: 13px">nCellsNum</SPAN>/2</BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>{<BR><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>int currentIndice = *it;<BR><SPAN 
  style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>ids-&gt;InsertNextValue(currentIndice);<BR><SPAN 
  style="WHITE-SPACE: pre" class=Apple-tab-span></SPAN>}<BR><SPAN 
  style="WHITE-SPACE: pre" class=Apple-tab-span></SPAN></BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote>&nbsp;</BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>vtkSmartPointer&lt;vtkSelectionNode&gt; 
  selectionNode = vtkSmartPointer&lt;vtkSelectionNode&gt;::New();<BR><SPAN 
  style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>selectionNode-&gt;SetFieldType(vtkSelectionNode::CELL);<BR><SPAN 
  style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>selectionNode-&gt;SetContentType(vtkSelectionNode::INDICES);<BR><SPAN 
  style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>selectionNode-&gt;SetSelectionList(ids);<BR></BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote>&nbsp;</BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>vtkSmartPointer&lt;vtkSelection&gt; selection = 
  vtkSmartPointer&lt;vtkSelection&gt;::New();<BR><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>selection-&gt;AddNode(selectionNode);<BR><SPAN 
  style="WHITE-SPACE: pre" class=Apple-tab-span></SPAN></BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote>&nbsp;</BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>vtkSmartPointer&lt;vtkExtractSelectedPolyDataIds&gt; 
  extractSelectedIds =<SPAN style="WHITE-SPACE: pre" class=Apple-tab-span> 
  </SPAN>vtkSmartPointer&lt;vtkExtractSelectedPolyDataIds&gt;::New();<BR><SPAN 
  style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>extractSelectedIds-&gt;SetInput(0, 
  polydata);<BR><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>extractSelectedIds-&gt;SetInput(1, 
  selection);<BR><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>extractSelectedIds-&gt;Update();<BR></BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote>&nbsp;</BLOCKQUOTE>
<BLOCKQUOTE 
style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote><SPAN style="WHITE-SPACE: pre" 
  class=Apple-tab-span></SPAN>vtkPolyData* finalPolyData = 
  extractSelectedIds-&gt;GetOutput();</BLOCKQUOTE></DIV>
<DIV><BR></DIV>
<DIV><BR>Cheers,&nbsp;</DIV>
<DIV>Gonzalo..</DIV>
<DIV><BR></DIV>
<DIV><BR>
<DIV class=gmail_quote>2012/8/13 Paul McIntosh <SPAN dir=ltr>&lt;<A 
href="mailto:paul.mcintosh@internetscooter.com" 
target=_blank>paul.mcintosh@internetscooter.com</A>&gt;</SPAN><BR>
<BLOCKQUOTE 
style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote>Hi David,<BR><BR>Thanks for your response - attached is a 
  stl generated from a sphere source<BR>and program the output from using this 
  example.<BR><BR>The input polydata has "Number Of Cells: 96" (so is read ok) - 
  I select half<BR>of those cells and it appears to be correct as following 
  reports "48" :<BR>
  <DIV class=im>"cout &lt;&lt; "Selected Cells: " 
  &lt;&lt;<BR>cellSelection-&gt;GetNode(0)-&gt;GetSelectionList()-&gt;GetNumberOfTuples()<BR><BR></DIV>However 
  the output polydata is missing the cells.<BR><BR>&nbsp; Number Of Points: 
  35<BR>&nbsp; Number Of Cells: 0<BR><BR>I am probably just missing an setting 
  that brings the cells but I have been<BR>banging my head against this for a 
  while and not making much headway.<BR><BR>Any help much appreciated and I am 
  also happy to add this to the vtk<BR>examples once it is 
  working.<BR><BR>Cheers,<BR><BR>Paul<BR>
  <DIV>
  <DIV class=h5><BR>-----Original Message-----<BR>From: David Doria [mailto:<A 
  href="mailto:daviddoria@gmail.com">daviddoria@gmail.com</A>]<BR>Sent: Sunday, 
  12 August 2012 11:07 PM<BR>To: Paul McIntosh<BR>Cc: <A 
  href="mailto:vtkusers@vtk.org">vtkusers@vtk.org</A><BR>Subject: Re: [vtkusers] 
  vtkPolyData and extracted selections<BR><BR>On Sun, Aug 12, 2012 at 7:44 AM, 
  Paul McIntosh<BR>&lt;<A 
  href="mailto:paul.mcintosh@internetscooter.com">paul.mcintosh@internetscooter.com</A>&gt; 
  wrote:<BR>&gt; Hi,<BR>&gt;<BR>&gt; I am creating a utility that will calculate 
  the frontal area of a<BR>&gt; mesh. The first thing I am trying is extracting 
  cells from a mesh by<BR>&gt; their id's (later I will change this to select 
  cells that are visible<BR>&gt; from a particular direction). I am getting 
  stuck though creating a new<BR>&gt; polydata object which is a subset of the 
  original, using the<BR>&gt; selection. The VTK examples use an 
  unstructuredgrid, but the same code<BR>&gt; doesn't work with polydata - can 
  anyone see what I am doing wrong?<BR>&gt;<BR>&gt; Paul<BR>&gt;<BR>&gt;<BR>&gt; 
  #include &lt;vtkPolyData.h&gt;<BR>&gt; #include &lt;vtkSTLWriter.h&gt;<BR>&gt; 
  #include &lt;vtkSTLReader.h&gt;<BR>&gt; #include 
  &lt;vtkTransform.h&gt;<BR>&gt; #include &lt;vtkTransformFilter.h&gt;<BR>&gt; 
  #include &lt;vtkTriangle.h&gt;<BR>&gt; #include 
  &lt;vtkSphereSource.h&gt;<BR>&gt; #include &lt;vtkSmartPointer.h&gt;<BR>&gt; 
  #include &lt;vtkPolyDataMapper.h&gt;<BR>&gt; #include 
  &lt;vtkIdTypeArray.h&gt;<BR>&gt; #include &lt;vtkSelectionNode.h&gt;<BR>&gt; 
  #include &lt;vtkActor.h&gt;<BR>&gt; #include &lt;vtkRenderWindow.h&gt;<BR>&gt; 
  #include &lt;vtkRenderer.h&gt;<BR>&gt; #include 
  &lt;vtkRenderWindowInteractor.h&gt; #include<BR>&gt; 
  &lt;vtkHardwareSelector.h&gt; #include 
  &lt;vtkInteractorStyleTrackballCamera.h&gt;<BR>&gt; #include 
  &lt;vtkRendererCollection.h&gt;<BR>&gt; #include 
  &lt;vtkSelection.h&gt;<BR>&gt; #include &lt;vtkExtractSelection.h&gt;<BR>&gt; 
  #include &lt;vtkDataSetMapper.h&gt;<BR>&gt; #include 
  &lt;vtkProperty.h&gt;<BR>&gt; #include &lt;vtkObjectFactory.h&gt;<BR>&gt; 
  #include &lt;vtkCellArray.h&gt;<BR>&gt; #include &lt;vtkCell.h&gt;<BR>&gt; 
  #include &lt;vtkInformation.h&gt;<BR>&gt; #include 
  &lt;vtkUnstructuredGrid.h&gt;<BR>&gt;<BR>&gt; // C++<BR>&gt; #include 
  &lt;list&gt;<BR>&gt; #include &lt;iostream&gt;<BR>&gt; #include 
  &lt;fstream&gt;<BR>&gt;<BR>&gt; using namespace std;<BR>&gt;<BR>&gt; int 
  main(int argc, char *argv[])<BR>&gt; {<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; // 
  check and get the stl input file provided<BR>&gt; &nbsp; &nbsp; if ( argc != 2 
  )<BR>&gt; &nbsp; &nbsp; {<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; cout &lt;&lt; 
  "Required parameters: Filename" &lt;&lt; endl;<BR>&gt; &nbsp; &nbsp; &nbsp; 
  &nbsp; return EXIT_FAILURE;<BR>&gt; &nbsp; &nbsp; }<BR>&gt; &nbsp; &nbsp; 
  std::string inputfile = argv[1];<BR>&gt;<BR>&gt; &nbsp; &nbsp; // read STL and 
  print out some info<BR>&gt; &nbsp; &nbsp; std::cout &lt;&lt; "Reading: " 
  &lt;&lt; inputfile &lt;&lt; std::endl;<BR>&gt; &nbsp; &nbsp; 
  vtkSmartPointer&lt;vtkSTLReader&gt; stlReader =<BR>&gt; 
  vtkSmartPointer&lt;vtkSTLReader&gt;::New();<BR>&gt; &nbsp; &nbsp; 
  stlReader-&gt;SetFileName(inputfile.c_str());<BR>&gt; &nbsp; &nbsp; 
  vtkSmartPointer&lt;vtkPolyData&gt; polydata =<BR>&gt; 
  vtkSmartPointer&lt;vtkPolyData&gt;::New();<BR>&gt; &nbsp; &nbsp; polydata = 
  stlReader-&gt;GetOutput();<BR>&gt; &nbsp; &nbsp; 
  polydata-&gt;Update();<BR>&gt; &nbsp; &nbsp; cout &lt;&lt; "Cells: " &lt;&lt; 
  polydata-&gt;GetNumberOfCells() &lt;&lt; endl;<BR>&gt; &nbsp; &nbsp; cout 
  &lt;&lt; "Points: " &lt;&lt; polydata-&gt;GetNumberOfPoints() &lt;&lt; 
  endl;<BR>&gt; &nbsp; &nbsp; cout &lt;&lt; "Polys: " &lt;&lt; 
  polydata-&gt;GetNumberOfPolys() &lt;&lt; endl;<BR>&gt; &nbsp; &nbsp; cout 
  &lt;&lt; "Verts: " &lt;&lt; polydata-&gt;GetNumberOfVerts() &lt;&lt; 
  endl;<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  polydata-&gt;Print(cout);<BR>&gt;<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; // 
  select cells of interest<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; // ref: <A 
  href="http://www.kitware.com/media/html/SelectionsInVTK.html" 
  target=_blank>http://www.kitware.com/media/html/SelectionsInVTK.html</A><BR>&gt; 
  &nbsp; &nbsp; vtkSmartPointer&lt;vtkSelectionNode&gt; cellSelectionNode 
  =<BR>&gt; vtkSmartPointer&lt;vtkSelectionNode&gt;::New();<BR>&gt; &nbsp; 
  &nbsp; &nbsp; &nbsp; 
  cellSelectionNode-&gt;SetFieldType(vtkSelectionNode::CELL);<BR>&gt; &nbsp; 
  &nbsp; &nbsp; &nbsp; 
  cellSelectionNode-&gt;SetContentType(vtkSelectionNode::INDICES);<BR>&gt;<BR>&gt; 
  &nbsp; &nbsp; vtkSmartPointer&lt;vtkIdTypeArray&gt; ids =<BR>&gt; 
  vtkSmartPointer&lt;vtkIdTypeArray&gt;::New();<BR>&gt; &nbsp; &nbsp; 
  ids-&gt;SetNumberOfComponents(1);<BR>&gt;<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  int nCellsNum = polydata-&gt;GetNumberOfCells();<BR>&gt; &nbsp; &nbsp; &nbsp; 
  &nbsp; for (int nCellID = 0; nCellID &lt; nCellsNum/2; nCellID++)<BR>&gt; 
  &nbsp; &nbsp; &nbsp; &nbsp; {<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
  &nbsp; &nbsp; &nbsp; vtkCell* cell;<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
  &nbsp; &nbsp; &nbsp; cell = polydata-&gt;GetCell(nCellID);<BR>&gt; &nbsp; 
  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
  ids-&gt;InsertNextValue(nCellID);<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  }<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  cellSelectionNode-&gt;SetSelectionList(ids);<BR>&gt; &nbsp; &nbsp; &nbsp; 
  &nbsp; vtkSmartPointer&lt;vtkSelection&gt; cellSelection =<BR>&gt; 
  vtkSmartPointer&lt;vtkSelection&gt;::New();<BR>&gt; &nbsp; &nbsp; &nbsp; 
  cellSelection-&gt;AddNode(cellSelectionNode);<BR>&gt; &nbsp; &nbsp; &nbsp; 
  &nbsp; cout &lt;&lt; "Selected Cells: " &lt;&lt;<BR>&gt; 
  cellSelection-&gt;GetNode(0)-&gt;GetSelectionList()-&gt;GetNumberOfTuples() 
  &lt;&lt;<BR></DIV></DIV>&gt; cellSelection-&gt;endl;<BR>
  <DIV class=HOEnZb>
  <DIV class=h5>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  //cellSelection-&gt;Print(cout);<BR>&gt;<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  // Extract Selection<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  vtkSmartPointer&lt;vtkExtractSelection&gt; extractSelection =<BR>&gt; 
  vtkSmartPointer&lt;vtkExtractSelection&gt;::New();<BR>&gt; &nbsp; &nbsp; 
  &nbsp; &nbsp; extractSelection-&gt;SetInput(0, polydata); &nbsp; &nbsp; &nbsp; 
  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// The<BR>&gt; dataset is given on its first 
  input port<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  extractSelection-&gt;SetInput(1, cellSelection); &nbsp; // The subset 
  is<BR>&gt; described by the contents of the vtkSelection on its second input 
  port<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  extractSelection-&gt;Update();<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  extractSelection-&gt;Print(cout);<BR>&gt;<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  vtkSmartPointer&lt;vtkPolyData&gt; selectedPolydata =<BR>&gt; 
  vtkSmartPointer&lt;vtkPolyData&gt;::New();<BR>&gt; &nbsp; &nbsp; &nbsp; &nbsp; 
  selectedPolydata-&gt;ShallowCopy(extractSelection-&gt;GetOutput());<BR>&gt; 
  &nbsp; &nbsp; &nbsp; &nbsp; selectedPolydata-&gt;Print(cout);<BR>&gt;<BR>&gt; 
  &nbsp; &nbsp; // Visualise<BR>&gt; &nbsp; &nbsp; 
  vtkSmartPointer&lt;vtkPolyDataMapper&gt; selectedPolydataMapper =<BR>&gt; 
  vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();<BR>&gt; &nbsp; &nbsp; &nbsp; 
  &nbsp; selectedPolydataMapper-&gt;SetInput(selectedPolydata);<BR>&gt; &nbsp; 
  &nbsp; &nbsp;vtkSmartPointer&lt;vtkActor&gt; actor = 
  vtkSmartPointer&lt;vtkActor&gt;::New();<BR>&gt; &nbsp; &nbsp; 
  &nbsp;//actor-&gt;SetMapper(mapper);<BR>&gt; &nbsp; &nbsp; 
  &nbsp;actor-&gt;SetMapper(selectedPolydataMapper);<BR>&gt;<BR>&gt; &nbsp; 
  &nbsp; &nbsp;vtkSmartPointer&lt;vtkRenderer&gt; renderer =<BR>&gt; 
  vtkSmartPointer&lt;vtkRenderer&gt;::New();<BR>&gt; &nbsp; &nbsp; 
  &nbsp;vtkSmartPointer&lt;vtkRenderWindow&gt; renderWindow =<BR>&gt; 
  vtkSmartPointer&lt;vtkRenderWindow&gt;::New();<BR>&gt; &nbsp; &nbsp; 
  &nbsp;renderWindow-&gt;AddRenderer(renderer);<BR>&gt; &nbsp; &nbsp; 
  &nbsp;vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; 
  renderWindowInteractor<BR>&gt; = 
  vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();<BR>&gt; &nbsp; &nbsp; 
  &nbsp;renderWindowInteractor-&gt;SetRenderWindow(renderWindow);<BR>&gt;<BR>&gt; 
  &nbsp; &nbsp; &nbsp;renderer-&gt;AddActor(actor);<BR>&gt; &nbsp; &nbsp; 
  &nbsp;renderer-&gt;SetBackground(.3, .6, .3); // Background color 
  green<BR>&gt;<BR>&gt; &nbsp; &nbsp; &nbsp;renderWindow-&gt;Render();<BR>&gt; 
  &nbsp; &nbsp; &nbsp;renderWindowInteractor-&gt;Start();<BR>&gt;<BR>&gt; &nbsp; 
  &nbsp; return EXIT_SUCCESS;<BR>&gt; }<BR>&gt;<BR>&gt; Cheers,<BR>&gt;<BR>&gt; 
  Paul<BR><BR>What do you mean "doesn't work"? What is the error? Please make 
  your example<BR>self-contained (i.e. generate data (perhaps vtkSphereSource) 
  instead of<BR>reading it from a file, etc) so it is easier for us to take a 
  look.<BR><BR>David<BR></DIV></DIV><BR>_______________________________________________<BR>Powered 
  by <A href="http://www.kitware.com" 
  target=_blank>www.kitware.com</A><BR><BR>Visit other Kitware open-source 
  projects at <A href="http://www.kitware.com/opensource/opensource.html" 
  target=_blank>http://www.kitware.com/opensource/opensource.html</A><BR><BR>Please 
  keep messages on-topic and check the VTK FAQ at: <A 
  href="http://www.vtk.org/Wiki/VTK_FAQ" 
  target=_blank>http://www.vtk.org/Wiki/VTK_FAQ</A><BR><BR>Follow this link to 
  subscribe/unsubscribe:<BR><A 
  href="http://www.vtk.org/mailman/listinfo/vtkusers" 
  target=_blank>http://www.vtk.org/mailman/listinfo/vtkusers</A><BR><BR></BLOCKQUOTE></DIV><BR><BR 
clear=all>
<DIV><BR></DIV>-- <BR>--------<BR>Gonzalo 
Amadio<BR><BR></DIV></DIV></BODY></HTML>