[vtkusers] Fwd: Re: Problem in Converting Lines to vtkPolyLine
David Gobbi
david.gobbi at gmail.com
Thu Jan 6 09:10:31 EST 2011
If vtkStripper works most of the time, but not all the time, it might be a
tolerance issue. What I mean is, the endpoints for the line segments might
not match exactly.
You could try using vtkCleanPolyData with SetTolerance(1e-6) before
vtkStripper. This will merge all nearly-coincident points.
David
On Thu, Jan 6, 2011 at 6:55 AM, Nicolas Sarrasin <
nsarrasin at phenix-systems.com> wrote:
> Yes of course !
>
> That's why I'm writing "For most of case it works well", vtkStripper helps
> me a lot.
>
> But with this example, my convertion fails.
>
> With debug, I found that the secondth (and last) line close the arc of
> circle but when I display it, this doesn't appear, as it's shown in the
> pictures I linked.
>
> Le 06/01/2011 14:47, David Gobbi a écrit :
>
> Hi Nicolas,
>
> In my last email to you, I recommended the vtkStripper filter for
> generating a polyline from line segments. Did you try it?
>
> Cheers,
>
> David
>
>
> On Thu, Jan 6, 2011 at 3:30 AM, Nicolas Sarrasin<nsarrasin at phenix-systems.com> <nsarrasin at phenix-systems.com> wrote:
>
> 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/3bc76d17/attachment.htm>
More information about the vtkusers
mailing list