[vtkusers] How to construct polygon?

Andrew Maclean andrew.amaclean at gmail.com
Tue Apr 18 02:26:55 EDT 2017


Hi Rakesh,
   I don't know what you intend to use it for. However if it is just a
one-off construction another suggestion would be to manually triangulate
the surface yourself.

This is what is done for the VTK Parametric Functions.

See void vtkParametricFunctionSource::MakeTriangles() and void
AddTriCells() in vtkParametricFunctionSource.cxx.

Andrew



> ---------- Forwarded message ----------
> From: rakesh patil <prakeshofficial at gmail.com>
> To: kenichiro yoshimi <rccm.kyoshimi at gmail.com>
> Cc: "vtkusers at vtk.org" <vtkusers at vtk.org>
> Bcc:
> Date: Mon, 17 Apr 2017 09:58:08 +0530
> Subject: Re: [vtkusers] How to construct polygon?
> Hi,
>
> I thought that vtkTriangleFilter does the tessellation of polygon by
> triangulating. Correct me if I am wrong. Let me try your suggestion and
> come back.
>
> Thanks
>
> On Mon, Apr 17, 2017 at 7:34 AM, kenichiro yoshimi <
> rccm.kyoshimi at gmail.com> wrote:
>
>> Hi,
>>
>> It looks like the issue of rendering concave polygons by OpenGL included
>> in the past mailing list, and it is concluded that OpenGL doesn't render
>> concave polygons properly and needs tessellation:
>> http://public.kitware.com/pipermail/vtkusers/2010-May/059784.html
>> http://vtk.1045678.n5.nabble.com/problems-rendering-concave-
>> polygon-td5007789.html
>> (I'm sorry I don't know the details of this problem.)
>>
>> I suggest using vtkDelaunay3D for tessellating and then using
>> vtkGeometryFilter that extracts the external faces.
>>
>> Thanks,
>> yoshimi
>>
>> 2017-04-17 3:30 GMT+09:00 rakesh patil <prakeshofficial at gmail.com>:
>>
>>> Hi,
>>>
>>> Well, I would like to know how polygon loop being non-planar leads to
>>> such output. Because, the image shown in expectedOutput is also built of
>>> similar polygon loop. Its just that for few curved surfaces are rendered
>>> properly and few don't. I just want to know why is there such inconsistent
>>> behavior and how do I overcome this?
>>>
>>> Thanks
>>>
>>> On Sat, Apr 15, 2017 at 10:56 AM, kenichiro yoshimi <
>>> rccm.kyoshimi at gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> Your polygon loop is non-planar.
>>>>
>>>>>>>> Howerver, the triangulate method used by vtkPolygon assumes that
>>>> polygon points lie in a plane. I recommend to use vtkCylinderSource or
>>>> vtkStructuredGrid to represent the side of surface of a cylinder.
>>>>
>>>> Thanks,
>>>> yoshimi
>>>>
>>>> 2017-04-14 0:38 GMT+09:00 Rakesh Patil <rakesh.p at tataelxsi.co.in>:
>>>>
>>>>> Hi,
>>>>>
>>>>>
>>>>> This question seems to be simple, but I am not able to get any output
>>>>> for this. I am not able to understand what is happening in this case:
>>>>>
>>>>>
>>>>> vtkSmartPointer<vtkPoints> tpoints = vtkSmartPointer<vtkPoints>::New();
>>>>>
>>>>> vtkSmartPointer<vtkPolygon> poly = vtkSmartPointer<vtkPolygon>::New();
>>>>>
>>>>> vtkSmartPointer<vtkCellArray> carr = vtkSmartPointer<vtkCellArray>::New();
>>>>>
>>>>> vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
>>>>>
>>>>>
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( 4.39116, -2.39117, 4.5));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( 4.39116, -2.39117, 3));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( 4.39116, -2.39117, 1.5));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( 4.39116, -2.39117, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( 4.08748, -2.87967, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( 3.05391, -3.95899, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( 1.74755, -4.68466, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( 0.28509, -4.99187, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -1.20284, -4.85316, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -2.58332, -4.28094, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -3.73305, -3.32631, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -4.54931, -2.07456, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -4.95919, -0.637487, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -4.92609, 0.856528, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -4.45295, 2.27403, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -3.58205, 3.4884, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -2.39117, 4.39116, 0));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -2.39117, 4.39116, 1.5));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -2.39117, 4.39116, 3));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -2.39117, 4.39116, 4.5));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -2.39117, 4.39116, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -3.58205, 3.4884, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -4.45295, 2.27403, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint( -4.92609, 0.856528, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint(-4.95919, -0.637487, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint(-4.54931, -2.07456, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint(-3.73305, -3.32631, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint(-2.58332, -4.28094, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint(-1.20284, -4.85316, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint(0.28509, -4.99187, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint(1.74755, -4.68466, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint(3.05391, -3.95899, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint(4.08748, -2.87967, 6));
>>>>>
>>>>> poly->GetPointIds()->InsertNextId(tpoints->InsertNextPoint(4.39116, -2.39117, 6));
>>>>>
>>>>> carr->InsertNextCell(poly);
>>>>>
>>>>>
>>>>>     polyData->SetPoints(tpoints);
>>>>>
>>>>>     polyData->SetPolys(carr);
>>>>>
>>>>>
>>>>>     vtkSmartPointer<vtkTriangleFilter> tfilter = vtkSmartPointer<vtkTriangleFilter>::New();
>>>>>
>>>>>     tfilter->SetInputData(polyData);
>>>>>
>>>>>     tfilter->Update();
>>>>>
>>>>>
>>>>>
>>>>>     vtkSmartPointer<vtkPolyDataMapper> pmapper = vtkSmartPointer<vtkPolyDataMapper>::New();
>>>>>
>>>>>     pmapper->SetInputConnection(tfilter->GetOutputPort());
>>>>>
>>>>>
>>>>>     vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
>>>>>
>>>>>     actor->SetMapper(pmapper);
>>>>>
>>>>>     actor->GetProperty()->SetRepresentationToSurface();
>>>>>
>>>>>     actor->GetProperty()->EdgeVisibilityOn();
>>>>>
>>>>>     actor->GetProperty()->SetEdgeColor(1.0, 0.0, 0.0);
>>>>>
>>>>>
>>>>>     renderer->AddActor(actor);
>>>>>
>>>>>     renderer->ResetCamera();
>>>>>
>>>>>
>>>>>
>>>>> I am not able to view the output if I use vtkTriangleFilter. I have
>>>>> attached two screenshots. One is to show how the expected output should
>>>>> come. Another is the vtk's output without applying vtkTriangleFilter. How
>>>>> do I get the curved surfaces based on the above geometry (points)?
>>>>>
>>>>>
>>>>> Am I missing anything there?
>>>>>
>>>>>
>>>>>
>>>>> Thanks & Regards
>>>>>
>>>>> Rakesh Patil
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Powered by www.kitware.com
>>>>>
>>>>> Visit other Kitware open-source projects at
>>>>> http://www.kitware.com/opensource/opensource.html
>>>>>
>>>>> Please keep messages on-topic and check the VTK FAQ at:
>>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>>>
>>>>> Search the list archives at: http://markmail.org/search/?q=vtkusers
>>>>>
>>>>> Follow this link to subscribe/unsubscribe:
>>>>> http://public.kitware.com/mailman/listinfo/vtkusers
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Please keep messages on-topic and check the VTK FAQ at:
>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>>
>>>> Search the list archives at: http://markmail.org/search/?q=vtkusers
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://public.kitware.com/mailman/listinfo/vtkusers
>>>>
>>>>
>>>
>>
>
>
>
-- 
___________________________________________
Andrew J. P. Maclean

___________________________________________
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20170418/cb2590ee/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: non_planar_polygon.png
Type: image/png
Size: 92659 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20170418/cb2590ee/attachment.png>


More information about the vtkusers mailing list