#include #include namespace bp = boost::polygon; typedef bp::polygon_set_data PolygonSet; typedef bp::polygon_data Polygon; typedef bp::polygon_with_holes_data PolygonWithHoles; typedef bp::polygon_traits::point_type Point; std::ostream & operator<<(std::ostream &os, const Point &pt) { return os << "(" << bp::x(pt) << " " << bp::y(pt) << ")"; } std::ostream & operator<<(std::ostream &os, const Polygon &poly) { os << "polygon "; for (Polygon::iterator_type p = poly.begin() ; p != poly.end() ; ++p) os << " " << *p; return os; } std::ostream & operator<<(std::ostream &os, const PolygonSet &ps) { std::vector temp; ps.get(temp); os << "polygonset "; for (std::vector::const_iterator p = temp.begin() ; p != temp.end() ; ++p) os << " " << *p; return os; } int main(int argc, char *argv[]) { using namespace bp::operators; const Point points[] = { Point(2,0), Point(4,0), Point(4,3), Point(0,3), Point(0,0), Point(2,0), Point(2,1), Point(1,1), Point(1,2), Point(3,2), Point(3,1), Point(2,1), Point(2,0) }; Polygon poly1; bp::set_points(poly1, &points[0], &points[sizeof(points)/sizeof(points[0])]); std::cout << "poly1 = " << poly1 << "\n"; PolygonSet ps; ps.insert(poly1); std::cout << "ps = " << ps << "\n"; std::vector traps; // Note: bp::VERTICAL works fine get_trapezoids(traps, ps, bp::HORIZONTAL); std::cout << "Output: (" << traps.size() << ")\n"; for (std::vector::const_iterator p = traps.begin() ; p != traps.end() ; ++p) std::cout << *p << "\n"; }