/*
Copyright 2008 Intel Corporation

Use, modification and distribution are subject to the Boost Software License,
Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt).
*/
#include <boost/polygon/polygon.hpp>
#include <cassert>
namespace gtl = boost::polygon;
using namespace boost::polygon::operators;

int main() {
    //lets declare ourselves a polygon set
    using namespace gtl; //because of operators
    typedef std::vector<polygon_data<int> > PolygonSet;
    PolygonSet ps;
   
    //lets put some data in
    ps += rectangle_data<int>(0, 0, 10, 10);
   
    //now lets do something interesting
    PolygonSet ps2;
    ps2 += rectangle_data<int>(5, 5, 15, 15);
    PolygonSet ps3;
    assign(ps3, ps * ps2); //woah, I just felt the room flex around me
    PolygonSet ps4;
    ps4 += ps + ps2;
   
    //assert that area of result is equal to sum of areas
    //of input geometry minus the area of overlap between inputs
    assert(area(ps4) == area(ps) + area(ps2) - area(ps3));
   
    //I don't even see the code anymore, all
    //I see is bounding box...interval...triangle
   
    //lets try that again in slow motion shall we?
    assert(equivalence((ps + ps2) - (ps * ps2), ps ^ ps2));

    //hmm, subtracting the intersection from the union
    //is equivalent to the xor, all this in one line of code,
    //now we're programming in bullet time
    //(by the way, xor is implemented as one pass, not composition) 
   
    //just for fun
    rectangle_data<int> rect;
    assert(extents(rect, ps ^ ps2));
    assert(area(rect) == 225);
    assert(area(rect ^ (ps ^ ps2)) == area(rect) - area(ps ^ ps2));
    return 0;
}
   
//Now you know how to use the polygon set concept with library polygons
     

Copyright: Copyright Intel Corporation 2008-2010.
License: Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)