1 |
|
---|
2 | #include <iostream>
|
---|
3 | #include <boost/polygon/polygon.hpp>
|
---|
4 | #include <cassert>
|
---|
5 | namespace gtl = boost::polygon;
|
---|
6 | using namespace boost::polygon::operators;
|
---|
7 |
|
---|
8 | //lets construct a 10x10 rectangle shaped polygon
|
---|
9 | typedef gtl::polygon_data<int> Polygon;
|
---|
10 | typedef gtl::polygon_traits<Polygon>::point_type Point;
|
---|
11 | typedef gtl::polygon_set_data<int> PolygonSet;
|
---|
12 | typedef std::vector<Polygon> PolyDataSet;
|
---|
13 |
|
---|
14 | void getOBS(Polygon &oPrboundary, PolyDataSet &pinGroup)
|
---|
15 | {
|
---|
16 | PolygonSet o_full_set;
|
---|
17 | o_full_set.insert(oPrboundary, false);
|
---|
18 |
|
---|
19 | foreach (Polygon o_item, pinGroup)
|
---|
20 | {
|
---|
21 | //o_full_set.insert(o_item, true); // Insert As Hole, which works in 1_53 but not in 1_56
|
---|
22 | o_full_set -= o_item; // works in 1_53 and 1_56
|
---|
23 | }
|
---|
24 |
|
---|
25 | PolyDataSet o_OBS_set;
|
---|
26 | o_full_set.get(o_OBS_set);
|
---|
27 |
|
---|
28 | for (int i = 0; i < o_OBS_set.size(); ++i)
|
---|
29 | {
|
---|
30 | Polygon o_poly = o_OBS_set.at(i);
|
---|
31 | std::vector<Point> poly_points;
|
---|
32 | poly_points.insert(poly_points.end(), o_poly.begin(), o_poly.end());
|
---|
33 | foreach(Point o_pos, poly_points)
|
---|
34 | {
|
---|
35 | std::cout << "(" << o_pos.x() << ", " << ") ";
|
---|
36 | }
|
---|
37 | std::cout << std::endl;
|
---|
38 | }
|
---|
39 | }
|
---|