diff --git a/extensions/test/algorithms/dissolve.cpp b/extensions/test/algorithms/dissolve.cpp index 46fae52d0..2c6da16d8 100644 --- a/extensions/test/algorithms/dissolve.cpp +++ b/extensions/test/algorithms/dissolve.cpp @@ -273,6 +273,13 @@ void test_all() "POLYGON((5 0,2.5 9,9.5 3.5,0.5 3.5,7.5 9,5 0))", 0, 11, 25.6158412); + // CCW polygons should turn CW after dissolve + test_one("cw", + "POLYGON((2 8,8 8,8 0,0 0,0 6,4 6,4 4,2 4,2 8))", + 0, 7, 60); + test_one("ccw", + "POLYGON((2 8,2 4,4 4,4 6,0 6,0 0,8 0,8 8,2 8))", + 0, 12, 64); // TODO: should have the same, 7, 60. The polygon is dissolved (splitted) but the extra polygon is still on top of the other // Multi-geometries { diff --git a/include/boost/geometry/extensions/algorithms/detail/overlay/dissolver.hpp b/include/boost/geometry/extensions/algorithms/detail/overlay/dissolver.hpp index 7d36d6dd2..ac4fdb40c 100644 --- a/include/boost/geometry/extensions/algorithms/detail/overlay/dissolver.hpp +++ b/include/boost/geometry/extensions/algorithms/detail/overlay/dissolver.hpp @@ -125,7 +125,12 @@ class plusmin_policy //negative = true; typedef typename geometry::point_type::type point_type; - typedef overlay::turn_info turn_info; + + typedef overlay::turn_info + < + point_type, + typename segment_ratio_type::type + > turn_info; std::deque turns; // Get (and stop on) any intersection