Datastructure-independent 2D 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 functions work on callback polygons.Geometry::PGPolyAreaExt