$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r69584 - in trunk/boost/geometry: algorithms algorithms/detail/overlay geometries/adapted/boost_polygon
From: barend.gehrels_at_[hidden]
Date: 2011-03-05 17:23:31
Author: barendgehrels
Date: 2011-03-05 17:23:29 EST (Sat, 05 Mar 2011)
New Revision: 69584
URL: http://svn.boost.org/trac/boost/changeset/69584
Log:
Fixed TODO item from list for better reversal of ccw polygons
Text files modified: 
   trunk/boost/geometry/algorithms/detail/overlay/get_turns.hpp   |     2 +-                                      
   trunk/boost/geometry/algorithms/detail/overlay/overlay.hpp     |    19 +++++--------------                     
   trunk/boost/geometry/algorithms/intersection.hpp               |     2 +-                                      
   trunk/boost/geometry/geometries/adapted/boost_polygon/ring.hpp |     1 +                                       
   4 files changed, 8 insertions(+), 16 deletions(-)
Modified: trunk/boost/geometry/algorithms/detail/overlay/get_turns.hpp
==============================================================================
--- trunk/boost/geometry/algorithms/detail/overlay/get_turns.hpp	(original)
+++ trunk/boost/geometry/algorithms/detail/overlay/get_turns.hpp	2011-03-05 17:23:29 EST (Sat, 05 Mar 2011)
@@ -447,7 +447,7 @@
 
         // Divide the complete box in two (alternating) halves
         Box lower = box, upper = box;
-        typename geometry::coordinate_type<Box>::type two = 2.0;
+        typename geometry::coordinate_type<Box>::type two = 2;
         typename geometry::coordinate_type<Box>::type mid
             = (geometry::get<min_corner, Dimension>(box)
                 + geometry::get<max_corner, Dimension>(box)) / two;
Modified: trunk/boost/geometry/algorithms/detail/overlay/overlay.hpp
==============================================================================
--- trunk/boost/geometry/algorithms/detail/overlay/overlay.hpp	(original)
+++ trunk/boost/geometry/algorithms/detail/overlay/overlay.hpp	2011-03-05 17:23:29 EST (Sat, 05 Mar 2011)
@@ -194,6 +194,9 @@
 #ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE
 std::cout << "traverse" << std::endl;
 #endif
+        // Traverse through intersection/turn points and create rings of them.
+        // Note that these rings are always in clockwise order, even in CCW polygons,
+        // and are marked as "to be reversed" below
         ring_container_type rings;
         geometry::traverse<Reverse1, Reverse2>(geometry1, geometry2,
                 Direction == overlay_union
@@ -201,19 +204,6 @@
                     : boost::geometry::detail::overlay::operation_intersection,
                 turn_points, rings);
 
-        // TEMP condition, reversal should be done in traverse by calling "push_front"
-        if (ReverseOut) 
-        {
-            for (typename boost::range_iterator<ring_container_type>::type
-                    it = boost::begin(rings);
-                    it != boost::end(rings);
-                    ++it)
-            {
-                geometry::reverse(*it);
-            }
-        }
-
-
         std::map<ring_identifier, int> map;
         map_turns(map, turn_points);
 
@@ -222,7 +212,7 @@
         std::map<ring_identifier, properties> selected;
         select_rings<Direction>(geometry1, geometry2, map, selected);
 
-        // Add rings from intersection container
+        // Add rings created during traversal
         {
             ring_identifier id(2, 0, -1);
             for (typename boost::range_iterator<ring_container_type>::type
@@ -231,6 +221,7 @@
                     ++it)
             {
                 selected[id] = properties(*it);
+                selected[id].reversed = ReverseOut;
                 id.multi_index++;
             }
         }
Modified: trunk/boost/geometry/algorithms/intersection.hpp
==============================================================================
--- trunk/boost/geometry/algorithms/intersection.hpp	(original)
+++ trunk/boost/geometry/algorithms/intersection.hpp	2011-03-05 17:23:29 EST (Sat, 05 Mar 2011)
@@ -111,7 +111,7 @@
             Geometry1, Geometry2,
             detail::overlay::do_reverse<geometry::point_order<Geometry1>::value, false>::value,
             detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, false>::value,
-            false,
+            detail::overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value,
             output_iterator, OneOut,
             overlay_intersection,
             Strategy
Modified: trunk/boost/geometry/geometries/adapted/boost_polygon/ring.hpp
==============================================================================
--- trunk/boost/geometry/geometries/adapted/boost_polygon/ring.hpp	(original)
+++ trunk/boost/geometry/geometries/adapted/boost_polygon/ring.hpp	2011-03-05 17:23:29 EST (Sat, 05 Mar 2011)
@@ -18,6 +18,7 @@
 #include <boost/geometry/core/cs.hpp>
 #include <boost/geometry/core/coordinate_dimension.hpp>
 #include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/core/mutable_range.hpp>
 #include <boost/geometry/core/tags.hpp>