# Geometry :

Subject: [ggl] Difference / xor for multi polygons
From: Javier Gonzalez (xaviergonz)
Date: 2011-02-26 13:56:37

I have some test code like this:

typedef point<double, 2, cs::cartesian> point_2d;
typedef polygon<point_2d> polygon_2d;
typedef vector<polygon_2d> polygon_2d_list;

enum clip_type
{
clip_type_union,
clip_type_difference,
clip_type_intersection,
clip_type_xor
};

class Helper
{
public:
static polygon_2d_list Combine(polygon_2d_list subjectPoly,
polygon_2d_list clipPoly, clip_type clipType)
{
polygon_2d_list outputPoly;

if (clipType == clip_type_intersection)
intersection_inserter<polygon_2d>(subjectPoly, clipPoly,
back_inserter(outputPoly));
else if (clipType == clip_type_union)
union_inserter<polygon_2d>(subjectPoly, clipPoly,
back_inserter(outputPoly));
else if (clipType == clip_type_difference)
difference_inserter<polygon_2d>(subjectPoly, clipPoly,
back_inserter(outputPoly)); // ??? does not compile
else // xor
sym_difference_inserter<polygon_2d>(subjectPoly, clipPoly,
back_inserter(outputPoly)); // ??? does not compile

return outputPoly;
}
};

But there seems to be no multi algorithms for difference and sym difference
(xor)
I'm trying to get a behaivour like GPC.

Any idea on what would be the right approach?

PS: I'm assuming a multi_polygon is needed for example for two separated
"donuts" (two separated polygons with an outer ring and an inner ring each)
Do I really need to use multi polygons or would a simple polygon be able to
hold both figures?

Thanks
-------------- next part --------------
An HTML attachment was scrubbed...