# Datastructure-independent 3D Polygon functions

These functions work on any data-structures with callback functions (nowadays called: iterators). It gives you a big freedom to choose the appropriate data-storage format for your special needs, but you must provide these callbacks (iterators) for working.

What you should provide a general description of a polygon: number of contours and vertices, orientation, etc. And a callback function like a constant random iterator to polygon segments called here as edges. Each polygon segment consist of a vertex and an edge starting from it according to the orientation. Each segment should mark that it is an end of a contour or not. So there are no separate contour structure.

To get the results you must provide a callback function like a back-inserter iterator to a storage for the resulting polygons. And a callback function like a back-inserter iterator to a storage for the resulting segments (called edges too) for all polygons. The contour ends are marked in the segments.

These structures describe callback polygon.

Geometry::PG3DEDGEEXTGeometry::PG3DPOLYEXT

Geometry::PGPoly3DPosition

These functions work on callback polygons.

Geometry::PG3DPolyPositionExtGeometry::PG3DSplitPolyExt