$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r70494 - trunk/boost/polygon
From: lucanus.j.simonson_at_[hidden]
Date: 2011-03-24 02:49:25
Author: ljsimons
Date: 2011-03-24 02:49:19 EDT (Thu, 24 Mar 2011)
New Revision: 70494
URL: http://svn.boost.org/trac/boost/changeset/70494
Log:
fixed snap to 45 and general contains bugs
Text files modified: 
   trunk/boost/polygon/polygon_traits.hpp |    21 ++++++++++++++++-----                   
   1 files changed, 16 insertions(+), 5 deletions(-)
Modified: trunk/boost/polygon/polygon_traits.hpp
==============================================================================
--- trunk/boost/polygon/polygon_traits.hpp	(original)
+++ trunk/boost/polygon/polygon_traits.hpp	2011-03-24 02:49:19 EDT (Thu, 24 Mar 2011)
@@ -758,7 +758,10 @@
     if(pts.size() < 3) { pts.clear(); return; }
     Point firstPt = pts.front();
     Point prevPt = firstPt;
-    std::unique(pts.begin(), pts.end());
+    typename std::vector<point_data<Unit> >::iterator endLocation = std::unique(pts.begin(), pts.end());
+    if(endLocation != pts.end()){
+      pts.resize(endLocation - pts.begin());
+    }
     if(pts.back() == pts[0]) pts.pop_back();
     //iterate over point triplets
     int numPts = pts.size();
@@ -1348,10 +1351,18 @@
           if(oabedge == 0) return consider_touch;
           if(oabedge == 1) ++above;
         } else if(x(point) == xmax) {
-          Point tmppt;
-          assign(tmppt, point);
-          if( edge_utils<Unit>::on_above_or_below(tmppt, he) == 0 ) {
-            return consider_touch;
+          if(x(point) == xmin) {
+            Unit ymin = (std::min)(y(he.first), y(he.second));
+            Unit ymax = (std::max)(y(he.first), y(he.second));
+            Unit ypt = y(point);
+            if(ypt <= ymax && ypt >= ymin)
+              return consider_touch;
+          } else {
+            Point tmppt;
+            assign(tmppt, point);
+            if( edge_utils<Unit>::on_above_or_below(tmppt, he) == 0 ) {
+              return consider_touch;
+            }
           }
         }
       }