#include "stdafx.h" #include #include using namespace boost::polygon::operators; #define POLYGON_45 #ifdef POLYGON_45 int points_A_1[] = { // 45 degree polygon -92810838,3618230, -94606872,1822196, -94999302,2214626, -93203268,4010660}; int points_A_1_size =4; #else int points_A_1[] = { // arbitrary polygon -92810838,3618230, -94606872,1822196, -94999302,2214625, // 2214626 -> 2214625, near 45 degree edge -93203268,4010660}; int points_A_1_size =4; #endif int points_B_1[] = { -94739968,1676908, -94606618,1822450, -94999048,2214880, -95165164,2033778}; int points_B_1_size =4; int main(int argc, char **argv) { typedef boost::polygon::polygon_data Polygon; typedef boost::polygon::point_data Point; typedef boost::polygon::polygon_set_data PolygonSet; std::vector points; int count = points_A_1_size; for (int i = 0; i < count; ++i) { points.push_back(boost::polygon::construct(points_A_1[2 * i], points_A_1[2 * i+1])); } Polygon A; A.set(points.begin(), points.end()); points.clear(); count = points_B_1_size; for (int i = 0; i < count; ++i) { points.push_back(boost::polygon::construct(points_B_1[2 * i], points_B_1[2 * i+1])); } Polygon B; B.set(points.begin(), points.end()); PolygonSet ps1, ps2, ps3; ps1 += A; ps2 += B; assign(ps3, ps1 + ps2); std::vector polygons; ps3.get(polygons); return 0; }