summaryrefslogtreecommitdiff
path: root/boost/geometry/algorithms/detail/overlay/overlay.hpp
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 10:33:54 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2016-10-06 10:36:09 +0900
commitd9ec475d945d3035377a0d89ed42e382d8988891 (patch)
tree34aff2cee4b209906243ab5499d61f3edee2982f /boost/geometry/algorithms/detail/overlay/overlay.hpp
parent71d216b90256936a9638f325af9bc69d720e75de (diff)
downloadboost-d9ec475d945d3035377a0d89ed42e382d8988891.tar.gz
boost-d9ec475d945d3035377a0d89ed42e382d8988891.tar.bz2
boost-d9ec475d945d3035377a0d89ed42e382d8988891.zip
Imported Upstream version 1.60.0
Change-Id: Ie709530d6d5841088ceaba025cbe175a4ef43050 Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'boost/geometry/algorithms/detail/overlay/overlay.hpp')
-rw-r--r--boost/geometry/algorithms/detail/overlay/overlay.hpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/boost/geometry/algorithms/detail/overlay/overlay.hpp b/boost/geometry/algorithms/detail/overlay/overlay.hpp
index baf9d4777d..6eb0b8864c 100644
--- a/boost/geometry/algorithms/detail/overlay/overlay.hpp
+++ b/boost/geometry/algorithms/detail/overlay/overlay.hpp
@@ -78,6 +78,11 @@ inline void get_ring_turn_info(TurnInfoMap& turn_info_map,
&& ! turn_info.both(operation_intersection)
;
+ if (! both_uu && turn_info.colocated)
+ {
+ skip = true;
+ }
+
for (typename boost::range_iterator<container_type const>::type
op_it = boost::begin(turn_info.operations);
op_it != boost::end(turn_info.operations);
@@ -105,7 +110,7 @@ inline void get_ring_turn_info(TurnInfoMap& turn_info_map,
template
<
- typename GeometryOut, overlay_type Direction, bool ReverseOut,
+ typename GeometryOut, overlay_type OverlayType, bool ReverseOut,
typename Geometry1, typename Geometry2,
typename OutputIterator
>
@@ -129,8 +134,8 @@ inline OutputIterator return_if_one_input_is_empty(Geometry1 const& geometry1,
// Union: return either of them
// Intersection: return nothing
// Difference: return first of them
- if (Direction == overlay_intersection
- || (Direction == overlay_difference && geometry::is_empty(geometry1)))
+ if (OverlayType == overlay_intersection
+ || (OverlayType == overlay_difference && geometry::is_empty(geometry1)))
{
return out;
}
@@ -143,7 +148,7 @@ inline OutputIterator return_if_one_input_is_empty(Geometry1 const& geometry1,
std::map<ring_identifier, ring_turn_info> empty;
std::map<ring_identifier, properties> all_of_one_of_them;
- select_rings<Direction>(geometry1, geometry2, empty, all_of_one_of_them);
+ select_rings<OverlayType>(geometry1, geometry2, empty, all_of_one_of_them);
ring_container_type rings;
assign_parents(geometry1, geometry2, rings, all_of_one_of_them);
return add_rings<GeometryOut>(all_of_one_of_them, geometry1, geometry2, rings, out);
@@ -155,7 +160,7 @@ template
typename Geometry1, typename Geometry2,
bool Reverse1, bool Reverse2, bool ReverseOut,
typename GeometryOut,
- overlay_type Direction
+ overlay_type OverlayType
>
struct overlay
{
@@ -178,7 +183,7 @@ struct overlay
{
return return_if_one_input_is_empty
<
- GeometryOut, Direction, ReverseOut
+ GeometryOut, OverlayType, ReverseOut
>(geometry1, geometry2, out);
}
@@ -211,8 +216,8 @@ std::cout << "get turns" << std::endl;
std::cout << "enrich" << std::endl;
#endif
typename Strategy::side_strategy_type side_strategy;
- geometry::enrich_intersection_points<Reverse1, Reverse2>(turn_points,
- Direction == overlay_union
+ geometry::enrich_intersection_points<Reverse1, Reverse2, OverlayType>(turn_points,
+ OverlayType == overlay_union
? geometry::detail::overlay::operation_union
: geometry::detail::overlay::operation_intersection,
geometry1, geometry2,
@@ -229,7 +234,7 @@ std::cout << "traverse" << std::endl;
traverse<Reverse1, Reverse2, Geometry1, Geometry2>::apply
(
geometry1, geometry2,
- Direction == overlay_union
+ OverlayType == overlay_union
? geometry::detail::overlay::operation_union
: geometry::detail::overlay::operation_intersection,
robust_policy,
@@ -246,7 +251,7 @@ std::cout << "traverse" << std::endl;
// Select all rings which are NOT touched by any intersection point
std::map<ring_identifier, properties> selected_ring_properties;
- select_rings<Direction>(geometry1, geometry2, turn_info_per_ring,
+ select_rings<OverlayType>(geometry1, geometry2, turn_info_per_ring,
selected_ring_properties);
// Add rings created during traversal