1 | #include <iostream>
|
---|
2 |
|
---|
3 | #include <boost/assert.hpp>
|
---|
4 |
|
---|
5 | #include <boost/geometry/geometry.hpp>
|
---|
6 | #include <boost/geometry/geometries/geometries.hpp>
|
---|
7 | #include <boost/geometry/multi/geometries/multi_geometries.hpp>
|
---|
8 |
|
---|
9 | namespace bg = boost::geometry;
|
---|
10 |
|
---|
11 | typedef bg::model::point<int, 2, bg::cs::cartesian> point_type;
|
---|
12 | typedef bg::model::polygon<point_type, false, false> polygon_type; //ccw, open
|
---|
13 | typedef bg::model::multi_polygon<polygon_type> multi_polygon_type; //ccw, open
|
---|
14 |
|
---|
15 | int main()
|
---|
16 | {
|
---|
17 | polygon_type p1, p2;
|
---|
18 | multi_polygon_type result;
|
---|
19 | bg::read_wkt("POLYGON((813 277,1341 319,1863 361,2391 571,2913 361,3441 319,3963 277,3963 32767,813 32767))", p1);
|
---|
20 |
|
---|
21 | bg::read_wkt("POLYGON((813 277,1341 319,1863 571,2391 571,2913 571,3441 319,3963 277,3963 32767,813 32767))", p2);
|
---|
22 |
|
---|
23 | bool is_valid1 = bg::is_valid(p1);
|
---|
24 | bool is_valid2 = bg::is_valid(p2);
|
---|
25 |
|
---|
26 | if ( is_valid1 )
|
---|
27 | {
|
---|
28 | std::cout << "1st polygon is valid ..." << std::endl;
|
---|
29 | }
|
---|
30 | else
|
---|
31 | {
|
---|
32 | std::cout << "1st polygon is NOT valid ..." << std::endl;
|
---|
33 | bg::correct(p1);
|
---|
34 | BOOST_ASSERT( bg::is_valid(p1) );
|
---|
35 | }
|
---|
36 |
|
---|
37 | if ( is_valid2 )
|
---|
38 | {
|
---|
39 | std::cout << "2nd polygon is valid ..." << std::endl;
|
---|
40 | }
|
---|
41 | else
|
---|
42 | {
|
---|
43 | std::cout << "2nd polygon is NOT valid ..." << std::endl;
|
---|
44 | bg::correct(p2);
|
---|
45 | BOOST_ASSERT( bg::is_valid(p2) );
|
---|
46 | }
|
---|
47 |
|
---|
48 | bg::sym_difference(p1, p2, result);
|
---|
49 |
|
---|
50 | std::cout << bg::wkt(result) << std::endl;
|
---|
51 | std::cout << bg::dsv(result) << std::endl;
|
---|
52 | std::cout << "# of points: " << bg::num_points(result) << std::endl;
|
---|
53 |
|
---|
54 | return 0;
|
---|
55 | }
|
---|