[vtkusers] Fwd: Re: Problem in Converting Lines to vtkPolyLine
Nicolas Sarrasin
nsarrasin at phenix-systems.com
Thu Jan 6 11:04:30 EST 2011
Ok i've found the problem.
It comes from my convertion. (Sometimes I have to reverse the order of
the new line to add...)
FYI I also use CleanPolyData before my convertion.
Thanks for our help, and sorry for disturbance ^^.
Nicolas.
Le 06/01/2011 15:10, David Gobbi a écrit :
> 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 <mailto: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> <mailto: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/97555513/attachment.htm>
More information about the vtkusers
mailing list