I apologize for sending this to the mailing list, but when I tried to file a bug report via Trac, it said "Trac thinks your submission might be Spam. To prove otherwise please provide a response to the following"... And then there was no "following". Please let me know if there is a better forum to report this sort of issue. I am using Boost 1.56. The following program uses boost::polygon to slice up a figure (with a "hole" cut out of it) into horizontal trapezoids. The output I get is: Output: polygon (4 3) (4 0) (0 0) (0 3) (4 3) ...which is clearly wrong. I am pretty sure my code is correct, because if I replace bg::HORIZONTAL with bg::VERTICAL, I get the correct output of a bunch of vertical trapezoids. For my application, I really want horizontal traps. I suppose I can just swap x and y on input and output... But this seemed worth reporting. Thanks. - Pat #include <boost/polygon/polygon.hpp> #include <iostream> namespace bp = boost::polygon; typedef bp::polygon_set_data<int> PolygonSet; typedef bp::polygon_data<PolygonSet::coordinate_type> Polygon; typedef bp::polygon_traits<Polygon>::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<Polygon> temp; ps.get(temp); os << "polygonset "; for (std::vector<Polygon>::const_iterator p = temp.begin() ; p != temp.end() ; ++p) os << " " << *p; return os; } int main(int argc, char *argv[]) { 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) }; Polygon poly; bp::set_points(poly, &points[0], &points[sizeof(points)/sizeof(points[0])]); std::cout << "Input: " << poly << "\n"; PolygonSet ps; ps.insert(poly); std::cout << "ps = " << ps << "\n"; std::vector<Polygon> traps; // Note: bp::VERTICAL works fine bp::get_trapezoids(traps, ps, bp::HORIZONTAL); std::cout << "Output:\n"; for (std::vector<Polygon>::const_iterator p = traps.begin() ; p != traps.end() ; ++p) std::cout << *p << "\n"; }