[vtkusers] Problem in Converting Lines to vtkPolyLine

Nicolas Sarrasin nsarrasin at phenix-systems.com
Thu Jan 6 05:30:59 EST 2011


Hi all,
I'm trying to convert a set of line into one only vtkPolyLine. (original 
post here : 
http://vtk.1045678.n5.nabble.com/construct-a-vtkPolyLine-PolyGon-from-a-set-of-vtkLines-td3325716.html)

I go through all the polylines of vtkPolyData->GetLines() and then get 
the associated points.
For most of case it works well, but I'm actually encounter a problem on 
a case.

The input polydata 
(http://img525.imageshack.us/img525/8370/vtkconvertioninit.png) is 
composed of two lines which trace an arc of circle.
After the convertion, this arc is closed 
(http://img502.imageshack.us/img502/8773/vtkconvertionres.png).
It comes from the second line which might not be correct.

Can someone explain me what is going wrong ?

Thanks by advance.

Here is a c++ sample code with the input file attached (wire.vtp).
****
#include <vtkSmartPointer.h>
#include <vtkCellArray.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkXMLPolyDataReader.h>
#include <vtkXMLPolyDataWriter.h>
#include <vtkPolyLine.h>#include <vtkSmartPointer.h>
#include <vtkCellArray.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkXMLPolyDataReader.h>
#include <vtkXMLPolyDataWriter.h>
#include <vtkPolyLine.h>

int main (int argc, char *argv[])
{
     vtkSmartPointer<vtkXMLPolyDataReader> reader = 
vtkSmartPointer<vtkXMLPolyDataReader>::New();
     reader->SetFileName("./wire.vtp");

     vtkSmartPointer<vtkPolyData> init_data = 
vtkSmartPointer<vtkPolyData>::New();
     init_data = reader->GetOutput();

     vtkSmartPointer<vtkPoints> init_points = 
vtkSmartPointer<vtkPoints>::New();
     init_points=init_data->GetPoints();

     vtkSmartPointer<vtkCellArray> init_lineArray = 
vtkSmartPointer<vtkCellArray>::New();
     init_lineArray = init_data->GetLines();

     int nblines = init_lineArray->GetNumberOfCells();

     vtkSmartPointer<vtkPolyData> new_data = 
vtkSmartPointer<vtkPolyData>::New();
     vtkSmartPointer<vtkPoints> new_points = 
vtkSmartPointer<vtkPoints>::New();
     vtkSmartPointer<vtkPolyLine> polyline = 
vtkSmartPointer<vtkPolyLine>::New();
     vtkSmartPointer<vtkCellArray> new_lineArray = 
vtkSmartPointer<vtkCellArray>::New();

     double coords[3];
     vtkIdType nbpts=0, *pts=0;
     for( init_lineArray->InitTraversal(); 
init_lineArray->GetNextCell(nbpts, pts);)
     {
         vtkIdType init_ind=0, new_ind=0;
         for(int p=0; p<nbpts; p++)
         {
             init_ind=pts[p];
             if(init_ind<0)
                 continue;
             init_points->GetPoint( init_ind, coords);

             new_ind=new_points->InsertNextPoint(coords);
             polyline->GetPointIds()->InsertNextId(new_ind);
         }
     }
     new_lineArray->InsertNextCell(polyline);
     new_data->SetPoints(new_points);
     new_data->SetLines(new_lineArray);

     vtkSmartPointer<vtkXMLPolyDataWriter> writer = 
vtkSmartPointer<vtkXMLPolyDataWriter>::New();
     writer->SetFileName("./new_wire.vtp");
     writer->SetInput(new_data);
     writer->Write();
****


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110106/8e5491dc/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: wire.vtp
Type: text/xml
Size: 4375 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110106/8e5491dc/attachment.bin>


More information about the vtkusers mailing list