]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Boost.Geometry (aka GGL, Generic Geometry Library) |
2 | // | |
3 | // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. | |
b32b8144 FG |
4 | // |
5 | // This file was modified by Oracle on 2017. | |
6 | // Modifications copyright (c) 2017 Oracle and/or its affiliates. | |
7 | // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle | |
8 | // | |
7c673cae FG |
9 | // Use, modification and distribution is subject to the Boost Software License, |
10 | // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
11 | // http://www.boost.org/LICENSE_1_0.txt) | |
12 | ||
13 | #include <geometry_test_common.hpp> | |
14 | ||
b32b8144 | 15 | #include <boost/foreach.hpp> |
7c673cae | 16 | #include <boost/range/algorithm/copy.hpp> |
b32b8144 FG |
17 | #include <boost/tuple/tuple.hpp> |
18 | #include <boost/typeof/typeof.hpp> | |
19 | ||
20 | #include <algorithms/test_overlay.hpp> | |
7c673cae FG |
21 | |
22 | #include <boost/geometry/geometry.hpp> | |
23 | #include <boost/geometry/algorithms/detail/overlay/select_rings.hpp> | |
24 | #include <boost/geometry/algorithms/detail/overlay/assign_parents.hpp> | |
25 | ||
26 | #include <boost/geometry/geometries/point_xy.hpp> | |
27 | #include <boost/geometry/geometries/polygon.hpp> | |
28 | ||
29 | #include <boost/geometry/io/wkt/read.hpp> | |
30 | ||
31 | #include <boost/assign/list_of.hpp> | |
7c673cae FG |
32 | |
33 | ||
34 | template | |
35 | < | |
36 | typename Geometry1, | |
37 | typename Geometry2, | |
38 | bg::overlay_type OverlayType, | |
39 | typename RingIdVector | |
40 | > | |
41 | void test_geometry(std::string const& wkt1, std::string const& wkt2, | |
42 | RingIdVector const& expected_ids) | |
43 | { | |
b32b8144 FG |
44 | typedef bg::detail::overlay::ring_properties |
45 | < | |
46 | typename bg::point_type<Geometry1>::type, | |
47 | double | |
48 | > properties; | |
7c673cae FG |
49 | |
50 | Geometry1 geometry1; | |
51 | Geometry2 geometry2; | |
52 | ||
53 | bg::read_wkt(wkt1, geometry1); | |
54 | bg::read_wkt(wkt2, geometry2); | |
55 | ||
56 | typedef std::map<bg::ring_identifier, properties> map_type; | |
57 | map_type selected; | |
58 | std::map<bg::ring_identifier, bg::detail::overlay::ring_turn_info> empty; | |
59 | ||
b32b8144 FG |
60 | typedef typename bg::strategy::intersection::services::default_strategy |
61 | < | |
62 | typename bg::cs_tag<Geometry1>::type | |
63 | >::type strategy_type; | |
64 | ||
65 | bg::detail::overlay::select_rings<OverlayType>(geometry1, geometry2, empty, selected, strategy_type()); | |
7c673cae FG |
66 | |
67 | BOOST_CHECK_EQUAL(selected.size(), expected_ids.size()); | |
68 | ||
69 | if (selected.size() <= expected_ids.size()) | |
70 | { | |
71 | BOOST_AUTO(eit, expected_ids.begin()); | |
72 | for(typename map_type::const_iterator it = selected.begin(); it != selected.end(); ++it, ++eit) | |
73 | { | |
74 | bg::ring_identifier const ring_id = it->first; | |
75 | BOOST_CHECK_EQUAL(ring_id.source_index, eit->source_index); | |
76 | BOOST_CHECK_EQUAL(ring_id.multi_index, eit->multi_index); | |
77 | BOOST_CHECK_EQUAL(ring_id.ring_index, eit->ring_index); | |
78 | } | |
79 | } | |
80 | } | |
81 | ||
82 | ||
83 | ||
84 | ||
85 | template <typename P> | |
86 | void test_all() | |
87 | { | |
88 | // Point in correct clockwise ring -> should return true | |
89 | typedef bg::ring_identifier rid; | |
90 | ||
91 | test_geometry<bg::model::polygon<P>, bg::model::polygon<P>, bg::overlay_union>( | |
92 | winded[0], winded[1], | |
93 | boost::assign::list_of | |
94 | (rid(0,-1,-1)) | |
95 | (rid(0,-1, 0)) | |
96 | (rid(0,-1, 1)) | |
97 | (rid(0,-1, 3)) | |
98 | (rid(1,-1, 1)) | |
99 | (rid(1,-1, 2))); | |
100 | ||
101 | test_geometry<bg::model::polygon<P>, bg::model::polygon<P>, bg::overlay_intersection>( | |
102 | winded[0], winded[1], | |
103 | boost::assign::list_of | |
104 | (rid(0,-1, 2)) | |
105 | (rid(1,-1,-1)) | |
106 | (rid(1,-1, 0)) | |
107 | (rid(1,-1, 3))); | |
108 | } | |
109 | ||
110 | ||
111 | ||
112 | ||
113 | int test_main( int , char* [] ) | |
114 | { | |
115 | test_all<bg::model::d2::point_xy<double> >(); | |
116 | ||
117 | return 0; | |
118 | } |