summaryrefslogtreecommitdiff
path: root/boost/geometry/algorithms/detail/overlay/overlay.hpp
diff options
context:
space:
mode:
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