<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#ffffff" text="#003333">
    <small>Hi all,<br>
      I'm trying to convert a set of line into one only vtkPolyLine.
      (original post here :
<a class="moz-txt-link-freetext" href="http://vtk.1045678.n5.nabble.com/construct-a-vtkPolyLine-PolyGon-from-a-set-of-vtkLines-td3325716.html">http://vtk.1045678.n5.nabble.com/construct-a-vtkPolyLine-PolyGon-from-a-set-of-vtkLines-td3325716.html</a>)<br>
      <br>
      I go through all the polylines of vtkPolyData-&gt;GetLines() and
      then get the associated points.<br>
      For most of case it works well, but I'm actually encounter a
      problem on a case.<br>
      <br>
      The input polydata
      (<a class="moz-txt-link-freetext" href="http://img525.imageshack.us/img525/8370/vtkconvertioninit.png">http://img525.imageshack.us/img525/8370/vtkconvertioninit.png</a>) is
      composed of two lines which trace an arc of circle. <br>
      After the convertion, this arc is closed
      (<a class="moz-txt-link-freetext" href="http://img502.imageshack.us/img502/8773/vtkconvertionres.png">http://img502.imageshack.us/img502/8773/vtkconvertionres.png</a>). <br>
      It comes from the second line which might not be correct.<br>
      <br>
      Can someone explain me what is going wrong ?<br>
      <br>
      Thanks by advance.<br>
      <br>
      Here is a c++ sample code with the input file attached (wire.vtp).<br>
      ****<br>
      #include &lt;vtkSmartPointer.h&gt;<br>
      #include &lt;vtkCellArray.h&gt;<br>
      #include &lt;vtkPoints.h&gt;<br>
      #include &lt;vtkPolyData.h&gt;<br>
      #include &lt;vtkXMLPolyDataReader.h&gt;<br>
      #include &lt;vtkXMLPolyDataWriter.h&gt;<br>
      #include &lt;vtkPolyLine.h&gt;#include &lt;vtkSmartPointer.h&gt;<br>
      #include &lt;vtkCellArray.h&gt;<br>
      #include &lt;vtkPoints.h&gt;<br>
      #include &lt;vtkPolyData.h&gt;<br>
      #include &lt;vtkXMLPolyDataReader.h&gt;<br>
      #include &lt;vtkXMLPolyDataWriter.h&gt;<br>
      #include &lt;vtkPolyLine.h&gt;<br>
      <br>
      int main (int argc, char *argv[])<br>
      {<br>
      &nbsp;&nbsp; &nbsp;vtkSmartPointer&lt;vtkXMLPolyDataReader&gt; reader =
      vtkSmartPointer&lt;vtkXMLPolyDataReader&gt;::New();<br>
      &nbsp;&nbsp; &nbsp;reader-&gt;SetFileName("./wire.vtp");<br>
      <br>
      &nbsp;&nbsp; &nbsp;vtkSmartPointer&lt;vtkPolyData&gt; init_data =
      vtkSmartPointer&lt;vtkPolyData&gt;::New();<br>
      &nbsp;&nbsp; &nbsp;init_data = reader-&gt;GetOutput();<br>
      <br>
      &nbsp;&nbsp; &nbsp;vtkSmartPointer&lt;vtkPoints&gt; init_points =
      vtkSmartPointer&lt;vtkPoints&gt;::New();<br>
      &nbsp;&nbsp; &nbsp;init_points=init_data-&gt;GetPoints();<br>
      <br>
      &nbsp;&nbsp; &nbsp;vtkSmartPointer&lt;vtkCellArray&gt; init_lineArray =
      vtkSmartPointer&lt;vtkCellArray&gt;::New();<br>
      &nbsp;&nbsp; &nbsp;init_lineArray = init_data-&gt;GetLines();<br>
      <br>
      &nbsp;&nbsp; &nbsp;int nblines = init_lineArray-&gt;GetNumberOfCells();<br>
      <br>
      &nbsp;&nbsp; &nbsp;vtkSmartPointer&lt;vtkPolyData&gt; new_data =
      vtkSmartPointer&lt;vtkPolyData&gt;::New();<br>
      &nbsp;&nbsp; &nbsp;vtkSmartPointer&lt;vtkPoints&gt; new_points =
      vtkSmartPointer&lt;vtkPoints&gt;::New();<br>
      &nbsp;&nbsp; &nbsp;vtkSmartPointer&lt;vtkPolyLine&gt; polyline =
      vtkSmartPointer&lt;vtkPolyLine&gt;::New();<br>
      &nbsp;&nbsp; &nbsp;vtkSmartPointer&lt;vtkCellArray&gt; new_lineArray =
      vtkSmartPointer&lt;vtkCellArray&gt;::New();<br>
      <br>
      &nbsp;&nbsp; &nbsp;double coords[3];<br>
      &nbsp;&nbsp; &nbsp;vtkIdType nbpts=0, *pts=0;<br>
      &nbsp;&nbsp; &nbsp;for( init_lineArray-&gt;InitTraversal();
      init_lineArray-&gt;GetNextCell(nbpts, pts);)<br>
      &nbsp;&nbsp; &nbsp;{<br>
      &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;vtkIdType init_ind=0, new_ind=0;<br>
      &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for(int p=0; p&lt;nbpts; p++)<br>
      &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br>
      &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;init_ind=pts[p];<br>
      &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(init_ind&lt;0)<br>
      &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;continue;<br>
      &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;init_points-&gt;GetPoint( init_ind, coords);<br>
      <br>
      &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;new_ind=new_points-&gt;InsertNextPoint(coords);<br>
      &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;polyline-&gt;GetPointIds()-&gt;InsertNextId(new_ind);<br>
      &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>
      &nbsp;&nbsp; &nbsp;}<br>
      &nbsp;&nbsp; &nbsp;new_lineArray-&gt;InsertNextCell(polyline);<br>
      &nbsp;&nbsp; &nbsp;new_data-&gt;SetPoints(new_points);<br>
      &nbsp;&nbsp; &nbsp;new_data-&gt;SetLines(new_lineArray);<br>
      <br>
      &nbsp;&nbsp; &nbsp;vtkSmartPointer&lt;vtkXMLPolyDataWriter&gt; writer =
      vtkSmartPointer&lt;vtkXMLPolyDataWriter&gt;::New();<br>
      &nbsp;&nbsp; &nbsp;writer-&gt;SetFileName("./new_wire.vtp");<br>
      &nbsp;&nbsp; &nbsp;writer-&gt;SetInput(new_data);<br>
      &nbsp;&nbsp; &nbsp;writer-&gt;Write();<br>
      ****<br>
      <br>
      <br>
    </small>
  </body>
</html>