Boost logo

Boost Users :

Subject: [Boost-users] [Boost.Polygon] Union filling holes
From: Julien Nicoulaud (julien.nicoulaud_at_[hidden])
Date: 2014-10-09 11:56:56


Hi all,

I am using boost/polygon to do unions of multiple polygons, and I lose
holes that were in the input after the assign() operation. Here is code
that demonstrates the issue:

// Create outer contour
Point outer[] = {gtl::construct<Point>(0, 0),
gtl::construct<Point>(0, 10),
gtl::construct<Point>(10, 10),
gtl::construct<Point>(10, 0)};
 // Create inner contour
Point inner[] = {gtl::construct<Point>(2, 2),
gtl::construct<Point>(8, 2),
gtl::construct<Point>(8, 8),
gtl::construct<Point>(2, 8)};
 // Define inner contour as a polygon
polygon_with_holes_data<long> input_poly_inner;
gtl::set_points(input_poly_inner, inner, inner+4);
 // Put inner polygon in a list
vector<polygon_with_holes_data<long> > inners;
inners.push_back(input_poly_inner);
 // Create input polygon as outer contour + inner polygon list
polygon_with_holes_data<long> input_poly;
gtl::set_points(input_poly, outer, outer+4);
gtl::set_holes(input_poly, inners.begin(), inners.end());
 // Create input polygon set, insert input polygon
polygon_set_data<long> input_poly_set;
input_poly_set.insert(input_poly);
 // Create output polygon set, assign input polygon set
vector<polygon_with_holes_data<long> > output_poly_set;
assign(output_poly_set, input_poly_set);
 // Print result
std::cout << output_poly_set.size() << " polys" << std::endl;
std::cout << output_poly_set[0].size_holes() << " holes" << std::endl;

This prints:

1 polys
0 holes

Any idea what I am doing wrong ?

Kind regards,
Julien Nicoulaud



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net