Hello, I want to extract cells using two specified points. I was looking into vtkPolyData and I found the function GetPointCells, but that is only for one point. And I need it for two points instead of one.<br><br>So I used this example : <a href="http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ExtractCellsUsingPoints">http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ExtractCellsUsingPoints</a><br>

<br>I modified a little, instead of working with a spheresource I try to make it work with a triangle strip (taken from this example : <a href="http://www.vtk.org/Wiki/VTK/Examples/Cxx/GeometricObjects/TriangleStrip">http://www.vtk.org/Wiki/VTK/Examples/Cxx/GeometricObjects/TriangleStrip</a> )<br>

<br>In this last example, there are 2 triangles, and (as in the code is showed), I want the cell that uses the point 0.<div>But as shown in the result, it returns the 2 triangles instead of only one.<br><div><br></div><div>

Maybe it is because the vtkTriangleStrip ? Is ok my idea?</div><div><br></div><div><br></div><div>Thank you.!</div><div><br></div><div><br></div><div><br></div><div><div>#include &lt;vtkVersion.h&gt;</div><div>#include &lt;vtkSmartPointer.h&gt;</div>

<div>#include &lt;vtkInformation.h&gt;</div><div>#include &lt;vtkSphereSource.h&gt;</div><div>#include &lt;vtkExtractSelection.h&gt;</div><div>#include &lt;vtkSelection.h&gt;</div><div>#include &lt;vtkSelectionNode.h&gt;</div>

<div>#include &lt;vtkPolyData.h&gt;</div><div>#include &lt;vtkUnstructuredGrid.h&gt;</div><div>#include &lt;vtkIdTypeArray.h&gt;</div><div>#include &lt;vtkDataSetMapper.h&gt;</div><div>#include &lt;vtkProperty.h&gt;</div>

<div>#include &lt;vtkRenderWindow.h&gt;</div><div>#include &lt;vtkRenderWindowInteractor.h&gt;</div><div>#include &lt;vtkRenderer.h&gt;</div><div>#include &lt;vtkSphereSource.h&gt;</div><div>#include &lt;vtkVertexGlyphFilter.h&gt;</div>

<div>#include &lt;vtkTriangleStrip.h&gt;</div><div>#include &lt;vtkCellArray.h&gt;</div><div><br></div><div>#include &lt;vtkActor.h&gt;</div><div>#include &lt;vtkDataSetMapper.h&gt;</div><div>#include &lt;vtkPoints.h&gt;</div>

<div><br></div><div> </div><div>int main(int, char *[])</div><div>{</div><div><br></div><div>  vtkSmartPointer&lt;vtkPoints&gt; points = vtkSmartPointer&lt;vtkPoints&gt;::New();</div><div>  points-&gt;InsertNextPoint(0,0,0);</div>

<div>  points-&gt;InsertNextPoint(0,1,0);</div><div>  points-&gt;InsertNextPoint(1,0,0);</div><div>  points-&gt;InsertNextPoint(1.5,1,0);</div><div> </div><div>  vtkSmartPointer&lt;vtkTriangleStrip&gt; triangleStrip = vtkSmartPointer&lt;vtkTriangleStrip&gt;::New();</div>

<div>  triangleStrip-&gt;GetPointIds()-&gt;SetNumberOfIds(4);</div><div>  triangleStrip-&gt;GetPointIds()-&gt;SetId(0,0);</div><div>  triangleStrip-&gt;GetPointIds()-&gt;SetId(1,1);</div><div>  triangleStrip-&gt;GetPointIds()-&gt;SetId(2,2);</div>

<div>  triangleStrip-&gt;GetPointIds()-&gt;SetId(3,3);</div><div> </div><div>  vtkSmartPointer&lt;vtkCellArray&gt; cells = vtkSmartPointer&lt;vtkCellArray&gt;::New();</div><div>  cells-&gt;InsertNextCell(triangleStrip);</div>

<div> </div><div>  vtkSmartPointer&lt;vtkPolyData&gt; polydata = vtkSmartPointer&lt;vtkPolyData&gt;::New();</div><div>  polydata-&gt;SetPoints(points);</div><div>  polydata-&gt;SetStrips(cells);</div><div><br></div><div>
  vtkSmartPointer&lt;vtkIdTypeArray&gt; ids = vtkSmartPointer&lt;vtkIdTypeArray&gt;::New();</div>
<div>  ids-&gt;SetNumberOfComponents(1);</div><div>  ids-&gt;InsertNextValue(0);</div><div> </div><div><br></div><div>  vtkSmartPointer&lt;vtkSelectionNode&gt; selectionNode =</div><div>    vtkSmartPointer&lt;vtkSelectionNode&gt;::New();</div>

<div>  selectionNode-&gt;SetFieldType(vtkSelectionNode::POINT);</div><div>  selectionNode-&gt;SetContentType(vtkSelectionNode::INDICES);</div><div>  selectionNode-&gt;SetSelectionList(ids);</div><div>  selectionNode-&gt;GetProperties()-&gt;Set(vtkSelectionNode::CONTAINING_CELLS(), 1);</div>

<div> </div><div>  vtkSmartPointer&lt;vtkSelection&gt; selection =</div><div>    vtkSmartPointer&lt;vtkSelection&gt;::New();</div><div>  selection-&gt;AddNode(selectionNode);</div><div> </div><div>  vtkSmartPointer&lt;vtkExtractSelection&gt; extractSelection = vtkSmartPointer&lt;vtkExtractSelection&gt;::New();</div>

<div>  extractSelection-&gt;SetInput(0, polydata);</div><div>#if VTK_MAJOR_VERSION &lt;= 5</div><div>  extractSelection-&gt;SetInput(1, selection);</div><div>#else</div><div>  extractSelection-&gt;SetInputData(1, selection);</div>

<div>#endif</div><div>  extractSelection-&gt;Update();</div><div> </div><div>  // In selection</div><div>  vtkSmartPointer&lt;vtkUnstructuredGrid&gt; selected =</div><div>    vtkSmartPointer&lt;vtkUnstructuredGrid&gt;::New();</div>

<div>  selected-&gt;ShallowCopy(extractSelection-&gt;GetOutput());</div><div> </div><div>  std::cout &lt;&lt; &quot;There are &quot; &lt;&lt; selected-&gt;GetNumberOfPoints()</div><div>            &lt;&lt; &quot; points in the selection.&quot; &lt;&lt; std::endl;</div>

<div>  std::cout &lt;&lt; &quot;There are &quot; &lt;&lt; selected-&gt;GetNumberOfCells()</div><div>            &lt;&lt; &quot; cells in the selection.&quot; &lt;&lt; std::endl;</div><div> </div><div>  // Get points that are NOT in the selection</div>

<div>  selectionNode-&gt;GetProperties()-&gt;Set(vtkSelectionNode::INVERSE(), 1); //invert the selection</div><div>  extractSelection-&gt;Update();</div><div> </div><div>  vtkSmartPointer&lt;vtkUnstructuredGrid&gt; notSelected =</div>

<div>    vtkSmartPointer&lt;vtkUnstructuredGrid&gt;::New();</div><div>  notSelected-&gt;ShallowCopy(extractSelection-&gt;GetOutput());</div><div> </div><div>  std::cout &lt;&lt; &quot;There are &quot; &lt;&lt; notSelected-&gt;GetNumberOfPoints()</div>

<div>            &lt;&lt; &quot; points NOT in the selection.&quot; &lt;&lt; std::endl;</div><div>  std::cout &lt;&lt; &quot;There are &quot; &lt;&lt; notSelected-&gt;GetNumberOfCells()</div><div>            &lt;&lt; &quot; cells NOT in the selection.&quot; &lt;&lt; std::endl;</div>

<div> </div><div>  vtkSmartPointer&lt;vtkDataSetMapper&gt; inputMapper =</div><div>    vtkSmartPointer&lt;vtkDataSetMapper&gt;::New();</div><div>  inputMapper-&gt;SetInput(polydata);</div><div>  vtkSmartPointer&lt;vtkActor&gt; inputActor =</div>

<div>    vtkSmartPointer&lt;vtkActor&gt;::New();</div><div>  inputActor-&gt;SetMapper(inputMapper);</div><div> </div><div>  vtkSmartPointer&lt;vtkDataSetMapper&gt; selectedMapper =</div><div>    vtkSmartPointer&lt;vtkDataSetMapper&gt;::New();</div>

<div>#if VTK_MAJOR_VERSION &lt;= 5</div><div>  selectedMapper-&gt;SetInputConnection(selected-&gt;GetProducerPort());</div><div>#else</div><div>  selectedMapper-&gt;SetInputData(selected);</div><div>#endif</div><div>  vtkSmartPointer&lt;vtkActor&gt; selectedActor =</div>

<div>    vtkSmartPointer&lt;vtkActor&gt;::New();</div><div>  selectedActor-&gt;SetMapper(selectedMapper);</div><div> </div><div>  vtkSmartPointer&lt;vtkDataSetMapper&gt; notSelectedMapper =</div><div>    vtkSmartPointer&lt;vtkDataSetMapper&gt;::New();</div>

<div>#if VTK_MAJOR_VERSION &lt;= 5</div><div>  notSelectedMapper-&gt;SetInputConnection(notSelected-&gt;GetProducerPort());</div><div>#else</div><div>  notSelectedMapper-&gt;SetInputData(notSelected);</div><div>#endif</div>

<div>  vtkSmartPointer&lt;vtkActor&gt; notSelectedActor =</div><div>    vtkSmartPointer&lt;vtkActor&gt;::New();</div><div>  notSelectedActor-&gt;SetMapper(notSelectedMapper);</div><div> </div><div>  // There will be one render window</div>

<div>  vtkSmartPointer&lt;vtkRenderWindow&gt; renderWindow =</div><div>    vtkSmartPointer&lt;vtkRenderWindow&gt;::New();</div><div>  renderWindow-&gt;SetSize(900, 300);</div><div> </div><div>  // And one interactor</div>

<div>  vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; interactor =</div><div>    vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();</div><div>  interactor-&gt;SetRenderWindow(renderWindow);</div><div> </div><div>
  // Define viewport ranges</div>
<div>  // (xmin, ymin, xmax, ymax)</div><div>  double leftViewport[4] = {0.0, 0.0, 0.5, 1.0};</div><div>  double centerViewport[4] = {0.33, 0.0, .66, 1.0};</div><div>  double rightViewport[4] = {0.66, 0.0, 1.0, 1.0};</div>

<div> </div><div>  // Setup the renderers</div><div>  vtkSmartPointer&lt;vtkRenderer&gt; leftRenderer =</div><div>    vtkSmartPointer&lt;vtkRenderer&gt;::New();</div><div>  renderWindow-&gt;AddRenderer(leftRenderer);</div>

<div>  leftRenderer-&gt;SetViewport(leftViewport);</div><div>  leftRenderer-&gt;SetBackground(.6, .5, .4);</div><div> </div><div>  vtkSmartPointer&lt;vtkRenderer&gt; centerRenderer =</div><div>    vtkSmartPointer&lt;vtkRenderer&gt;::New();</div>

<div>  renderWindow-&gt;AddRenderer(centerRenderer);</div><div>  centerRenderer-&gt;SetViewport(centerViewport);</div><div>  centerRenderer-&gt;SetBackground(.3, .1, .4);</div><div> </div><div>  vtkSmartPointer&lt;vtkRenderer&gt; rightRenderer =</div>

<div>    vtkSmartPointer&lt;vtkRenderer&gt;::New();</div><div>  renderWindow-&gt;AddRenderer(rightRenderer);</div><div>  rightRenderer-&gt;SetViewport(rightViewport);</div><div>  rightRenderer-&gt;SetBackground(.4, .5, .6);</div>

<div> </div><div>  leftRenderer-&gt;AddActor(inputActor);</div><div>  centerRenderer-&gt;AddActor(selectedActor);</div><div>  rightRenderer-&gt;AddActor(notSelectedActor);</div><div> </div><div>  leftRenderer-&gt;ResetCamera();</div>

<div>  centerRenderer-&gt;ResetCamera();</div><div>  rightRenderer-&gt;ResetCamera();</div><div> </div><div>  renderWindow-&gt;Render();</div><div>  interactor-&gt;Start();</div><div> </div><div>  return EXIT_SUCCESS;</div>

<div>}</div><div><br></div><div><br></div>-- <br>--------<br>Gonzalo Amadio<br><br>
</div></div>