diff --git a/extensions/test/algorithms/dissolve.cpp b/extensions/test/algorithms/dissolve.cpp index cb27be66c..52673eeb0 100644 --- a/extensions/test/algorithms/dissolve.cpp +++ b/extensions/test/algorithms/dissolve.cpp @@ -387,10 +387,9 @@ void test_dissolve(std::string const& caseid, Geometry const& geometry, bg::dispatch::dissolve < - typename bg::tag::type, - typename bg::tag::type, Geometry, - GeometryOut + GeometryOut, + false >::apply(geometry, robust_policy, std::back_inserter(dissolved1), strategy, visitor); diff --git a/include/boost/geometry/extensions/algorithms/detail/overlay/dissolve_traverse.hpp b/include/boost/geometry/extensions/algorithms/detail/overlay/dissolve_traverse.hpp index 598cd16bc..47d243dd0 100644 --- a/include/boost/geometry/extensions/algorithms/detail/overlay/dissolve_traverse.hpp +++ b/include/boost/geometry/extensions/algorithms/detail/overlay/dissolve_traverse.hpp @@ -28,7 +28,7 @@ namespace detail { namespace dissolve for dissolves calls traversal_ring_creator in two phases \ingroup dissolve */ -template +template class traverse { @@ -54,7 +54,7 @@ public : { detail::overlay::traversal_ring_creator < - false, false, overlay_dissolve, + Reverse, Reverse, overlay_dissolve, Geometry, Geometry, Turns, TurnInfoMap, Clusters, IntersectionStrategy, diff --git a/include/boost/geometry/extensions/algorithms/dissolve.hpp b/include/boost/geometry/extensions/algorithms/dissolve.hpp index 980e6c564..90c8d0bce 100644 --- a/include/boost/geometry/extensions/algorithms/dissolve.hpp +++ b/include/boost/geometry/extensions/algorithms/dissolve.hpp @@ -113,7 +113,7 @@ public : } }; -template +template struct dissolve_ring_or_polygon { template @@ -169,8 +169,9 @@ struct dissolve_ring_or_polygon std::vector turns; detail::dissolve::no_interrupt_policy policy; - geometry::self_turns + detail::self_get_turn_points::self_turns < + Reverse, detail::overlay::assign_null_policy >(geometry, strategy, rescale_policy, turns, policy, 0, false); @@ -205,7 +206,7 @@ struct dissolve_ring_or_polygon typename Strategy::side_strategy_type const side_strategy = strategy.get_side_strategy(); - enrich_intersection_points(turns, + enrich_intersection_points(turns, clusters, geometry, geometry, rescale_policy, side_strategy); @@ -215,7 +216,7 @@ struct dissolve_ring_or_polygon std::map turn_info_per_ring; - detail::dissolve::traverse > + detail::dissolve::traverse > ::apply(geometry, strategy, rescale_policy, turns, rings, turn_info_per_ring, clusters, visitor); @@ -297,25 +298,26 @@ namespace dispatch template < - typename GeometryTag, - typename GeometryOutTag, typename Geometry, - typename GeometryOut + typename GeometryOut, + bool Reverse, + typename GeometryTag = typename tag::type, + typename GeometryOutTag = typename tag::type > struct dissolve : not_implemented {}; -template -struct dissolve - : detail::dissolve::dissolve_ring_or_polygon +template +struct dissolve + : detail::dissolve::dissolve_ring_or_polygon {}; -template -struct dissolve - : detail::dissolve::dissolve_ring_or_polygon +template +struct dissolve + : detail::dissolve::dissolve_ring_or_polygon {}; @@ -365,10 +367,12 @@ inline OutputIterator dissolve_inserter(Geometry const& geometry, return dispatch::dissolve < - typename tag::type, - typename tag::type, Geometry, - GeometryOut + GeometryOut, + detail::overlay::do_reverse + < + geometry::point_order::value + >::value >::apply(geometry, robust_policy, out, strategy, visitor); } @@ -430,10 +434,12 @@ inline void dissolve(Geometry const& geometry, Collection& output_collection, dispatch::dissolve < - typename tag::type, - typename tag::type, Geometry, - geometry_out + geometry_out, + detail::overlay::do_reverse + < + geometry::point_order::value + >::value >::apply(geometry, robust_policy, std::back_inserter(output_collection), strategy, visitor); diff --git a/include/boost/geometry/extensions/multi/algorithms/dissolve.hpp b/include/boost/geometry/extensions/multi/algorithms/dissolve.hpp index bedc995ff..0b59940ee 100644 --- a/include/boost/geometry/extensions/multi/algorithms/dissolve.hpp +++ b/include/boost/geometry/extensions/multi/algorithms/dissolve.hpp @@ -35,7 +35,7 @@ namespace boost { namespace geometry namespace detail { namespace dissolve { -template +template struct dissolve_multi { template @@ -59,7 +59,8 @@ struct dissolve_multi dissolve_ring_or_polygon < polygon_type, - GeometryOut + GeometryOut, + Reverse >::apply(*it, rescale_policy, std::back_inserter(step1), strategy, visitor); } @@ -96,9 +97,9 @@ namespace dispatch { -template -struct dissolve - : detail::dissolve::dissolve_multi +template +struct dissolve + : detail::dissolve::dissolve_multi {};