[vtkusers] How to construct polygon?

kenichiro yoshimi rccm.kyoshimi at gmail.com
Sun Apr 16 22:04:27 EDT 2017


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
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20170417/e9a68021/attachment-0001.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/20170417/e9a68021/attachment-0001.png>


More information about the vtkusers mailing list