Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r83918 - in branches/release: boost/polygon boost/polygon/detail libs/polygon/doc libs/polygon/doc/images libs/polygon/example/input_data/primary libs/polygon/example/output_data/primary libs/polygon/test
From: sydorchuk.andriy_at_[hidden]
Date: 2013-04-15 18:27:51


Author: asydorchuk
Date: 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
New Revision: 83918
URL: http://svn.boost.org/trac/boost/changeset/83918

Log:
[Polygon] Merging from trunk for the upcoming release: 1) Updated Voronoi documentation. 2) Fixed #8026, #8197, #8257.
Added:
   branches/release/libs/polygon/doc/images/voronoi1.png (contents, props changed)
   branches/release/libs/polygon/example/input_data/primary/primary_072.txt (contents, props changed)
   branches/release/libs/polygon/example/output_data/primary/primary_072.png (contents, props changed)
Removed:
   branches/release/libs/polygon/doc/voronoi_predicates.htm
   branches/release/libs/polygon/doc/voronoi_robust_fpt.htm
Text files modified:
   branches/release/boost/polygon/detail/boolean_op_45.hpp | 6
   branches/release/boost/polygon/detail/polygon_45_set_view.hpp | 9
   branches/release/boost/polygon/detail/polygon_set_view.hpp | 5
   branches/release/boost/polygon/detail/scan_arbitrary.hpp | 11
   branches/release/boost/polygon/detail/voronoi_predicates.hpp | 11
   branches/release/boost/polygon/gtl.hpp | 12
   branches/release/boost/polygon/polygon_45_set_data.hpp | 6
   branches/release/boost/polygon/polygon_traits.hpp | 3
   branches/release/boost/polygon/voronoi.hpp | 36
   branches/release/boost/polygon/voronoi_diagram.hpp | 2
   branches/release/libs/polygon/doc/analysis.htm | 296 +++---
   branches/release/libs/polygon/doc/gtl_connectivity_extraction.htm | 308 +++---
   branches/release/libs/polygon/doc/gtl_connectivity_extraction_45.htm | 308 +++---
   branches/release/libs/polygon/doc/gtl_connectivity_extraction_90.htm | 308 +++---
   branches/release/libs/polygon/doc/gtl_coordinate_concept.htm | 301 +++---
   branches/release/libs/polygon/doc/gtl_custom_point.htm | 26
   branches/release/libs/polygon/doc/gtl_design_overview.htm | 398 ++++----
   branches/release/libs/polygon/doc/gtl_interval_concept.htm | 1073 ++++++++++++-----------
   branches/release/libs/polygon/doc/gtl_isotropy.htm | 1061 ++++++++++++-----------
   branches/release/libs/polygon/doc/gtl_point_concept.htm | 886 +++++++++++--------
   branches/release/libs/polygon/doc/gtl_polygon_45_concept.htm | 738 ++++++++-------
   branches/release/libs/polygon/doc/gtl_polygon_45_set_concept.htm | 1522 +++++++++++++++++----------------
   branches/release/libs/polygon/doc/gtl_polygon_45_with_holes_concept.htm | 820 +++++++++--------
   branches/release/libs/polygon/doc/gtl_polygon_90_concept.htm | 824 +++++++++--------
   branches/release/libs/polygon/doc/gtl_polygon_90_set_concept.htm | 1795 +++++++++++++++++++++------------------
   branches/release/libs/polygon/doc/gtl_polygon_90_with_holes_concept.htm | 924 ++++++++++---------
   branches/release/libs/polygon/doc/gtl_polygon_concept.htm | 741 ++++++++-------
   branches/release/libs/polygon/doc/gtl_polygon_set_concept.htm | 1324 +++++++++++++++--------------
   branches/release/libs/polygon/doc/gtl_polygon_with_holes_concept.htm | 817 +++++++++--------
   branches/release/libs/polygon/doc/gtl_property_merge.htm | 315 +++---
   branches/release/libs/polygon/doc/gtl_property_merge_45.htm | 314 +++---
   branches/release/libs/polygon/doc/gtl_property_merge_90.htm | 314 +++---
   branches/release/libs/polygon/doc/gtl_rectangle_concept.htm | 1548 ++++++++++++++++++----------------
   branches/release/libs/polygon/doc/gtl_segment_concept.htm | 737 ++++++++++-----
   branches/release/libs/polygon/doc/index.htm | 534 +++++-----
   branches/release/libs/polygon/doc/voronoi_benchmark.htm | 296 +++--
   branches/release/libs/polygon/doc/voronoi_builder.htm | 388 ++++----
   branches/release/libs/polygon/doc/voronoi_diagram.htm | 1101 ++++++++++++------------
   branches/release/libs/polygon/doc/voronoi_main.htm | 584 +++++++-----
   branches/release/libs/polygon/test/gtl_boost_unit_test.cpp | 4
   40 files changed, 11071 insertions(+), 9635 deletions(-)

Modified: branches/release/boost/polygon/detail/boolean_op_45.hpp
==============================================================================
--- branches/release/boost/polygon/detail/boolean_op_45.hpp (original)
+++ branches/release/boost/polygon/detail/boolean_op_45.hpp 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -370,6 +370,7 @@
     template <int op>
     static bool applyLogic(Count2 count) {
 #ifdef BOOST_POLYGON_MSVC
+#pragma warning (push)
 #pragma warning (disable: 4127)
 #endif
       if(op == 0) { //apply or
@@ -383,7 +384,7 @@
       } else
         return false;
 #ifdef BOOST_POLYGON_MSVC
-#pragma warning (default: 4127)
+#pragma warning (pop)
 #endif
     }
 
@@ -405,6 +406,7 @@
     template <int op>
     static bool applyLogic(Count1 count) {
 #ifdef BOOST_POLYGON_MSVC
+#pragma warning (push)
 #pragma warning (disable: 4127)
 #endif
       if(op == 0) { //apply or
@@ -416,7 +418,7 @@
       } else
         return false;
 #ifdef BOOST_POLYGON_MSVC
-#pragma warning (default: 4127)
+#pragma warning (pop)
 #endif
     }
 

Modified: branches/release/boost/polygon/detail/polygon_45_set_view.hpp
==============================================================================
--- branches/release/boost/polygon/detail/polygon_45_set_view.hpp (original)
+++ branches/release/boost/polygon/detail/polygon_45_set_view.hpp 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -39,6 +39,7 @@
       rinput_.set(polygon_45_set_traits<rtype>::begin(rvalue_),
                   polygon_45_set_traits<rtype>::end(rvalue_));
 #ifdef BOOST_POLYGON_MSVC
+#pragma warning (push)
 #pragma warning (disable: 4127)
 #endif
       if(op_type == 0)
@@ -50,7 +51,7 @@
       else
         output_ -= rinput_;
 #ifdef BOOST_POLYGON_MSVC
-#pragma warning (default: 4127)
+#pragma warning (pop)
 #endif
     }
   };
@@ -62,6 +63,7 @@
       output_.set(polygon_45_set_traits<ltype>::begin(lvalue_),
                   polygon_45_set_traits<ltype>::end(lvalue_));
 #ifdef BOOST_POLYGON_MSVC
+#pragma warning (push)
 #pragma warning (disable: 4127)
 #endif
       if(op_type == 0)
@@ -73,7 +75,7 @@
       else
         output_ -= rvalue_;
 #ifdef BOOST_POLYGON_MSVC
-#pragma warning (default: 4127)
+#pragma warning (pop)
 #endif
     }
   };
@@ -153,6 +155,7 @@
     rinput_.set(polygon_45_set_traits<rtype>::begin(rvalue_),
                 polygon_45_set_traits<rtype>::end(rvalue_));
 #ifdef BOOST_POLYGON_MSVC
+#pragma warning (push)
 #pragma warning (disable: 4127)
 #endif
     if(op_type == 0)
@@ -164,7 +167,7 @@
     else
       output_ -= rinput_;
 #ifdef BOOST_POLYGON_MSVC
-#pragma warning (default: 4127)
+#pragma warning (pop)
 #endif
     polygon_45_set_mutable_traits<geometry_type_1>::set(lvalue_, output_.begin(), output_.end());
     return lvalue_;

Modified: branches/release/boost/polygon/detail/polygon_set_view.hpp
==============================================================================
--- branches/release/boost/polygon/detail/polygon_set_view.hpp (original)
+++ branches/release/boost/polygon/detail/polygon_set_view.hpp 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -13,7 +13,7 @@
   template <typename coordinate_type>
   inline void polygon_set_data<coordinate_type>::clean() const {
     if(dirty_) {
- polygon_45_set_data<coordinate_type> tmp;
+ //polygon_45_set_data<coordinate_type> tmp;
       //very important:
       //the 45 degree algorithm does not satisfy
       //the precondition of arbitrary polygon formation
@@ -102,6 +102,7 @@
 // if(linput_.downcast(l45) && rinput_.downcast(r45)) {
 // //the op codes are screwed up between 45 and arbitrary
 //#ifdef BOOST_POLYGON_MSVC
+//#pragma warning (push)
 //#pragma warning (disable: 4127)
 //#endif
 // if(op_type < 2)
@@ -111,7 +112,7 @@
 // else
 // l45.template applyAdaptiveBoolean_<2>(o45, r45);
 //#ifdef BOOST_POLYGON_MSVC
-//#pragma warning (default: 4127)
+//#pragma warning (pop)
 //#endif
 // output_.insert(o45);
 // } else {

Modified: branches/release/boost/polygon/detail/scan_arbitrary.hpp
==============================================================================
--- branches/release/boost/polygon/detail/scan_arbitrary.hpp (original)
+++ branches/release/boost/polygon/detail/scan_arbitrary.hpp 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1038,7 +1038,8 @@
       bool first_iteration = true;
       //we want to return from inside the loop when we hit end or new x
 #ifdef BOOST_POLYGON_MSVC
-#pragma warning( disable: 4127 )
+#pragma warning (push)
+#pragma warning (disable: 4127)
 #endif
       while(true) {
         if(begin == end || (!first_iteration && ((*begin).first.first.get(VERTICAL) != y ||
@@ -1146,7 +1147,7 @@
         }
       }
 #ifdef BOOST_POLYGON_MSVC
-#pragma warning( default: 4127 )
+#pragma warning (pop)
 #endif
 
     }
@@ -2292,11 +2293,12 @@
             stdcout << polys[j] << "\n";
             stdcout << polys90[j] << "\n";
 #ifdef BOOST_POLYGON_ICC
+#pragma warning (push)
 #pragma warning (disable:1572)
 #endif
             if(area(polys[j]) != area(polys90[j])) {
 #ifdef BOOST_POLYGON_ICC
-#pragma warning (default:1572)
+#pragma warning (pop)
 #endif
               stdcout << "merge failed with area mismatch\n";
               failed = true;
@@ -2539,6 +2541,7 @@
         if(edge.second < edge.first) elem.second *= -1;
         if(scanline_base<Unit>::is_vertical(edge)) elem.second *= -1;
 #ifdef BOOST_POLYGON_MSVC
+#pragma warning (push)
 #pragma warning (disable: 4127)
 #endif
         if(op_type == 0) { //OR
@@ -2569,7 +2572,7 @@
             }
           }
 #ifdef BOOST_POLYGON_MSVC
-#pragma warning (default: 4127)
+#pragma warning (pop)
 #endif
           if(right.size() == 1) {
             if((*(right.begin())) == 0) {

Modified: branches/release/boost/polygon/detail/voronoi_predicates.hpp
==============================================================================
--- branches/release/boost/polygon/detail/voronoi_predicates.hpp (original)
+++ branches/release/boost/polygon/detail/voronoi_predicates.hpp 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -35,7 +35,8 @@
 
   enum {
     ULPS = 64,
- ULPSx2 = 128
+ ULPSx2 = 128,
+ ULPSx5 = 320
   };
 
   template <typename Point>
@@ -160,21 +161,21 @@
 
     bool operator()(const site_type& lhs, const circle_type& rhs) const {
       typename ulp_cmp_type::Result xCmp =
- ulp_cmp(to_fpt(lhs.x()), to_fpt(rhs.lower_x()), ULPS);
+ ulp_cmp(to_fpt(lhs.x()), to_fpt(rhs.lower_x()), ULPSx5);
       if (xCmp != ulp_cmp_type::EQUAL)
         return xCmp == ulp_cmp_type::LESS;
       typename ulp_cmp_type::Result yCmp =
- ulp_cmp(to_fpt(lhs.y()), to_fpt(rhs.lower_y()), ULPS);
+ ulp_cmp(to_fpt(lhs.y()), to_fpt(rhs.lower_y()), ULPSx5);
       return yCmp == ulp_cmp_type::LESS;
     }
 
     bool operator()(const circle_type& lhs, const site_type& rhs) const {
       typename ulp_cmp_type::Result xCmp =
- ulp_cmp(to_fpt(lhs.lower_x()), to_fpt(rhs.x()), ULPS);
+ ulp_cmp(to_fpt(lhs.lower_x()), to_fpt(rhs.x()), ULPSx5);
       if (xCmp != ulp_cmp_type::EQUAL)
         return xCmp == ulp_cmp_type::LESS;
       typename ulp_cmp_type::Result yCmp =
- ulp_cmp(to_fpt(lhs.lower_y()), to_fpt(rhs.y()), ULPS);
+ ulp_cmp(to_fpt(lhs.lower_y()), to_fpt(rhs.y()), ULPSx5);
       return yCmp == ulp_cmp_type::LESS;
     }
 

Modified: branches/release/boost/polygon/gtl.hpp
==============================================================================
--- branches/release/boost/polygon/gtl.hpp (original)
+++ branches/release/boost/polygon/gtl.hpp 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -9,10 +9,12 @@
 #define GTL_GTL_HPP
 
 #ifdef __ICC
+#pragma warning (push)
 #pragma warning (disable:1125)
 #endif
 
 #ifdef WIN32
+#pragma warning (push)
 #pragma warning( disable: 4996 )
 #pragma warning( disable: 4800 )
 #endif
@@ -21,7 +23,13 @@
 #include "polygon.hpp"
 namespace gtl = boost::polygon;
 using namespace boost::polygon::operators;
-#if __ICC
-#pragma warning (default:1125)
+
+#ifdef WIN32
+#pragma warning (pop)
+#endif
+
+#ifdef __ICC
+#pragma warning (pop)
 #endif
+
 #endif

Modified: branches/release/boost/polygon/polygon_45_set_data.hpp
==============================================================================
--- branches/release/boost/polygon/polygon_45_set_data.hpp (original)
+++ branches/release/boost/polygon/polygon_45_set_data.hpp 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1551,6 +1551,7 @@
       l90sd.sort();
       r90sd.sort();
 #ifdef BOOST_POLYGON_MSVC
+#pragma warning (push)
 #pragma warning (disable: 4127)
 #endif
       if(op == 0) {
@@ -1567,7 +1568,7 @@
                                     r90sd.begin(), r90sd.end(), boolean_op::BinaryCount<boolean_op::BinaryXor>());
       }
 #ifdef BOOST_POLYGON_MSVC
-#pragma warning (default: 4127)
+#pragma warning (pop)
 #endif
       result.data_.clear();
       result.insert(output);
@@ -1678,6 +1679,7 @@
       }
       l90sd.sort();
 #ifdef BOOST_POLYGON_MSVC
+#pragma warning (push)
 #pragma warning (disable: 4127)
 #endif
       if(op == 0) {
@@ -1688,7 +1690,7 @@
         l90sd.self_xor();
       }
 #ifdef BOOST_POLYGON_MSVC
-#pragma warning (default: 4127)
+#pragma warning (pop)
 #endif
       result.data_.clear();
       result.insert(l90sd);

Modified: branches/release/boost/polygon/polygon_traits.hpp
==============================================================================
--- branches/release/boost/polygon/polygon_traits.hpp (original)
+++ branches/release/boost/polygon/polygon_traits.hpp 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -985,11 +985,12 @@
       area_type x1 = (area_type)x(previous);
       area_type x2 = (area_type)x(*begin_range);
 #ifdef BOOST_POLYGON_ICC
+#pragma warning (push)
 #pragma warning (disable:1572)
 #endif
       if(x1 != x2) {
 #ifdef BOOST_POLYGON_ICC
-#pragma warning (default:1572)
+#pragma warning (pop)
 #endif
         // do trapezoid area accumulation
         area += (x2 - x1) * (((area_type)y(*begin_range) - y_base) +

Modified: branches/release/boost/polygon/voronoi.hpp
==============================================================================
--- branches/release/boost/polygon/voronoi.hpp (original)
+++ branches/release/boost/polygon/voronoi.hpp 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -17,10 +17,10 @@
 #include "voronoi_builder.hpp"
 #include "voronoi_diagram.hpp"
 
-// Public methods to compute Voronoi diagram.
+// Public methods to compute Voronoi diagram of a set of points and segments.
 // Coordinates of the points and of the endpoints of the segments should belong
 // to the 32-bit signed integer range [-2^31, 2^31-1]. To use wider input
-// coordinate range voronoi_builder configuration via coordinate type traits is
+// coordinate range voronoi_builder configuration via coordinate type traits
 // is required.
 // Complexity - O(N*logN), memory usage - O(N), N - number of input objects.
 namespace boost {
@@ -34,8 +34,7 @@
>::type
>::type,
   std::size_t
->::type
-insert(const Point& point, VB* vb) {
+>::type insert(const Point& point, VB* vb) {
   return vb->insert_point(x(point), y(point));
 }
 
@@ -49,8 +48,7 @@
>::type
>::type,
   void
->::type
-insert(PointIterator first, const PointIterator last, VB* vb) {
+>::type insert(const PointIterator first, const PointIterator last, VB* vb) {
   for (PointIterator it = first; it != last; ++it) {
     insert(*it, vb);
   }
@@ -64,8 +62,7 @@
>::type
>::type,
   std::size_t
->::type
-insert(const Segment& segment, VB* vb) {
+>::type insert(const Segment& segment, VB* vb) {
   return vb->insert_segment(
       x(low(segment)), y(low(segment)),
       x(high(segment)), y(high(segment)));
@@ -81,8 +78,9 @@
>::type
>::type,
   void
->::type
-insert(SegmentIterator first, SegmentIterator last, VB* vb) {
+>::type insert(const SegmentIterator first,
+ const SegmentIterator last,
+ VB* vb) {
   for (SegmentIterator it = first; it != last; ++it) {
     insert(*it, vb);
   }
@@ -98,8 +96,9 @@
>::type
>::type,
   void
->::type
-construct_voronoi(PointIterator first, PointIterator last, VD* vd) {
+>::type construct_voronoi(const PointIterator first,
+ const PointIterator last,
+ VD* vd) {
   default_voronoi_builder builder;
   insert(first, last, &builder);
   builder.construct(vd);
@@ -115,8 +114,9 @@
>::type
>::type,
   void
->::type
-construct_voronoi(SegmentIterator first, SegmentIterator last, VD* vd) {
+>::type construct_voronoi(const SegmentIterator first,
+ const SegmentIterator last,
+ VD* vd) {
   default_voronoi_builder builder;
   insert(first, last, &builder);
   builder.construct(vd);
@@ -141,9 +141,11 @@
>::type
>::type,
   void
->::type
-construct_voronoi(PointIterator p_first, PointIterator p_last,
- SegmentIterator s_first, SegmentIterator s_last, VD* vd) {
+>::type construct_voronoi(const PointIterator p_first,
+ const PointIterator p_last,
+ const SegmentIterator s_first,
+ const SegmentIterator s_last,
+ VD* vd) {
   default_voronoi_builder builder;
   insert(p_first, p_last, &builder);
   insert(s_first, s_last, &builder);

Modified: branches/release/boost/polygon/voronoi_diagram.hpp
==============================================================================
--- branches/release/boost/polygon/voronoi_diagram.hpp (original)
+++ branches/release/boost/polygon/voronoi_diagram.hpp 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -328,7 +328,7 @@
     return vertices_.size();
   }
 
- void _reserve(int num_sites) {
+ void _reserve(std::size_t num_sites) {
     cells_.reserve(num_sites);
     vertices_.reserve(num_sites << 1);
     edges_.reserve((num_sites << 2) + (num_sites << 1));

Modified: branches/release/libs/polygon/doc/analysis.htm
==============================================================================
--- branches/release/libs/polygon/doc/analysis.htm (original)
+++ branches/release/libs/polygon/doc/analysis.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,20 +1,28 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Performance Analysis</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
+-->
+ <title>Boost Polygon Library: Performance Analysis</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
         <li>Boost.Polygon Main Page</li>
         <li>Design Overview</li>
         <li>Isotropy</li>
@@ -46,19 +54,14 @@
         <li>Property Merge 90</li>
         <li>Property Merge 45</li>
         <li>Property Merge</li>
- <li>Voronoi Main Page
- </li>
+ <li>Voronoi Main Page </li>
         <li>Voronoi Benchmark</li>
         <li>Voronoi Builder<br />
         </li>
         <li>Voronoi Diagram</li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-</ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
         <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
 Presentation</a></li>
@@ -68,120 +71,133 @@
         <li>Voronoi Basic Tutorial</li>
         <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
 Tutorial</a></li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Polygon Set Algorithms Analysis</h1>
-<p>Most non-trivial algorithms in the Boost.Polygon library are
-instantiations of generic sweep-line algorithms that provide the capability to
-perform Manhattan and 45-degree line segment intersection, n-layer map overlay,
-connectivity graph extraction and clipping/Booleans.&nbsp; These algorithms have O(n log n)
-runtime complexity for n equal to input vertices plus intersection vertices.&nbsp; The
-arbitrary angle line segment intersection algorithm is not implemented as a
-sweep-line due to complications related to achieving numerical robustness.&nbsp;
-The general line segment intersection algorithm is implemented as an recursive
-adaptive heuristic divide and conquer in the y dimension followed by sorting
-line segments in each subdivision by x coordinates and scanning left to right.&nbsp;
-By one-dimensional decomposition of the problem space in both x and y the
-algorithm approximates the optimal O(n log n) Bentley-Ottmann line segment intersection
-runtime complexity in the common case.&nbsp; Specific examples of inputs that
-defeat one dimensional decomposition of the problem space can result in
-pathological quadratic runtime complexity to which the Bentley-Ottmann algorithm
-is immune.</p>
-<p>Below is shown a log-log plot of runtime versus input size for inputs that
-increase quadratically in size.&nbsp; The inputs were generated by
-pseudo-randomly distributing small axis-parallel rectangles within a square area
-proportional the the number of rectangles specified for each trial.&nbsp; In
-this way the probability of intersections being produced remains constant as the
-input size grows.&nbsp; Because intersection vertices are expected to be a
-constant factor of input vertices we can examine runtime complexity in terms of
-input vertices.&nbsp; The operation performed was a union (Boolean OR) of the
-input rectangles by each of the Manhattan, 45-degree and arbitrary angle
-Booleans algorithms, which are labeled "boolean 90", "boolean 45" and "boolean".&nbsp;
-Also shown in the plot is the performance of the arbitrary angle Booleans
-algorithm as prior to the addition of divide and conquer recursive subdivision,
-which was described in the paper
-presented at
-boostcon 2009.&nbsp; Finally, the
-time required to sort the input points is shown as a common reference for O(n log n)
-runtime to put the data into context.</p><img src="images/perf_graph.PNG" border="0" height="414" width="391" /><p>
-We can see in the log-log plot that sorting and the three Booleans algorithms
-provided by the Boost.Polygon library have nearly 45 degree "linear"
-scaling with empirical exponents just slightly larger than 1.0 and can be
-observed to scale proportional to O(n log n) for
-these inputs.&nbsp; The "old boolean" algorithm presented at boostcon 2009
-exhibits scaling close to the expected O(n<sup><font size="2">1.5</font></sup>)
-scaling.&nbsp; Because the speedup provided by the divide and conquer approach
-is algorithmic, the 10X potential performance improvement alluded to in the paper is
-realized at inputs of 200,000 rectangles and larger.&nbsp; Even for small inputs
-of 2K rectangles the algorithm is 2X faster and now can be expected to be
-roughly as fast as GPC at small scales,
-while algorithmically faster at large scales.</p>
-<p>
-
-
-From the plot we can compare the constant factor performance of the various
-Booleans algorithms with the runtime of std::sort as a baseline for O(n log n)
-algorithms.&nbsp; If you consider sort to be one unit of O(n log n) algorithmic
-work we can see that Manhattan Booleans cost roughly five units of O(n log n)
-work, 45-degree&nbsp; Booleans cost roughly
-
-
-ten units of O(n log n) work and arbitrary angle Booleans cost roughly
-seventy units of O(n log n) work.&nbsp; Sorting the input vertices is the first
-step in a Booleans algorithm and therefore provides a hard lower bound for the
-runtime of an optimal Booleans algorithm.</p><p>
-
-
-One final thing to note about performance of the arbitrary angle Booleans
-algorithm is that the use of GMP
- infinite precision rational data type for numerically robust
-computations can be employed by including boost/polygon/gmp_override.hpp and linking
-to lgmpxx and lgmp.&nbsp; This provides
-100% assurance that the algorithm will succeed and produce an output snapped to
-the integer grid with a minimum of one integer grid of error on polygon
-boundaries upon which intersection points are introduced.&nbsp; However, the
-infinite precision data type is never used for predicates (see the boostcon
-presentation or paper for description of robust predicates) and is only used for
-constructions of intersection coordinate values in the very rare case that long
-double computation of the intersection of two line segments fails to produce an
-intersection point within one integer unit of both line segments.&nbsp; This
-means that there is effectively no runtime penalty for the use of infinite
-precision to ensure 100% robustness.&nbsp; Most inputs will process through the
-algorithm without ever resorting to GMP.</p></td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table1" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="
http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Polygon Set Algorithms Analysis</h1>
+ <p>Most non-trivial algorithms in the Boost.Polygon library are
+instantiations of generic sweep-line algorithms that provide the
+capability to perform Manhattan and 45-degree line segment
+intersection, n-layer map overlay, connectivity graph extraction and
+clipping/Booleans.&nbsp; These algorithms have O(n log n) runtime
+complexity for n equal to input vertices plus intersection
+vertices.&nbsp; The arbitrary angle line segment intersection algorithm
+is not implemented as a sweep-line due to complications related to
+achieving numerical robustness.&nbsp; The general line segment
+intersection algorithm is implemented as an recursive adaptive
+heuristic divide and conquer in the y dimension followed by sorting
+line segments in each subdivision by x coordinates and scanning left to
+right.&nbsp; By one-dimensional decomposition of the problem space in
+both x and y the algorithm approximates the optimal O(n log n)
+Bentley-Ottmann line segment intersection runtime complexity in the
+common case.&nbsp; Specific examples of inputs that defeat one
+dimensional decomposition of the problem space can result in
+pathological quadratic runtime complexity to which the Bentley-Ottmann
+algorithm is immune.</p>
+ <p>Below is shown a log-log plot of runtime versus input size for
+inputs that increase quadratically in size.&nbsp; The inputs were
+generated by pseudo-randomly distributing small axis-parallel
+rectangles within a square area proportional the the number of
+rectangles specified for each trial.&nbsp; In this way the probability
+of intersections being produced remains constant as the input size
+grows.&nbsp; Because intersection vertices are expected to be a
+constant factor of input vertices we can examine runtime complexity in
+terms of input vertices.&nbsp; The operation performed was a union
+(Boolean OR) of the input rectangles by each of the Manhattan,
+45-degree and arbitrary angle Booleans algorithms, which are labeled
+"boolean 90", "boolean 45" and "boolean".&nbsp; Also shown in the plot
+is the performance of the arbitrary angle Booleans algorithm as prior
+to the addition of divide and conquer recursive subdivision, which was
+described in the paper <a
+ href="GTL_boostcon_draft03.pdf">presented</a> at
+ boostcon 2009.&nbsp;
+Finally, the time required to sort the input points is shown as a
+common reference for O(n log n) runtime to put the data into context.</p>
+ <img src="images/perf_graph.PNG" border="0" height="414"
+ width="391" />
+ <p>We can see in the log-log plot that sorting and the three
+Booleans algorithms provided by the Boost.Polygon library have nearly
+45 degree "linear" scaling with empirical exponents just slightly
+larger than 1.0 and can be observed to scale proportional to O(n log n)
+for these inputs.&nbsp; The "old boolean" algorithm presented at
+boostcon 2009 exhibits scaling close to the expected O(n<sup><font
+ size="2">1.5</font></sup>) scaling.&nbsp; Because the speedup provided
+by the divide and conquer approach is algorithmic, the 10X potential
+performance improvement alluded to in the paper is realized at inputs
+of 200,000 rectangles and larger.&nbsp; Even for small inputs of 2K
+rectangles the algorithm is 2X faster and now can be expected to be
+roughly as fast as <a
+ href="http://www.cs.manchester.ac.uk/%7Etoby/alan/software/">GPC</a>
+at small scales, while algorithmically faster at large scales.</p>
+ <p>
+From the plot we can compare the constant factor performance of the
+various Booleans algorithms with the runtime of std::sort as a baseline
+for O(n log n) algorithms.&nbsp; If you consider sort to be one unit of
+O(n log n) algorithmic work we can see that Manhattan Booleans cost
+roughly five units of O(n log n) work, 45-degree&nbsp; Booleans cost
+roughly
+ten units of O(n log n) work and arbitrary angle Booleans cost roughly
+seventy units of O(n log n) work.&nbsp; Sorting the input vertices is
+the first step in a Booleans algorithm and therefore provides a hard
+lower bound for the runtime of an optimal Booleans algorithm.</p>
+ <p>One final thing to note about performance of the arbitrary
+angle Booleans algorithm is that the use of GMP
+infinite precision rational data type for numerically robust
+computations can be employed by including
+boost/polygon/gmp_override.hpp and linking to lgmpxx and lgmp.&nbsp;
+This provides 100% assurance that the algorithm will succeed and
+produce an output snapped to the integer grid with a minimum of one
+integer grid of error on polygon boundaries upon which intersection
+points are introduced.&nbsp; However, the infinite precision data type
+is never used for predicates (see the boostcon presentation or paper
+for description of robust predicates) and is only used for
+constructions of intersection coordinate values in the very rare case
+that long double computation of the intersection of two line segments
+fails to produce an intersection point within one integer unit of both
+line segments.&nbsp; This means that there is effectively no runtime
+penalty for the use of infinite precision to ensure 100%
+robustness.&nbsp; Most inputs will process through the algorithm
+without ever resorting to GMP.</p>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table1" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_connectivity_extraction.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_connectivity_extraction.htm (original)
+++ branches/release/libs/polygon/doc/gtl_connectivity_extraction.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,159 +1,185 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Connectivity Extraction 45</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Connectivity Extraction 45</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li>Connectivity Extraction</li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Connectivity Extraction</h1>
-
-<p>
-</p><p>The connectivity extraction algorithm constructs the connectivity graph where
-input polygon sets are modeled as graph nodes and assigned node ids and
-overlap/touching between input polygon sets is modeled as graph edges.&nbsp; One
-supported graph formats is std::vector&lt;std::set&lt;int&gt; &gt; where node ids index into
-the vector and the sets of integers at each index are the ids of nodes for which
-an edge exists in the graph.&nbsp; It is required that such vector pre-allocate
-sufficient elements to store the graph generated by the algorithm, because only
-the operator[] is used internally to access the graph&nbsp;&nbsp; The other
-supported graph format is std::map&lt;int, std::set&lt;int&gt; &gt; which is slightly easier to
-work with, but potentially more expensive.&nbsp; Improving the interface to
-support more generic graph concepts is deferred to future work.</p><p>The following
-is the declaration of the connectivity extraction algorithm.</p><p>
-<font face="Courier New">template &lt;typename coordinate_type&gt;<br />
-class connectivity_extraction;</font></p><p>
-Example code connectivity_extraction_usage.cpp
- demonstrates using the connectivity extraction algorithm to build a
-connectivity graph on geometry.</p><h2>Member Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">connectivity_extraction</font></b><font face="Courier New">()</font></td>
- <td>Default constructor. </td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">connectivity_extraction</font></b><font face="Courier New">(<br />&nbsp;&nbsp;&nbsp;&nbsp; const
- connectivity_extraction&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">unsigned int <br /><b>insert</b>(const polygon_set_data&lt;coordinate_type&gt;&amp; ps)</font></td>
- <td>I<font face="Times New Roman">nsert a polygon set graph node, the
- value returned is the id of the graph node.</font></td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Connectivity Extraction</h1>
+ <p> </p>
+ <p>The connectivity extraction algorithm constructs the
+connectivity graph where input polygon sets are modeled as graph nodes
+and assigned node ids and overlap/touching between input polygon sets
+is modeled as graph edges.&nbsp; One supported graph formats is
+std::vector&lt;std::set&lt;int&gt; &gt; where node ids index into the
+vector and the sets of integers at each index are the ids of nodes for
+which an edge exists in the graph.&nbsp; It is required that such
+vector pre-allocate sufficient elements to store the graph generated by
+the algorithm, because only the operator[] is used internally to access
+the graph&nbsp;&nbsp; The other supported graph format is
+std::map&lt;int, std::set&lt;int&gt; &gt; which is slightly easier to
+work with, but potentially more expensive.&nbsp; Improving the
+interface to support more generic graph concepts is deferred to future
+work.</p>
+ <p>The following is the declaration of the connectivity
+extraction algorithm.</p>
+ <p><font face="Courier New">template &lt;typename
+coordinate_type&gt;<br />
+class connectivity_extraction;</font></p>
+ <p>Example code connectivity_extraction_usage.cpp
+demonstrates using the connectivity extraction algorithm to build a
+connectivity graph on geometry.</p>
+ <h2>Member Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">connectivity_extraction</font></b><font
+ face="Courier New">()</font></td>
+ <td>Default constructor. </td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">connectivity_extraction</font></b><font
+ face="Courier New">(<br />
+&nbsp;&nbsp;&nbsp;&nbsp; const connectivity_extraction&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">unsigned int <br />
+ <b>insert</b>(const
+polygon_set_data&lt;coordinate_type&gt;&amp; ps)</font></td>
+ <td>I<font face="Times New Roman">nsert a polygon set graph
+node, the value returned is the id of the graph node.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;class GeoObjT&gt;<br />
 unsigned int <b>insert</b>(const GeoObjT&amp; geoObj)</font></td>
- <td>Insert a geometry object that is a refinement of polygon set as a
- graph node, the return value is the id of the graph node.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Insert a geometry object that is a refinement of
+polygon set as a graph node, the return value is the id of the graph
+node.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;class GraphT&gt;<br />
 void <b>extract</b>(GraphT&amp; graph)</font></td>
- <td>Accepts a graph object that conforms to the expectations defined
- above.&nbsp; Performs connectivity extraction and populates the graph
- object.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Accepts a graph object that conforms to the
+expectations defined above.&nbsp; Performs connectivity extraction and
+populates the graph object.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_connectivity_extraction_45.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_connectivity_extraction_45.htm (original)
+++ branches/release/libs/polygon/doc/gtl_connectivity_extraction_45.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,159 +1,185 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Connectivity Extraction 45</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Connectivity Extraction 45</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li>Connectivity Extraction 45</li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Connectivity Extraction 45</h1>
-
-<p>
-</p><p>The connectivity extraction algorithm constructs the connectivity graph where
-input polygon sets are modeled as graph nodes and assigned node ids and
-overlap/touching between input polygon sets is modeled as graph edges.&nbsp; One
-supported graph formats is std::vector&lt;std::set&lt;int&gt; &gt; where node ids index into
-the vector and the sets of integers at each index are the ids of nodes for which
-an edge exists in the graph.&nbsp; It is required that such vector pre-allocate
-sufficient elements to store the graph generated by the algorithm, because only
-the operator[] is used internally to access the graph&nbsp;&nbsp; The other
-supported graph format is std::map&lt;int, std::set&lt;int&gt; &gt; which is slightly easier to
-work with, but potentially more expensive.&nbsp; Improving the interface to
-support more generic graph concepts is deferred to future work.</p><p>The following
-is the declaration of the connectivity extraction algorithm.</p><p>
-<font face="Courier New">template &lt;typename coordinate_type&gt;<br />
-class connectivity_extraction_45;</font></p><p>
-Example code connectivity_extraction_usage.cpp
- demonstrates using the connectivity extraction algorithm to build a
-connectivity graph on geometry.</p><h2>Member Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">connectivity_extraction_45</font></b><font face="Courier New">()</font></td>
- <td>Default constructor. </td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">connectivity_extraction_45</font></b><font face="Courier New">(<br />&nbsp;&nbsp;&nbsp;&nbsp; const
- connectivity_extraction_45&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">unsigned int <br /><b>insert</b>(const polygon_45_set_data&lt;coordinate_type&gt;&amp; ps)</font></td>
- <td>I<font face="Times New Roman">nsert a polygon set graph node, the
- value returned is the id of the graph node.</font></td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Connectivity Extraction 45</h1>
+ <p> </p>
+ <p>The connectivity extraction algorithm constructs the
+connectivity graph where input polygon sets are modeled as graph nodes
+and assigned node ids and overlap/touching between input polygon sets
+is modeled as graph edges.&nbsp; One supported graph formats is
+std::vector&lt;std::set&lt;int&gt; &gt; where node ids index into the
+vector and the sets of integers at each index are the ids of nodes for
+which an edge exists in the graph.&nbsp; It is required that such
+vector pre-allocate sufficient elements to store the graph generated by
+the algorithm, because only the operator[] is used internally to access
+the graph&nbsp;&nbsp; The other supported graph format is
+std::map&lt;int, std::set&lt;int&gt; &gt; which is slightly easier to
+work with, but potentially more expensive.&nbsp; Improving the
+interface to support more generic graph concepts is deferred to future
+work.</p>
+ <p>The following is the declaration of the connectivity
+extraction algorithm.</p>
+ <p><font face="Courier New">template &lt;typename
+coordinate_type&gt;<br />
+class connectivity_extraction_45;</font></p>
+ <p>Example code connectivity_extraction_usage.cpp
+demonstrates using the connectivity extraction algorithm to build a
+connectivity graph on geometry.</p>
+ <h2>Member Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">connectivity_extraction_45</font></b><font
+ face="Courier New">()</font></td>
+ <td>Default constructor. </td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">connectivity_extraction_45</font></b><font
+ face="Courier New">(<br />
+&nbsp;&nbsp;&nbsp;&nbsp; const connectivity_extraction_45&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">unsigned int <br />
+ <b>insert</b>(const
+polygon_45_set_data&lt;coordinate_type&gt;&amp; ps)</font></td>
+ <td>I<font face="Times New Roman">nsert a polygon set graph
+node, the value returned is the id of the graph node.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;class GeoObjT&gt;<br />
 unsigned int <b>insert</b>(const GeoObjT&amp; geoObj)</font></td>
- <td>Insert a geometry object that is a refinement of polygon 45 set as a
- graph node, the return value is the id of the graph node.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Insert a geometry object that is a refinement of
+polygon 45 set as a graph node, the return value is the id of the graph
+node.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;class GraphT&gt;<br />
 void <b>extract</b>(GraphT&amp; graph)</font></td>
- <td>Accepts a graph object that conforms to the expectations defined
- above.&nbsp; Performs connectivity extraction and populates the graph
- object.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Accepts a graph object that conforms to the
+expectations defined above.&nbsp; Performs connectivity extraction and
+populates the graph object.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_connectivity_extraction_90.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_connectivity_extraction_90.htm (original)
+++ branches/release/libs/polygon/doc/gtl_connectivity_extraction_90.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,159 +1,185 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Connectivity Extraction 90</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Connectivity Extraction 90</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li>Connectivity Extraction 90</li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Connectivity Extraction 90</h1>
-
-<p>
-</p><p>The connectivity extraction algorithm constructs the connectivity graph where
-input polygon sets are modeled as graph nodes and assigned node ids and
-overlap/touching between input polygon sets is modeled as graph edges.&nbsp; One
-supported graph formats is std::vector&lt;std::set&lt;int&gt; &gt; where node ids index into
-the vector and the sets of integers at each index are the ids of nodes for which
-an edge exists in the graph.&nbsp; It is required that such vector pre-allocate
-sufficient elements to store the graph generated by the algorithm, because only
-the operator[] is used internally to access the graph&nbsp;&nbsp; The other
-supported graph format is std::map&lt;int, std::set&lt;int&gt; &gt; which is slightly easier to
-work with, but potentially more expensive.&nbsp; Improving the interface to
-support more generic graph concepts is deferred to future work.</p><p>The following
-is the declaration of the connectivity extraction algorithm.</p><p>
-<font face="Courier New">template &lt;typename coordinate_type&gt;<br />
-class connectivity_extraction_90;</font></p><p>
-Example code connectivity_extraction_usage.cpp
- demonstrates using the connectivity extraction algorithm to build a
-connectivity graph on geometry.</p><h2>Member Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">connectivity_extraction_90</font></b><font face="Courier New">()</font></td>
- <td>Default constructor. </td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">connectivity_extraction_90</font></b><font face="Courier New">(<br />&nbsp;&nbsp;&nbsp;&nbsp; const
- connectivity_extraction_90&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">unsigned int <br /><b>insert</b>(const polygon_90_set_data&lt;coordinate_type&gt;&amp; ps)</font></td>
- <td>I<font face="Times New Roman">nsert a polygon set graph node, the
- value returned is the id of the graph node.</font></td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Connectivity Extraction 90</h1>
+ <p> </p>
+ <p>The connectivity extraction algorithm constructs the
+connectivity graph where input polygon sets are modeled as graph nodes
+and assigned node ids and overlap/touching between input polygon sets
+is modeled as graph edges.&nbsp; One supported graph formats is
+std::vector&lt;std::set&lt;int&gt; &gt; where node ids index into the
+vector and the sets of integers at each index are the ids of nodes for
+which an edge exists in the graph.&nbsp; It is required that such
+vector pre-allocate sufficient elements to store the graph generated by
+the algorithm, because only the operator[] is used internally to access
+the graph&nbsp;&nbsp; The other supported graph format is
+std::map&lt;int, std::set&lt;int&gt; &gt; which is slightly easier to
+work with, but potentially more expensive.&nbsp; Improving the
+interface to support more generic graph concepts is deferred to future
+work.</p>
+ <p>The following is the declaration of the connectivity
+extraction algorithm.</p>
+ <p><font face="Courier New">template &lt;typename
+coordinate_type&gt;<br />
+class connectivity_extraction_90;</font></p>
+ <p>Example code connectivity_extraction_usage.cpp
+demonstrates using the connectivity extraction algorithm to build a
+connectivity graph on geometry.</p>
+ <h2>Member Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">connectivity_extraction_90</font></b><font
+ face="Courier New">()</font></td>
+ <td>Default constructor. </td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">connectivity_extraction_90</font></b><font
+ face="Courier New">(<br />
+&nbsp;&nbsp;&nbsp;&nbsp; const connectivity_extraction_90&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">unsigned int <br />
+ <b>insert</b>(const
+polygon_90_set_data&lt;coordinate_type&gt;&amp; ps)</font></td>
+ <td>I<font face="Times New Roman">nsert a polygon set graph
+node, the value returned is the id of the graph node.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;class GeoObjT&gt;<br />
 unsigned int <b>insert</b>(const GeoObjT&amp; geoObj)</font></td>
- <td>Insert a geometry object that is a refinement of polygon 90 set as a
- graph node, the return value is the id of the graph node.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Insert a geometry object that is a refinement of
+polygon 90 set as a graph node, the return value is the id of the graph
+node.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;class GraphT&gt;<br />
 void <b>extract</b>(GraphT&amp; graph)</font></td>
- <td>Accepts a graph object that conforms to the expectations defined
- above.&nbsp; Performs connectivity extraction and populates the graph
- object.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Accepts a graph object that conforms to the
+expectations defined above.&nbsp; Performs connectivity extraction and
+populates the graph object.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_coordinate_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_coordinate_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_coordinate_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,102 +1,114 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
+<!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Coordinate Concept</title>
-
-
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Coordinate Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Coordinate Concept</h1>
-
-<p>
-The coordinate concept tag is <font face="Courier New">
-coordinate_concept</font></p><p>
-To register a user defined type as a model of coordinate concept, specialize the
-geometry concept meta-function for that type.&nbsp; In the example below
-CCoordinate is registered as a model of coordinate concept.</p><p>
-<font face="Courier New">template &lt;&gt;<br />
-struct geometry_concept&lt;CCoordinate&gt; { typedef coordinate_concept type; };</font></p><p>
-The coordinate type is expected to be integral and built-in numerical data types
-such as float and int already have concept type traits specializations in the
-library.&nbsp; In the coordinate traits are type definitions for related types
-are provided to allow the library to choose the best type to cast to under
-various circumstances.&nbsp; The definition of coordinate_traits and its
-specialization for int are shown below.</p><p>
-<font face="Courier New">template &lt;typename T&gt;<br />
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Coordinate Concept</h1>
+ <p> The coordinate concept tag is <font face="Courier New">
+coordinate_concept</font></p>
+ <p> To register a user defined type as a model of coordinate
+concept, specialize the geometry concept meta-function for that
+type.&nbsp; In the example below CCoordinate is registered as a model
+of coordinate concept.</p>
+ <p> <font face="Courier New">template &lt;&gt;<br />
+struct geometry_concept&lt;CCoordinate&gt; { typedef coordinate_concept
+type; };</font></p>
+ <p> The coordinate type is expected to be integral and built-in
+numerical data types such as float and int already have concept type
+traits specializations in the library.&nbsp; In the coordinate traits
+are type definitions for related types are provided to allow the
+library to choose the best type to cast to under various
+circumstances.&nbsp; The definition of coordinate_traits and its
+specialization for int are shown below.</p>
+ <p> <font face="Courier New">template &lt;typename T&gt;<br />
 struct coordinate_traits {};<br />
-<br />
+ <br />
 template &lt;&gt;<br />
 struct coordinate_traits&lt;int&gt; {<br />
 &nbsp;&nbsp;&nbsp;&nbsp; typedef int coordinate_type;<br />
@@ -105,58 +117,71 @@
 &nbsp;&nbsp;&nbsp;&nbsp; typedef unsigned long long unsigned_area_type;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; typedef long long coordinate_difference;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; typedef long double coordinate_distance;<br />
-};</font></p><p>
-By making use of the coordinate traits of int the library is able to avoid
-overflow and handle the normal issues encountered when programming integer
-geometry.&nbsp; For the out of the ordinary issues there is a special
-meta-function that provides the library with a numerical type suitable for exact
-numerical calculations.&nbsp; It defaults to the highest precision data type
-available in most compilers, long double, but can be overridden by specializing
-for a particular coordinate type.&nbsp; Use of gmp multi-precision rational or
-similar data type is recommended for numerically robust calculations in the
-general polygon algorithms.</p><p>
-<font face="Courier New">template &lt;typename T&gt;<br />
+};</font></p>
+ <p> By making use of the coordinate traits of int the library is
+able to avoid overflow and handle the normal issues encountered when
+programming integer geometry.&nbsp; For the out of the ordinary issues
+there is a special meta-function that provides the library with a
+numerical type suitable for exact numerical calculations.&nbsp; It
+defaults to the highest precision data type available in most
+compilers, long double, but can be overridden by specializing for a
+particular coordinate type.&nbsp; Use of gmp multi-precision rational
+or similar data type is recommended for numerically robust calculations
+in the general polygon algorithms.</p>
+ <p> <font face="Courier New">template &lt;typename T&gt;<br />
 struct high_precision_type {<br />
 &nbsp;&nbsp;&nbsp;&nbsp; typedef long double type;<br />
-};</font></p><p>
-There is only one generic function on coordinate concepts, Euclidean distance.</p><p>
-<font face="Courier New">template &lt;typename coordinate_type_1, typename
-coordinate_type_2&gt;<br />
-coordinate_difference euclidean_distance(coordinate_type_1, coordinate_type_2)</font></p><p>
-This function returns the absolution value of the difference between the two
-coordinates.</p><p>
-Note: older versions of the stl define a fully generic distance(T, T) function
-for computing the difference between two iterators.&nbsp; We were forced to name
-our distance function euclidean_distance to avoid name collision.</p><p>
-The
-<a href="http://www.mentor.com/products/esl/high_level_synthesis/ac_datatypes">
-Algorithmic C</a> ac_int&lt;128&gt; is an example of a user defined coordinate data
-type that satisfies the coordinate concept.&nbsp; In general a data type should
-define std::numeric_limits and be integer-like.&nbsp; Floating point coordinate
-types are not supported by all the algorithms and generally not suitable for use
-with the library at present.</p></td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table1" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+};</font></p>
+ <p> There is only one generic function on coordinate concepts,
+Euclidean distance.</p>
+ <p> <font face="Courier New">template &lt;typename
+coordinate_type_1, typename coordinate_type_2&gt;<br />
+coordinate_difference euclidean_distance(coordinate_type_1,
+coordinate_type_2)</font></p>
+ <p> This function returns the absolution value of the difference
+between the two coordinates.</p>
+ <p> Note: older versions of the stl define a fully generic
+distance(T, T) function for computing the difference between two
+iterators.&nbsp; We were forced to name our distance function
+euclidean_distance to avoid name collision.</p>
+ <p> The
+ <a
+ href="
http://www.mentor.com/products/esl/high_level_synthesis/ac_datatypes">
+Algorithmic C</a> ac_int&lt;128&gt; is an example of a user defined
+coordinate data type that satisfies the coordinate concept.&nbsp; In
+general a data type should define std::numeric_limits and be
+integer-like.&nbsp; Floating point coordinate types are not supported
+by all the algorithms and generally not suitable for use with the
+library at present.</p>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table1" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_custom_point.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_custom_point.htm (original)
+++ branches/release/libs/polygon/doc/gtl_custom_point.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,11 +1,8 @@
-<html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head>
 
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Custom Point</title>
-</head>
 
-<body>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Custom Point</title></head><body>
 
 <p><font face="Courier New">/*<br>
 Copyright 2008 Intel Corporation<br>
@@ -95,7 +92,11 @@
 };<br>&nbsp; &nbsp;
 <br>&nbsp; &nbsp;
 template &lt;&gt;<br>&nbsp; &nbsp;
-struct point_mutable_traits&lt;CPoint&gt; {<br>&nbsp; &nbsp;
+struct point_mutable_traits&lt;CPoint&gt; {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef int coordinate_type;<br>
+<br>
+</font></p>
+<p><font face="Courier New">&nbsp; &nbsp;
 &nbsp; &nbsp;
 static inline void set(CPoint&amp; point, orientation_2d orient, int value) {<br>&nbsp; &nbsp;
 &nbsp; &nbsp;
@@ -137,11 +138,12 @@
 &nbsp;</font></p>
 
 
-<table class="docinfo" rules="none" frame="void" id="table1">
+
+<table class="docinfo" id="table1" frame="void" rules="none">
         <colgroup>
                 <col class="docinfo-name"><col class="docinfo-content">
         </colgroup>
- <tbody vAlign="top">
+ <tbody valign="top">
                 <tr>
                         <th class="docinfo-name">Copyright:</th>
                         <td>Copyright © Intel Corporation 2008-2010.</td>
@@ -154,8 +156,6 @@
                         <a class="reference" target="_top" href="
http://www.boost.org/LICENSE_1_0.txt">
                         http://www.boost.org/LICENSE_1_0.txt>)</td>
                 </tr>
-</table>
-
-</body>
+</tbody></table>
 
-</html>
+</body></html>
\ No newline at end of file

Modified: branches/release/libs/polygon/doc/gtl_design_overview.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_design_overview.htm (original)
+++ branches/release/libs/polygon/doc/gtl_design_overview.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,194 +1,224 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Overview</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>
- Point Concept</li>
+-->
+ <title>Boost Polygon Library: Overview</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li> Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-
- </ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Polygon Library Design Overview</h1>
-
-<p>
-</p><p>The Polygon library uses C++-Concepts inspired template programming to
-provide generic library functions overloaded on concept type.&nbsp; There are
-currently thirteen concepts in the Polygon library type system.&nbsp; A concept
-object in the Polygon library is just an empty struct similar to a tag that
-would be used for tag dispatching.&nbsp;&nbsp; These concepts are shown in the
-refinement diagram below.</p>
-
-
-<img src="images/refinements.png" border="0" height="369" width="466" /><p>
-The arrows between diagram bubbles show concept refinement relationships.&nbsp; This is
-similar, but not identical to, inheritance relationships between normal classes.&nbsp;
-A refinement of a concept narrows down the definition of a more general concept.&nbsp;
-For example, the rectangle concept is a refinement of a polygon concept because
-it restricts the polygon to a four sided, axis-parallel, rectilinear figure.&nbsp; A refinement
-of a concept is always acceptable to an API that expects read only access to a
-given concept, but never acceptable to an API that expects to write to that
-concept.&nbsp; There are three types of geometry in the polygon library, the
-general case, the case restricted to angles that are multiples of 45 degrees,
-and the Manhattan/rectilinear case where angles are restricted to multiples of
-90 degrees.&nbsp;&nbsp; The refinement diagram shows that 90 degree concepts are
-refinements of 45 degree concepts, which are themselves refinements of the
-general case.&nbsp; This allows the compiler to choose between the three
-implementations of algorithms to select the best algorithm for the conceptual
-data types passed to an overload of a function including heterogeneous
-combinations of 90, 45 and general case geometry.&nbsp; To provide the
-<font face="Courier New">operator&amp;</font> that performs the intersection on any
-pair of objects from the ten conceptual types related to each other through
-refinement in the diagraph above fully one hundred distinct combinations of
-conceptual types are supported by the library, but only three overloads are
-required to implement the operator (one for 90, one for 45 and one for arbitrary
-angle version of the intersection operation) because refinement generalizes the
-implementation of the interface.&nbsp; In this way a fully symmetric, complete
-and internally consistent API is implemented to provide meaningful and correct
-behaviors for all combinations of argument types in all APIs where those types
-make sense.&nbsp; For example, it doesn't make sense to copy data from a polygon
-into a rectangle, so attempting to do so yields a syntax error, while copying a
-rectangle into a polygon does make sense.&nbsp; The <font face="Courier New">
-assign()</font> function that is used to copy geometry data between concepts
-instantiates for the 49 combinations of concepts that make sense, but not for
-the 51 combinations that are illegal.&nbsp; The syntax error you will see when
-attempting an illegal assign operation is simple and clear because use of SFINAE
-by the library to overload generic functions means no matching function is found
-by the compiler in cases where no overload is provided.</p>
-<p>
-<font face="Courier New">error: no matching function for call to 'assign(rectangle_data&lt;int&gt;&amp;,
-polygon_data&lt;int&gt;&amp;)'</font></p>
-<p>Associated with each concept is a traits struct that generally must be
-specialized for a given data type to provide the concept mapping between the
-interfaces of the data type and the expected behaviors of an object of that type
-required by the library.&nbsp; The library also provides its own data types for
-each concept that conform to the default traits definition.&nbsp; These library
-provided data types are no more than dumb containers that provide access to
-their data and rely on the generic library functions to enforce invariants and
-provide useful behaviors specific to their type of geometry that would normally
-be member functions of the data type in an OO design.&nbsp; The library data
-types conform to the default traits associated with their related geometry
-concept and are registered as models of that concept.&nbsp; When a data
-type has been mapped to a concept through traits it needs to be registered
-as that conceptual type with the library by
-specializing the geometry_concept meta-function.&nbsp; Once mapped and
-registered, a user data type can be used interchangeably with library data types
-in the generic free functions that are overloaded on concept.</p><p>Traits for
-mapping a data type to a concept are broken down into mutable and read only
-traits.&nbsp; Read only traits are specialized internally to work with any types
-that are refinements of a concept.&nbsp; The mutable traits are defined only for
-objects that exactly model the concept.&nbsp; Both read only traits and mutable
-traits need to be defined for a type to model a concept, but a type can be used
-without defining the mutable traits as long as no API that needs to modify the
-object is used with that type.&nbsp; For example, a triangle type could be
-registered as a polygon_concept and the read only traits but not the mutable
-traits defined for that triangle type.&nbsp; This would allow the triangle type
-to be passed into any API that expects a const reference to an object that models
-polygon.&nbsp;
-</p><p>An object that is a model of a given concept can usually be viewed as a model of any of its
-refinements if it is determined at runtime to conform to the restrictions of
-those concepts.&nbsp; This concept casting is accomplished through the
-<font face="Courier New">view_as&lt;&gt;()</font> function.&nbsp; For example if
-an object of conceptual type polygon 90 has four sides it must be a rectangle,
-and can be viewed as a rectangle with the following syntax:</p>
-<p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_90_object)</font></p>
-<p>The return value of <font face="Courier New">view_as&lt;&gt;()</font> can be
-passed into any interface that expects an object of the conceptual type
-specified in its template parameter.&nbsp; The exception to this ability to
-concept cast geometric objects is that polygon set objects cannot be viewed as
-individual polygons or rectangles.</p> </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table1" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="
http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Polygon Library Design Overview</h1>
+ <p> </p>
+ <p>The Polygon library uses C++-Concepts inspired template
+programming to provide generic library functions overloaded on concept
+type.&nbsp; There are currently thirteen concepts in the Polygon
+library type system.&nbsp; A concept object in the Polygon library is
+just an empty struct similar to a tag that would be used for tag
+dispatching.&nbsp;&nbsp; These concepts are shown in the refinement
+diagram below.</p>
+ <img src="images/refinements.png" border="0" height="369"
+ width="466" />
+ <p>The arrows between diagram bubbles show concept refinement
+relationships.&nbsp; This is similar, but not identical to, inheritance
+relationships between normal classes.&nbsp; A refinement of a concept
+narrows down the definition of a more general concept.&nbsp; For
+example, the rectangle concept is a refinement of a polygon concept
+because it restricts the polygon to a four sided, axis-parallel,
+rectilinear figure.&nbsp; A refinement of a concept is always
+acceptable to an API that expects read only access to a given concept,
+but never acceptable to an API that expects to write to that
+concept.&nbsp; There are three types of geometry in the polygon
+library, the general case, the case restricted to angles that are
+multiples of 45 degrees, and the Manhattan/rectilinear case where
+angles are restricted to multiples of 90 degrees.&nbsp;&nbsp; The
+refinement diagram shows that 90 degree concepts are refinements of 45
+degree concepts, which are themselves refinements of the general
+case.&nbsp; This allows the compiler to choose between the three
+implementations of algorithms to select the best algorithm for the
+conceptual data types passed to an overload of a function including
+heterogeneous combinations of 90, 45 and general case geometry.&nbsp;
+To provide the
+ <font face="Courier New">operator&amp;</font> that performs the
+intersection on any pair of objects from the ten conceptual types
+related to each other through refinement in the diagraph above fully
+one hundred distinct combinations of conceptual types are supported by
+the library, but only three overloads are required to implement the
+operator (one for 90, one for 45 and one for arbitrary angle version of
+the intersection operation) because refinement generalizes the
+implementation of the interface.&nbsp; In this way a fully symmetric,
+complete and internally consistent API is implemented to provide
+meaningful and correct behaviors for all combinations of argument types
+in all APIs where those types make sense.&nbsp; For example, it doesn't
+make sense to copy data from a polygon into a rectangle, so attempting
+to do so yields a syntax error, while copying a rectangle into a
+polygon does make sense.&nbsp; The <font face="Courier New">
+assign()</font> function that is used to copy geometry data between
+concepts instantiates for the 49 combinations of concepts that make
+sense, but not for the 51 combinations that are illegal.&nbsp; The
+syntax error you will see when attempting an illegal assign operation
+is simple and clear because use of SFINAE by the library to overload
+generic functions means no matching function is found by the compiler
+in cases where no overload is provided.</p>
+ <p>
+ <font face="Courier New">error: no matching function for call to
+'assign(rectangle_data&lt;int&gt;&amp;, polygon_data&lt;int&gt;&amp;)'</font></p>
+ <p>Associated with each concept is a traits struct that generally
+must be specialized for a given data type to provide the concept
+mapping between the interfaces of the data type and the expected
+behaviors of an object of that type required by the library.&nbsp; The
+library also provides its own data types for each concept that conform
+to the default traits definition.&nbsp; These library provided data
+types are no more than dumb containers that provide access to their
+data and rely on the generic library functions to enforce invariants
+and provide useful behaviors specific to their type of geometry that
+would normally be member functions of the data type in an OO
+design.&nbsp; The library data types conform to the default traits
+associated with their related geometry concept and are registered as
+models of that concept.&nbsp; When a data type has been mapped to a
+concept through traits it needs to be registered as that conceptual
+type with the library by specializing the geometry_concept
+meta-function.&nbsp; Once mapped and registered, a user data type can
+be used interchangeably with library data types in the generic free
+functions that are overloaded on concept.</p>
+ <p>Traits for mapping a data type to a concept are broken down
+into mutable and read only traits.&nbsp; Read only traits are
+specialized internally to work with any types that are refinements of a
+concept.&nbsp; The mutable traits are defined only for objects that
+exactly model the concept.&nbsp; Both read only traits and mutable
+traits need to be defined for a type to model a concept, but a type can
+be used without defining the mutable traits as long as no API that
+needs to modify the object is used with that type.&nbsp; For example, a
+triangle type could be registered as a polygon_concept and the read
+only traits but not the mutable traits defined for that triangle
+type.&nbsp; This would allow the triangle type to be passed into any
+API that expects a const reference to an object that models
+polygon.&nbsp; </p>
+ <p>An object that is a model of a given concept can usually be
+viewed as a model of any of its refinements if it is determined at
+runtime to conform to the restrictions of those concepts.&nbsp; This
+concept casting is accomplished through the
+ <font face="Courier New">view_as&lt;&gt;()</font> function.&nbsp;
+For example if an object of conceptual type polygon 90 has four sides
+it must be a rectangle, and can be viewed as a rectangle with the
+following syntax:</p>
+ <p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_90_object)</font></p>
+ <p>The return value of <font face="Courier New">view_as&lt;&gt;()</font>
+can be passed into any interface that expects an object of the
+conceptual type specified in its template parameter.&nbsp; The
+exception to this ability to concept cast geometric objects is that
+polygon set objects cannot be viewed as individual polygons or
+rectangles.</p>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table1" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_interval_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_interval_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_interval_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,555 +1,620 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Interval Concept</title>
-
-
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Interval Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-
- </ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Interval Concept</h1>
-
-<p>
-</p><p>The interval concept tag is <font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Interval Concept</h1>
+ <p> </p>
+ <p>The interval concept tag is <font face="Courier New">
 interval_concept</font></p>
-<p>
-To register a user defined type as a model of interval concept, specialize the
-geometry concept meta-function for that type.&nbsp; In the example below
-CInterval is registered as a model of interval&nbsp; concept.</p><p>
-<font face="Courier New">template &lt;&gt;<br />
-struct geometry_concept&lt;CInterval&gt; { typedef interval_concept type; };</font></p><p>
-<font face="Times New Roman">The semantic of an interval is that it has a low
-and high coordinate and there is an invariant that low is less than or equal to
-high.&nbsp; This invariant is enforced by the generic library functions that
-operate on intervals, and is not expected of the data type itself or the concept
-mapping of that data type to the interval concept through its traits.&nbsp; In
-this way a std::pair&lt;int, int&gt;, boost::tuple&lt;int, int&gt; or boost::array&lt;int, 2&gt;
-could all be made models of interval by simply providing indirect access to their
-elements through traits.</font></p><p>
-<font face="Times New Roman">Below is shown the default interval traits.&nbsp;
-Specialization of these traits is required for types that don't conform to the
-default behavior.</font></p><p>
-<font face="Courier New">template &lt;typename T&gt;<br />
+ <p> To register a user defined type as a model of interval
+concept, specialize the geometry concept meta-function for that
+type.&nbsp; In the example below CInterval is registered as a model of
+interval&nbsp; concept.</p>
+ <p> <font face="Courier New">template &lt;&gt;<br />
+struct geometry_concept&lt;CInterval&gt; { typedef interval_concept
+type; };</font></p>
+ <p> <font face="Times New Roman">The semantic of an interval is
+that it has a low and high coordinate and there is an invariant that
+low is less than or equal to high.&nbsp; This invariant is enforced by
+the generic library functions that operate on intervals, and is not
+expected of the data type itself or the concept mapping of that data
+type to the interval concept through its traits.&nbsp; In this way a
+std::pair&lt;int, int&gt;, boost::tuple&lt;int, int&gt; or
+boost::array&lt;int, 2&gt; could all be made models of interval by
+simply providing indirect access to their elements through traits.</font></p>
+ <p> <font face="Times New Roman">Below is shown the default
+interval traits.&nbsp; Specialization of these traits is required for
+types that don't conform to the default behavior.</font></p>
+ <p> <font face="Courier New">template &lt;typename T&gt;<br />
 struct interval_traits {<br />
 &nbsp; typedef typename T::coordinate_type coordinate_type;<br />
-<br />
-&nbsp; static inline coordinate_type get(const T&amp; interval, direction_1d dir) {<br />
+ <br />
+&nbsp; static inline coordinate_type get(const T&amp; interval,
+direction_1d dir) {<br />
 &nbsp;&nbsp;&nbsp; return interval.get(dir); <br />
 &nbsp; }<br />
 };<br />
-<br />
+ <br />
 template &lt;typename T&gt;<br />
 struct interval_mutable_traits {<br />
+&nbsp; </font><font face="Courier New">typedef typename
+T::coordinate_type coordinate_type;</font><br />
+ <font face="Courier New"><br />
 &nbsp; static inline void set(T&amp; interval, direction_1d dir, </font>
-<br />
-<font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <br />
+ <font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 typename interval_traits&lt;T&gt;::coordinate_type value) {<br />
 &nbsp;&nbsp;&nbsp;
 interval.set(dir, value); <br />
 &nbsp;
 }<br />
 &nbsp;
-static inline T construct(typename interval_traits&lt;T&gt;::coordinate_type low_value,
-<br />
+static inline T construct(typename
+interval_traits&lt;T&gt;::coordinate_type low_value,
+ <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 typename interval_traits&lt;T&gt;::coordinate_type high_value) {<br />
 &nbsp;&nbsp;&nbsp;
 return T(low_value, high_value); <br />
 &nbsp;
 }<br />
-};</font></p><h2>Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_type <b>get</b>(const T&amp; interval, direction_1d)</font></td>
- <td><font face="Times New Roman">Expects a model of interval.&nbsp;
- Returns the low or high coordinate of the interval, depending on the
- direction_1d value.</font><font face="Courier New"><br />
+};</font></p>
+ <h2>Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_type <b>get</b>(const T&amp; interval, direction_1d)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+interval.&nbsp; Returns the low or high coordinate of the interval,
+depending on the direction_1d value.</font><font face="Courier New"><br />
 &nbsp;</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- coordinate_type&gt;<br />
- void <b>set</b>(T&amp; interval, direction_1d, coordinate_type)</font></td>
- <td><font face="Times New Roman">Expects a model of interval.&nbsp;&nbsp;
- Sets the low or high coordinate of the interval to the coordinate,
- depending on the direction_1d value.&nbsp; If low would be greater than
- high after this change then both are set to the input coordinate value.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T <b>construct</b>(coordinate_type low, coordinate_type high)</font></td>
- <td>Construct an object that is a model of interval given low and high
- coordinate values.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
- <td>Copies data from right object that models interval into left object
- that models interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- T2&gt;<br />
- bool <b>equivalence</b>(const T&amp; interval1, const T2&amp; interval2)</font></td>
- <td>Given two objects that model interval, compares and returns true if
- their low and high values are respectively equal to each other.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- bool <b>contains</b>(const T&amp;, coordinate_type, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch=true)</font></td>
- <td>Given an object that models interval and a coordinate, returns true
- if the interval contains the coordinate.&nbsp; If the consider_touch
- flag is true will return true if the coordinate is equal to one of the
- interval ends.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>contains</b>(const T1&amp; a, const T2&amp; b, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch = true) </font></td>
- <td>Returns true if model of interval a contains both ends of model of
- interval b.&nbsp; If the consider_touch flag is true will consider the
- end of b contained within a even if it is equal to an end of a.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- coordinate_type <b>low</b>(const interval_type&amp; interval)</font></td>
- <td>Returns the low end of an object that models interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- coordinate_type <b>high</b>(const interval_type&amp; interval)</font></td>
- <td>Returns the high end of an object that models interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br />
- template &lt;typename interval_type&gt;<br />
- coordinate_type <b>center</b>(const interval_type&amp; interval)</font></td>
- <td>Returns the center coordinate of an object that models interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- void <b>low</b>(interval_type&amp; interval, coordinate_type )</font></td>
- <td>Sets the low end of the object that models interval to the
- coordinate value.&nbsp; If the low end would be set to larger than high
- end then both are set to the coordinate value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- void <b>high</b>(interval_type&amp; interval, coordinate_type )</font></td>
- <td>Sets the high end of the object that models interval to the
- coordinate value.&nbsp; If the high end would be set to less than low
- end then both are set to the coordinate value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- coordinate_difference <b>delta</b>(const interval_type&amp; interval)</font></td>
- <td>Returns the distance from low to high end of an object that models
- interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- interval_type&amp; <b>flip</b>(interval_type&amp; interval,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- coordinate_type axis = 0)</font></td>
- <td>Flips an object that models interval about the axis coordinate.&nbsp;
- If no axis is provided the interval is flipped across the the origin.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- interval_type&amp; <b>scale_up</b>(interval_type&amp; interval, <br />
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename coordinate_type&gt;<br />
+void <b>set</b>(T&amp; interval, direction_1d, coordinate_type)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+interval.&nbsp;&nbsp; Sets the low or high coordinate of the interval
+to the coordinate, depending on the direction_1d value.&nbsp; If low
+would be greater than high after this change then both are set to the
+input coordinate value.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T <b>construct</b>(coordinate_type low, coordinate_type high)</font></td>
+ <td>Construct an object that is a model of interval given
+low and high coordinate values.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
+ <td>Copies data from right object that models interval into
+left object that models interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename T2&gt;<br />
+bool <b>equivalence</b>(const T&amp; interval1, const T2&amp;
+interval2)</font></td>
+ <td>Given two objects that model interval, compares and
+returns true if their low and high values are respectively equal to
+each other.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+bool <b>contains</b>(const T&amp;, coordinate_type, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch=true)</font></td>
+ <td>Given an object that models interval and a coordinate,
+returns true if the interval contains the coordinate.&nbsp; If the
+consider_touch flag is true will return true if the coordinate is equal
+to one of the interval ends.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>contains</b>(const T1&amp; a, const T2&amp; b, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch = true) </font></td>
+ <td>Returns true if model of interval a contains both ends
+of model of interval b.&nbsp; If the consider_touch flag is true will
+consider the end of b contained within a even if it is equal to an end
+of a.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+coordinate_type <b>low</b>(const interval_type&amp; interval)</font></td>
+ <td>Returns the low end of an object that models interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+coordinate_type <b>high</b>(const interval_type&amp; interval)</font></td>
+ <td>Returns the high end of an object that models interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">// get the center
+coordinate<br />
+template &lt;typename interval_type&gt;<br />
+coordinate_type <b>center</b>(const interval_type&amp; interval)</font></td>
+ <td>Returns the center coordinate of an object that models
+interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+void <b>low</b>(interval_type&amp; interval, coordinate_type )</font></td>
+ <td>Sets the low end of the object that models interval to
+the coordinate value.&nbsp; If the low end would be set to larger than
+high end then both are set to the coordinate value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+void <b>high</b>(interval_type&amp; interval, coordinate_type )</font></td>
+ <td>Sets the high end of the object that models interval to
+the coordinate value.&nbsp; If the high end would be set to less than
+low end then both are set to the coordinate value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+coordinate_difference <b>delta</b>(const interval_type&amp; interval)</font></td>
+ <td>Returns the distance from low to high end of an object
+that models interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+interval_type&amp; <b>flip</b>(interval_type&amp; interval,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+coordinate_type axis = 0)</font></td>
+ <td>Flips an object that models interval about the axis
+coordinate.&nbsp; If no axis is provided the interval is flipped across
+the the origin.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+interval_type&amp; <b>scale_up</b>(interval_type&amp; interval, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type factor)</font></td>
- <td>Multiplies low and high ends of an object that models interval by
- unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- interval_type&amp; <b>scale_down</b>(interval_type&amp; interval, <br />
+ <td>Multiplies low and high ends of an object that models
+interval by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+interval_type&amp; <b>scale_down</b>(interval_type&amp; interval, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type factor)</font></td>
- <td>Divides low and high ends of an object that models interval by
- unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- interval_type&amp; <b>scale</b>(interval_type&amp; interval,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- double factor) </font></td>
- <td>Multiplies low and high ends of an object that models interval by
- floating point value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- interval_type&amp; <b>move</b>(interval_type&amp; interval,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- coordinate_difference displacement)</font></td>
- <td>Adds displacement value to low and high ends of an object that
- models interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- interval_type&amp; <b>convolve</b>(interval_type&amp; interval,<br />
+ <td>Divides low and high ends of an object that models
+interval by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+interval_type&amp; <b>scale</b>(interval_type&amp; interval,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+double factor) </font></td>
+ <td>Multiplies low and high ends of an object that models
+interval by floating point value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+interval_type&amp; <b>move</b>(interval_type&amp; interval,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+coordinate_difference displacement)</font></td>
+ <td>Adds displacement value to low and high ends of an
+object that models interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+interval_type&amp; <b>convolve</b>(interval_type&amp; interval,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 coordinate_type b)</font></td>
- <td>Adds coordinate value to low and high ends of an object that models
- interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- interval_type&gt;<br />
- interval_type&amp; <b>deconvolve</b>(interval_type&amp; interval,<br />
+ <td>Adds coordinate value to low and high ends of an object
+that models interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename interval_type&gt;<br />
+interval_type&amp; <b>deconvolve</b>(interval_type&amp; interval,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 coordinate_type b)</font></td>
- <td>Subtracts coordinate value from low and high ends of an object that
- models interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>convolve</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Adds low end of b to low end of a and adds high end of b to high end
- of a.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>deconvolve</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Subtracts low end of b from low end of a and subtracts high end of b
- from high end of a. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>reflected_convolve</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Adds high end of b to low end of a and adds low end of b to high end
- of a.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>reflected_deconvolve</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Subtracts high end of b from low end of a and subtracts low end of b
- from high end of a.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_difference <b>euclidean_distance</b>(const T&amp;,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- coordinate_type)</font></td>
- <td>Returns the distance from an object that models interval to a
- coordinate.&nbsp; Returns zero if the coordinate is equal to an end of
- the interval or contained within the interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>intersects</b>(const T1&amp; interval, const T2&amp; b, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch = true)</font></td>
- <td>Returns true if two objects that model interval overlap.&nbsp; If
- the consider_touch flag is true touching at the endpoints is considered
- overlap.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>boundaries_intersect</b>(const T1&amp; interval, const T2&amp; b, <br />
+ <td>Subtracts coordinate value from low and high ends of an
+object that models interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>convolve</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Adds low end of b to low end of a and adds high end of
+b to high end of a.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>deconvolve</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Subtracts low end of b from low end of a and subtracts
+high end of b from high end of a. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>reflected_convolve</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Adds high end of b to low end of a and adds low end of
+b to high end of a.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>reflected_deconvolve</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Subtracts high end of b from low end of a and subtracts
+low end of b from high end of a.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_difference <b>euclidean_distance</b>(const T&amp;,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+coordinate_type)</font></td>
+ <td>Returns the distance from an object that models
+interval to a coordinate.&nbsp; Returns zero if the coordinate is equal
+to an end of the interval or contained within the interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>intersects</b>(const T1&amp; interval, const T2&amp; b, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch = true)</font></td>
+ <td>Returns true if two objects that model interval
+overlap.&nbsp; If the consider_touch flag is true touching at the
+endpoints is considered overlap.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>boundaries_intersect</b>(const T1&amp; interval, const T2&amp;
+b, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 bool consider_touch = true)</font></td>
- <td>Returns true is two objects that model interval partially overlap
- such that one end point of each is contained within the other.&nbsp; If
- the consider_touch flag is true a coordinate is considered contained
- even if it is equal to an end.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>abuts</b>(const T1&amp; a, const T2&amp; b,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; direction_1d dir)
- </font></td>
- <td>Returns true if interval b abuts but down not overlap interval a on
- the end of interval a specified by dir.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>abuts</b>(const T1&amp; a, const T2&amp; b)</font></td>
- <td>Returns true if interval b abuts but down not overlap interval a.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>intersect</b>(T1&amp; a, const T2&amp; b,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch = true) </font></td>
- <td>Sets interval a to the intersection of interval a and interval b and
- return true.&nbsp; If the two intervals do not intersect interval a is
- unchanged and the function returns false.&nbsp; If the flag
- consider_touch is true intervals that abut are considered to intersect.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T&amp; <b>generalized_intersect</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Same as intersect, but if they do not intersect set a to the
- interval between a and b.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; interval, coordinate_type)</font></td>
- <td>Adds the coordinate value to high end of interval and subtracts it
- from low end of interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; interval, direction_1d, coordinate_type)</font></td>
- <td>Adds the coordinate value to high end of interval or subtracts it
- from low end of interval depending on the direction_1d.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; interval, coordinate_type)</font></td>
- <td>Subtracts the coordinate value from high end of interval and adds it
- to low end of interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; interval, direction_1d, coordinate_type)</font></td>
- <td>Subtracts the coordinate value from high end of interval or adds it
- to low end of interval depending on the direction_1d.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>encompass</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Sets low of a to min of low of a and low of b and sets high of a to
- max of high of a and high of b.&nbsp; Returns true if b was not
- contained within a to begin with.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- bool <b>encompass</b>(T&amp; a, coordinate_type)</font></td>
- <td>Sets low of a to min of low of a and coordinate value and sets high
- of a to max of high of a and coordinate value.&nbsp; Returns true if
- coordinate value was not contained within a to begin with.</td>
- </tr>
-</tbody></table>
- <h1>Interval Data</h1>
-
-<p>
-</p><p>The library provides a model of interval concept declared
-<font face="Courier New">
-template&lt;typename T&gt; interval_data </font>where T is the coordinate type.</p>
-<p>This data type is used internally when an interval is needed and is available
-to the library user who finds it convenient to use a library interval data type
-instead of providing their own.&nbsp; The data type is implemented to be
-convenient to use with the library traits.</p>
-<h2>Members</h2>
-<table id="table2" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
- <td><font face="Times New Roman">interval_concept</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
- <td><font face="Times New Roman">T</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>interval_data</b>()</font></td>
- <td><font face="Times New Roman">Default constructs the two coordinate
- values of the interval.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>interval_data</b>(T low, T
- high)</font></td>
- <td><font face="Times New Roman">Constructs an interval with two
- coordinates.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>interval_data</b>(const
- interval_data&amp; that)</font></td>
- <td><font face="Times New Roman">Copy construct</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">interval_data&amp; <b>operator=</b>(const
- interval_data&amp; that)</font></td>
- <td>Assignment operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename IntervalType&gt;<b>&nbsp;
- <br /> </b>interval_data&amp; <b>operator=</b>(</font><font face="Courier New">const IntervalType</font><font face="Courier New">&amp; that) const</font></td>
- <td>Assign from an object that is a model of interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b />bool<b>
- operator==</b>(const </font><font face="Courier New">interval_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Equality operator overload.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool<b>
- operator!=</b>(const </font><font face="Courier New">interval_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Inequality operator overload.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool<b>
- operator&lt;</b>(const </font><font face="Courier New">interval_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Compares low coordinates then high coordinates to break ties.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool<b>
- operator&lt;=</b>(const </font><font face="Courier New">interval_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Compares low coordinates then high coordinates to break ties.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool<b>
- operator&gt;</b>(const </font><font face="Courier New">interval_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Compares low coordinates then high coordinates to break ties.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool<b>
- operator&gt;=</b>(const </font><font face="Courier New">interval_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Compares low coordinates then high coordinates to break ties.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">T <b>get</b>(direction_1d dir)
- const</font></td>
- <td>Get the coordinate in the given direction.</td>
- </tr>
- <tr>
- <td style="vertical-align: top;"><font face="Courier New">T <span style="font-weight: bold;">low</span>() const</font></td>
+ <td>Returns true is two objects that model interval
+partially overlap such that one end point of each is contained within
+the other.&nbsp; If the consider_touch flag is true a coordinate is
+considered contained even if it is equal to an end.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>abuts</b>(const T1&amp; a, const T2&amp; b,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+direction_1d dir) </font></td>
+ <td>Returns true if interval b abuts but down not overlap
+interval a on the end of interval a specified by dir.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>abuts</b>(const T1&amp; a, const T2&amp; b)</font></td>
+ <td>Returns true if interval b abuts but down not overlap
+interval a.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>intersect</b>(T1&amp; a, const T2&amp; b,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch = true) </font></td>
+ <td>Sets interval a to the intersection of interval a and
+interval b and return true.&nbsp; If the two intervals do not intersect
+interval a is unchanged and the function returns false.&nbsp; If the
+flag consider_touch is true intervals that abut are considered to
+intersect.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T&amp; <b>generalized_intersect</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Same as intersect, but if they do not intersect set a
+to the interval between a and b.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; interval, coordinate_type)</font></td>
+ <td>Adds the coordinate value to high end of interval and
+subtracts it from low end of interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; interval, direction_1d, coordinate_type)</font></td>
+ <td>Adds the coordinate value to high end of interval or
+subtracts it from low end of interval depending on the direction_1d.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; interval, coordinate_type)</font></td>
+ <td>Subtracts the coordinate value from high end of
+interval and adds it to low end of interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; interval, direction_1d, coordinate_type)</font></td>
+ <td>Subtracts the coordinate value from high end of
+interval or adds it to low end of interval depending on the
+direction_1d.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>encompass</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Sets low of a to min of low of a and low of b and sets
+high of a to max of high of a and high of b.&nbsp; Returns true if b
+was not contained within a to begin with.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+bool <b>encompass</b>(T&amp; a, coordinate_type)</font></td>
+ <td>Sets low of a to min of low of a and coordinate value
+and sets high of a to max of high of a and coordinate value.&nbsp;
+Returns true if coordinate value was not contained within a to begin
+with.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Interval Data</h1>
+ <p> </p>
+ <p>The library provides a model of interval concept declared
+ <font face="Courier New">template&lt;typename T&gt; interval_data
+ </font>where T is the coordinate type.</p>
+ <p>This data type is used internally when an interval is needed
+and is available to the library user who finds it convenient to use a
+library interval data type instead of providing their own.&nbsp; The
+data type is implemented to be convenient to use with the library
+traits.</p>
+ <h2>Members</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
+ <td><font face="Times New Roman">interval_concept</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
+ <td><font face="Times New Roman">T</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>interval_data</b>()</font></td>
+ <td><font face="Times New Roman">Default constructs the two
+coordinate values of the interval.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>interval_data</b>(T
+low, T high)</font></td>
+ <td><font face="Times New Roman">Constructs an interval
+with two coordinates.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>interval_data</b>(const
+interval_data&amp; that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">interval_data&amp;
+ <b>operator=</b>(const interval_data&amp; that)</font></td>
+ <td>Assignment operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename IntervalType&gt;<b>&nbsp; <br />
+ </b>interval_data&amp; <b>operator=</b>(</font><font
+ face="Courier New">const IntervalType</font><font face="Courier New">&amp;
+that) const</font></td>
+ <td>Assign from an object that is a model of interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>bool<b>
+operator==</b>(const </b></font><b><font face="Courier New">interval_data</font><font
+ face="Courier New">&amp; that) const</font></b></td>
+ <td>Equality operator overload.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool<b> operator!=</b>(const
+ </font><font face="Courier New">interval_data</font><font
+ face="Courier New">&amp; that) const</font></td>
+ <td>Inequality operator overload.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool<b>
+operator&lt;</b>(const </font><font face="Courier New">interval_data</font><font
+ face="Courier New">&amp; that) const</font></td>
+ <td>Compares low coordinates then high coordinates to break
+ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool<b>
+operator&lt;=</b>(const </font><font face="Courier New">interval_data</font><font
+ face="Courier New">&amp; that) const</font></td>
+ <td>Compares low coordinates then high coordinates to break
+ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool<b>
+operator&gt;</b>(const </font><font face="Courier New">interval_data</font><font
+ face="Courier New">&amp; that) const</font></td>
+ <td>Compares low coordinates then high coordinates to break
+ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool<b>
+operator&gt;=</b>(const </font><font face="Courier New">interval_data</font><font
+ face="Courier New">&amp; that) const</font></td>
+ <td>Compares low coordinates then high coordinates to break
+ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">T <b>get</b>(direction_1d
+dir) const</font></td>
+ <td>Get the coordinate in the given direction.</td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><font face="Courier New">T
+ <span style="font-weight: bold;">low</span>() const</font></td>
             <td style="vertical-align: top;">Retrieves the low value.</td>
           </tr>
           <tr>
- <td style="vertical-align: top;"><font face="Courier New">T <span style="font-weight: bold;">high</span>() const</font></td>
- <td style="vertical-align: top;">Retrieves the high endpoint.</td>
+ <td style="vertical-align: top;"><font face="Courier New">T
+ <span style="font-weight: bold;">high</span>() const</font></td>
+ <td style="vertical-align: top;">Retrieves the high
+endpoint.</td>
           </tr>
-<tr>
- <td width="586"><font face="Courier New">void <b>set</b>(direction_1d
- dir, T value)</font></td>
- <td>Sets the coordinate in the given direction to the value.</td>
- </tr><tr>
- <td style="vertical-align: top;"><font face="Courier New">interval_data&amp; <span style="font-weight: bold;">low</span>(T value)</font></td>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>set</b>(direction_1d
+dir, T value)</font></td>
+ <td>Sets the coordinate in the given direction to the value.</td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><font face="Courier New">interval_data&amp;
+ <span style="font-weight: bold;">low</span>(T value)</font></td>
             <td style="vertical-align: top;">Sets the low value.</td>
           </tr>
           <tr>
- <td style="vertical-align: top;"><font face="Courier New">interval_data&amp; <span style="font-weight: bold;">high</span>(T value)</font></td>
+ <td style="vertical-align: top;"><font face="Courier New">interval_data&amp;
+ <span style="font-weight: bold;">high</span>(T value)</font></td>
             <td style="vertical-align: top;">Sets the high value.</td>
           </tr>
-
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table3" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table3" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_isotropy.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_isotropy.htm (original)
+++ branches/release/libs/polygon/doc/gtl_isotropy.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,152 +1,174 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Isotropy</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Isotropy</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Isotropy</h1>
-
-<p>
-</p><p align="left">What is isotropy?</p>
-<p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00">
-</p:colorscheme><div class="O" style="text-align: center;" v:shape="_x0000_s1026">
- <p style="text-align: left;">
- <span style="">Isotropy - Function: <i>adjective</i> Etymology: International
- Scientific Vocabulary<br />
- <b>:</b> exhibiting properties (as velocity of light transmission) with the
- same values when measured along axes in all directions &lt;an <i>isotropic</i>
- crystal&gt;</span></p></div>
-<p align="left">In computational geometry things are often symmetric and
-invariant to direction and orientation.&nbsp; This invariance to direction is
-called isotropy.&nbsp; In such situations it is convenient to parameterize
-direction or orientation and write code that is invariant to the direction or
-orientation in which it is applied.&nbsp; To do this effectively we provide an
-internally consistent set of isotropic data types to represent program
-data that describes orientations and directions.&nbsp; These data types are:</p>
- <ul>
- <li>direction_1d - has one of the following 2 states: LOW, HIGH </li>
- <li>orientation_2d - has one of the following 2 states: HORIZONTAL,
- VERTICAL</li>
- <li>direction_2d - has one of the following 4 states: WEST, EAST, SOUTH,
- NORTH</li>
- <li>orientation_3d - has one of the following 3 states: HORIZONTAL,
- VERTICAL, PROXIMAL</li>
- <li>direction_3d - has one of the following 6 states: WEST, EAST, SOUTH,
- NORTH, DOWN, UP</li>
- </ul>
-
-<p align="left">The isotropic types create a system and interact with each other
-in various ways, such as casting.&nbsp; Together they create a language for
-describing isotropic situations programmatically.&nbsp; For instance, to get the
-positive direction_2d from an orientation_2d you would call a member function of
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Isotropy</h1>
+ <p> </p>
+ <p align="left">What is isotropy?</p>
+ <p:colorscheme
+ colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00">
+ </p:colorscheme>
+ <div class="O" style="text-align: center;" v:shape="_x0000_s1026">
+ <p style="text-align: left;"> <span style="">Isotropy -
+Function: <i>adjective</i> Etymology: International Scientific
+Vocabulary<br />
+ <b>:</b> exhibiting properties (as velocity of light
+transmission) with the same values when measured along axes in all
+directions &lt;an <i>isotropic</i> crystal&gt;</span></p>
+ </div>
+ <p align="left">In computational geometry things are often
+symmetric and invariant to direction and orientation.&nbsp; This
+invariance to direction is called isotropy.&nbsp; In such situations it
+is convenient to parameterize direction or orientation and write code
+that is invariant to the direction or orientation in which it is
+applied.&nbsp; To do this effectively we provide an internally
+consistent set of isotropic data types to represent program data that
+describes orientations and directions.&nbsp; These data types are:</p>
+ <ul>
+ <li>direction_1d - has one of the following 2 states: LOW, HIGH
+ </li>
+ <li>orientation_2d - has one of the following 2 states:
+HORIZONTAL, VERTICAL</li>
+ <li>direction_2d - has one of the following 4 states: WEST,
+EAST, SOUTH, NORTH</li>
+ <li>orientation_3d - has one of the following 3 states:
+HORIZONTAL, VERTICAL, PROXIMAL</li>
+ <li>direction_3d - has one of the following 6 states: WEST,
+EAST, SOUTH, NORTH, DOWN, UP</li>
+ </ul>
+ <p align="left">The isotropic types create a system and interact
+with each other in various ways, such as casting.&nbsp; Together they
+create a language for describing isotropic situations
+programmatically.&nbsp; For instance, to get the positive direction_2d
+from an orientation_2d you would call a member function of
 orientation_2d and pass a direction_1d:</p>
-<p align="left"><font face="Courier New">orientation_2d orient = HORIZONTAL;<br />
+ <p align="left"><font face="Courier New">orientation_2d orient =
+HORIZONTAL;<br />
 direction_2d dir = orient.get_direction(direction_1d(HIGH));<br />
 assert(dir == EAST);</font></p>
-<p align="left">The motivation for providing isotropic data types is to
-encourage programming at a higher level of abstraction where program behavior is
-controlled by program data passed into function calls rather than flow control
-syntax.&nbsp; Isotropic programming style is particularly applicable to working
-with points, intervals and rectangles.&nbsp; Often times the implementation of
-such logic is identical when implemented for the x or y coordinates, except that
-the names of functions and data members are changed in a mechanical way leading
-to code duplication and bloat that results in copy-paste programming errors and
-maintenance problems where changes made to a given code block relating to x
-coordiantes are not duplicated to the code block that refers to y.&nbsp;
-Isotropy therefore represents an opportunity to refactor and improve the quality
-of low level geometry code especially in regard to inter-relating coordinates,
-points, intervals and rectangles.</p>
-<h2>direction_1d</h2>
-
-<p>
-</p><p align="left">The direction_1d data type has two possible states.&nbsp; These
-are the positive and negative directions on a continuum such as the number line.&nbsp;&nbsp;
-These states can be described by one of several direction_1d_enum values:&nbsp;
-We make clockwise and counterclockwise winding orientation of polygons a
-direction 1d value instead of providing a separate winding_orientation data
-type.&nbsp; This is because winding orientation can be thought of as positive
-and negative directions in a 1d (although cyclic) space.&nbsp; We assign
-counterclockwise to be the positive direction of travel in the 1d cyclic space
-to conform with the mathematical convention frequently described as the "right
-hand rule" which assigns positive normal value to counterclockwise and negative
-normal value to clockwise as well as the common convention that counterclockwise
-polygon winding corresponds to positive polygonal regions where as clockwise
-polygon winding corresponds to hole (negative) polygonal regions.</p>
-<p align="left"><font face="Courier New">enum direction_1d_enum {LOW = 0, HIGH =
-1,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <p align="left">The motivation for providing isotropic data types
+is to encourage programming at a higher level of abstraction where
+program behavior is controlled by program data passed into function
+calls rather than flow control syntax.&nbsp; Isotropic programming
+style is particularly applicable to working with points, intervals and
+rectangles.&nbsp; Often times the implementation of such logic is
+identical when implemented for the x or y coordinates, except that the
+names of functions and data members are changed in a mechanical way
+leading to code duplication and bloat that results in copy-paste
+programming errors and maintenance problems where changes made to a
+given code block relating to x coordiantes are not duplicated to the
+code block that refers to y.&nbsp; Isotropy therefore represents an
+opportunity to refactor and improve the quality of low level geometry
+code especially in regard to inter-relating coordinates, points,
+intervals and rectangles.</p>
+ <h2>direction_1d</h2>
+ <p> </p>
+ <p align="left">The direction_1d data type has two possible
+states.&nbsp; These are the positive and negative directions on a
+continuum such as the number line.&nbsp;&nbsp; These states can be
+described by one of several direction_1d_enum values:&nbsp; We make
+clockwise and counterclockwise winding orientation of polygons a
+direction 1d value instead of providing a separate winding_orientation
+data type.&nbsp; This is because winding orientation can be thought of
+as positive and negative directions in a 1d (although cyclic)
+space.&nbsp; We assign counterclockwise to be the positive direction of
+travel in the 1d cyclic space to conform with the mathematical
+convention frequently described as the "right hand rule" which assigns
+positive normal value to counterclockwise and negative normal value to
+clockwise as well as the common convention that counterclockwise
+polygon winding corresponds to positive polygonal regions where as
+clockwise polygon winding corresponds to hole (negative) polygonal
+regions.</p>
+ <p align="left"><font face="Courier New">enum direction_1d_enum
+{LOW = 0, HIGH = 1,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 LEFT = 0, RIGHT = 1,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 CLOCKWISE = 0, COUNTERCLOCKWISE = 1,<br />
@@ -154,383 +176,390 @@
 REVERSE = 0, FORWARD = 1,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 NEGATIVE = 0, POSITIVE = 1 };</font></p>
-<h2>Member Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New"><b>direction_1d</b>(direction_1d_enum
- val = LOW)</font></td>
- <td>Constructor defaults to LOW. </td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">direction_1d</font></b><font face="Courier New">(const
- direction_1d&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">direction_1d</font></b><font face="Courier New">(const
- direction_2d&amp; that)</font></td>
- <td>Down cast direction_2d, extracting out whether positive or negative</td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">direction_1d</font></b><font face="Courier New">(const
- direction_3d&amp; that)</font></td>
- <td>Down cast direction_3d, extracting out whether positive or negative</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_1d&amp; <b>operator=</b>(const direction_1d dir)</font></td>
- <td>Assignment</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_1d&amp; <b>operator==</b>(const direction_1d dir)
-const</font></td>
- <td>Equivalence</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_1d&amp; <b>operator!=</b>(const direction_1d dir)
-const</font></td>
- <td>Inequivalence</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">unsigned int <b>to_int</b>() const</font></td>
- <td>Convert to the integer enum value of current state to use as index.&nbsp;
- Auto-cast to int is disallowed for type safety reasons.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_1d&amp; <b>backward</b>()</font></td>
- <td>Inverts direction.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">int <b>get_sign</b>() const</font></td>
- <td>Returns positive 1 if positive direction and negative one if
- negative direction.</td>
- </tr>
- </tbody></table>
-<h2>orientation_2d</h2>
-
-<p>
-</p><p align="left">The orientation_2d data type has two possible states.&nbsp;
-These are the horizontal and vertical axis of a 2d Cartesian coordinate system.&nbsp;&nbsp;
-These states can be described by one of the two orientation_2d_enum values:</p>
-<p align="left"><font face="Courier New">enum orientation_2d_enum { HORIZONTAL =
-0, VERTICAL = 1 };</font></p>
-<h2>Member Functions</h2>
-<table id="table2" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">orientation_2</font></b><font face="Courier New"><b>d</b>(orientation_2d_enum
- val = HORIZONTAL)</font></td>
- <td>Constructor defaults to HORIZONTAL. </td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">orientation_2</font></b><font face="Courier New"><b>d</b>(const
- orientation_2d&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">explicit </font><b>
- <font face="Courier New">orientation_2</font></b><font face="Courier New"><b>d</b>(const
- direction_2d&amp; that)</font></td>
- <td>Down cast direction_2d, extracting out whether horizontal or
- vertical direction type</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">orientation_2d&amp; <b>operator=</b>(const orientation_2d
-o)</font></td>
- <td>Assignment</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">orientation_2d&amp; <b>operator==</b>(const orientation_2d
-o) const</font></td>
- <td>Equivalence</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">orientation_2d&amp; <b>operator!=</b>(const orientation_2d
-o) const</font></td>
- <td>Inequivalence</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">unsigned int <b>to_int</b>() const</font></td>
- <td>Convert to the integer enum value of current state to use as index.&nbsp;
- Auto-cast to int is disallowed for type safety reasons</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">orientation_2d&amp; <b>turn_90</b>()</font></td>
- <td>Change to orthogonal orientation</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">int <b>get_perpendicular</b>() const</font></td>
- <td>Returns orthogonal orientation</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">int <b>get_direction</b>(direction_1d dir) const</font></td>
- <td>Returns the positive or negative direction_2d depending on the value
- of dir</td>
- </tr>
- </tbody></table>
-<h2>direction_2d</h2>
-
-<p>
-</p><p align="left">The direction_2d data type has four possible states.&nbsp; These
-are the cardinal directions of the 2D Cartesian coordinate system.&nbsp;&nbsp;
-These states can be described by one of several direction_2d_enum values:</p>
-<p align="left"><font face="Courier New">enum direction_2d_enum { WEST = 0, EAST
-= 1, SOUTH = 2, NORTH = 3 };</font></p>
-<h2>Member Functions</h2>
-<table id="table3" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New"><b>direction_2d</b>(direction_2d_enum
- val = WEST)</font></td>
- <td>Constructor defaults to WEST. </td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">direction_2d</font></b><font face="Courier New">(const
- direction_2d&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_1d&amp; <b>operator=</b>(const direction_2d dir)</font></td>
- <td>Assignment</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_1d&amp; <b>operator==</b>(const direction_2d dir)
-const</font></td>
- <td>Equivalence</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_1d&amp; <b>operator!=</b>(const direction_2d dir)
-const</font></td>
- <td>Inequivalence</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">unsigned int <b>to_int</b>() const</font></td>
- <td>Convert to the integer enum value of current state to use as index.&nbsp;
- Auto-cast to int is disallowed for type safety reasons.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_2d&amp; <b>backward</b>()</font></td>
- <td>Inverts direction.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_2d&amp; <b>turn</b>(direction_1d dir)</font></td>
- <td>Changes to direction_2d to the left if dir is LOW, to the right if
- dir is HIGH</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_2d&amp; <b>left</b>()</font></td>
- <td>Changes to the direction_2d to the left</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_2d&amp; <b>right</b>()</font></td>
- <td>Changes to the direction_2d to the right</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">int <b>is_positive</b>() const</font></td>
- <td>Returns true if EAST or NORTH</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">int <b>is_negative</b>() const</font></td>
- <td>Returns true if WEST or SOUTH</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">int <b>get_sign</b>() const</font></td>
- <td>Returns positive 1 if positive direction and negative one if
- negative direction.</td>
- </tr>
- </tbody></table>
-<h2>orientation_3d</h2>
-
-<p>
-</p><p align="left">The orientation_3d data type has three possible states.&nbsp;
-These are the horizontal, vertical and proximal (x, y, z) axis of a 3d Cartesian
-coordinate system.&nbsp;&nbsp; These states can be described by one of the
-orientation_2d_enum values or by the orientation_3d_enum value:</p>
-<p align="left"><font face="Courier New">enum orientation_3d_enum { PROXIMAL = 2
-};</font></p>
-<h2>Member Functions</h2>
-<table id="table6" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">orientation_3</font></b><font face="Courier New"><b>d</b>(orientation_2d_enum
- val = HORIZONTAL)</font></td>
- <td>Constructor defaults to HORIZONTAL. </td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">orientation_3</font></b><font face="Courier New"><b>d</b>(const
- orientation_3d&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">explicit </font><b>
- <font face="Courier New">orientation_3</font></b><font face="Courier New"><b>d</b>(const
- direction_2d&amp; that)</font></td>
- <td>Extract out the orientation of the direction</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">explicit </font><b>
- <font face="Courier New">orientation_3</font></b><font face="Courier New"><b>d</b>(const
- direction_3d&amp; that)</font></td>
- <td>Extract out the orientation of the direction</td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">orientation_3</font></b><font face="Courier New"><b>d</b>(const
- orientation_2d&amp; that)</font></td>
- <td>Up cast orientation_2d to orientation_3d.</td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">orientation_3</font></b><font face="Courier New"><b>d</b>(const
- orientation_3d_enum&amp; that)</font></td>
- <td>Construct from constant value</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">orientation_3d&amp; <b>operator=</b>(const orientation_3d
-o)</font></td>
- <td>Assignment</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">orientation_3d&amp; <b>operator==</b>(const orientation_3d
-o) const</font></td>
- <td>Equivalence</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">orientation_3d&amp; <b>operator!=</b>(const orientation_3d
-o) const</font></td>
- <td>Inequivalence</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">unsigned int <b>to_int</b>() const</font></td>
- <td>Convert to the integer enum value of current state to use as index.&nbsp;
- Auto-cast to int is disallowed for type safety reasons</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">int <b>get_direction</b>(direction_1d dir) const</font></td>
- <td>Returns the positive or negative direction_2d depending on the value
- of dir</td>
- </tr>
- </tbody></table>
-<h2>direction_3d</h2>
-
-<p>
-</p><p align="left">The direction_3d data type has six possible states.&nbsp; These
-are the cardinal directions of the 3D Cartesian coordinate system.&nbsp;&nbsp;
-These states can be described by one of the direction_2d_enum values or the
-direction_3d_enum values:</p>
-<p align="left"><font face="Courier New">enum direction_3d_enum { DOWN = 4, UP =
-5 };</font></p>
-<h2>Member Functions</h2>
-<table id="table5" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New"><b>direction_3d</b>(direction_2d_enum
- val = WEST)</font></td>
- <td>Constructor defaults to LOW. </td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">direction_3d</font></b><font face="Courier New">(direction_3d_enum that)</font></td>
- <td>Construct from constant value</td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">direction_3d</font></b><font face="Courier New">(const
- direction_3d&amp; that)</font></td>
- <td>Copy construct</td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">direction_3d</font></b><font face="Courier New">(direction_2d that)</font></td>
- <td>Up cast direction_2d to direction_3d</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_3d&amp; <b>operator=</b>(const direction_3d dir)</font></td>
- <td>Assignment</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_3d&amp; <b>operator==</b>(const direction_3d dir)
-const</font></td>
- <td>Equivalence</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_2d&amp; <b>operator!=</b>(const direction_3d dir)
-const</font></td>
- <td>Inequivalence</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">unsigned int <b>to_int</b>() const</font></td>
- <td>Convert to the integer enum value of current state to use as index.&nbsp;
- Auto-cast to int is disallowed for type safety reasons.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">direction_1d&amp; <b>backward</b>()</font></td>
- <td>Inverts direction.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">int <b>is_positive</b>() const</font></td>
- <td>Returns true if direction is EAST, NORTH or UP.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">int <b>is_negative</b>() const</font></td>
- <td>Returns true if direction is WEST, SOUTH or DOWN</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">int <b>get_sign</b>() const</font></td>
- <td>Returns positive 1 if positive direction and negative one if
- negative direction.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table7" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <h2>Member Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New"><b>direction_1d</b>(direction_1d_enum
+val = LOW)</font></td>
+ <td>Constructor defaults to LOW. </td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">direction_1d</font></b><font
+ face="Courier New">(const direction_1d&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">direction_1d</font></b><font
+ face="Courier New">(const direction_2d&amp; that)</font></td>
+ <td>Down cast direction_2d, extracting out whether positive
+or negative</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">direction_1d</font></b><font
+ face="Courier New">(const direction_3d&amp; that)</font></td>
+ <td>Down cast direction_3d, extracting out whether positive
+or negative</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_1d&amp; <b>operator=</b>(const
+direction_1d dir)</font></td>
+ <td>Assignment</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_1d&amp; <b>operator==</b>(const
+direction_1d dir) const</font></td>
+ <td>Equivalence</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_1d&amp; <b>operator!=</b>(const
+direction_1d dir) const</font></td>
+ <td>Inequivalence</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">unsigned int <b>to_int</b>()
+const</font></td>
+ <td>Convert to the integer enum value of current state to
+use as index.&nbsp; Auto-cast to int is disallowed for type safety
+reasons.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_1d&amp; <b>backward</b>()</font></td>
+ <td>Inverts direction.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">int <b>get_sign</b>()
+const</font></td>
+ <td>Returns positive 1 if positive direction and negative
+one if negative direction.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h2>orientation_2d</h2>
+ <p> </p>
+ <p align="left">The orientation_2d data type has two possible
+states.&nbsp; These are the horizontal and vertical axis of a 2d
+Cartesian coordinate system.&nbsp;&nbsp; These states can be described
+by one of the two orientation_2d_enum values:</p>
+ <p align="left"><font face="Courier New">enum orientation_2d_enum
+{ HORIZONTAL = 0, VERTICAL = 1 };</font></p>
+ <h2>Member Functions</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">orientation_2</font></b><font
+ face="Courier New"><b>d</b>(orientation_2d_enum val = HORIZONTAL)</font></td>
+ <td>Constructor defaults to HORIZONTAL. </td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">orientation_2</font></b><font
+ face="Courier New"><b>d</b>(const orientation_2d&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">explicit </font><b>
+ <font face="Courier New">orientation_2</font></b><font
+ face="Courier New"><b>d</b>(const direction_2d&amp; that)</font></td>
+ <td>Down cast direction_2d, extracting out whether
+horizontal or vertical direction type</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">orientation_2d&amp;
+ <b>operator=</b>(const orientation_2d o)</font></td>
+ <td>Assignment</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">orientation_2d&amp;
+ <b>operator==</b>(const orientation_2d o) const</font></td>
+ <td>Equivalence</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">orientation_2d&amp;
+ <b>operator!=</b>(const orientation_2d o) const</font></td>
+ <td>Inequivalence</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">unsigned int <b>to_int</b>()
+const</font></td>
+ <td>Convert to the integer enum value of current state to
+use as index.&nbsp; Auto-cast to int is disallowed for type safety
+reasons</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">orientation_2d&amp;
+ <b>turn_90</b>()</font></td>
+ <td>Change to orthogonal orientation</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">int <b>get_perpendicular</b>()
+const</font></td>
+ <td>Returns orthogonal orientation</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">int <b>get_direction</b>(direction_1d
+dir) const</font></td>
+ <td>Returns the positive or negative direction_2d depending
+on the value of dir</td>
+ </tr>
+ </tbody>
+ </table>
+ <h2>direction_2d</h2>
+ <p> </p>
+ <p align="left">The direction_2d data type has four possible
+states.&nbsp; These are the cardinal directions of the 2D Cartesian
+coordinate system.&nbsp;&nbsp; These states can be described by one of
+several direction_2d_enum values:</p>
+ <p align="left"><font face="Courier New">enum direction_2d_enum {
+WEST = 0, EAST = 1, SOUTH = 2, NORTH = 3 };</font></p>
+ <h2>Member Functions</h2>
+ <table id="table3" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New"><b>direction_2d</b>(direction_2d_enum
+val = WEST)</font></td>
+ <td>Constructor defaults to WEST. </td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">direction_2d</font></b><font
+ face="Courier New">(const direction_2d&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_1d&amp; <b>operator=</b>(const
+direction_2d dir)</font></td>
+ <td>Assignment</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_1d&amp; <b>operator==</b>(const
+direction_2d dir) const</font></td>
+ <td>Equivalence</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_1d&amp; <b>operator!=</b>(const
+direction_2d dir) const</font></td>
+ <td>Inequivalence</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">unsigned int <b>to_int</b>()
+const</font></td>
+ <td>Convert to the integer enum value of current state to
+use as index.&nbsp; Auto-cast to int is disallowed for type safety
+reasons.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_2d&amp; <b>backward</b>()</font></td>
+ <td>Inverts direction.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_2d&amp; <b>turn</b>(direction_1d
+dir)</font></td>
+ <td>Changes to direction_2d to the left if dir is LOW, to
+the right if dir is HIGH</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_2d&amp; <b>left</b>()</font></td>
+ <td>Changes to the direction_2d to the left</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_2d&amp; <b>right</b>()</font></td>
+ <td>Changes to the direction_2d to the right</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">int <b>is_positive</b>()
+const</font></td>
+ <td>Returns true if EAST or NORTH</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">int <b>is_negative</b>()
+const</font></td>
+ <td>Returns true if WEST or SOUTH</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">int <b>get_sign</b>()
+const</font></td>
+ <td>Returns positive 1 if positive direction and negative
+one if negative direction.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h2>orientation_3d</h2>
+ <p> </p>
+ <p align="left">The orientation_3d data type has three possible
+states.&nbsp; These are the horizontal, vertical and proximal (x, y, z)
+axis of a 3d Cartesian coordinate system.&nbsp;&nbsp; These states can
+be described by one of the orientation_2d_enum values or by the
+orientation_3d_enum value:</p>
+ <p align="left"><font face="Courier New">enum orientation_3d_enum
+{ PROXIMAL = 2 };</font></p>
+ <h2>Member Functions</h2>
+ <table id="table6" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">orientation_3</font></b><font
+ face="Courier New"><b>d</b>(orientation_2d_enum val = HORIZONTAL)</font></td>
+ <td>Constructor defaults to HORIZONTAL. </td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">orientation_3</font></b><font
+ face="Courier New"><b>d</b>(const orientation_3d&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">explicit </font><b>
+ <font face="Courier New">orientation_3</font></b><font
+ face="Courier New"><b>d</b>(const direction_2d&amp; that)</font></td>
+ <td>Extract out the orientation of the direction</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">explicit </font><b>
+ <font face="Courier New">orientation_3</font></b><font
+ face="Courier New"><b>d</b>(const direction_3d&amp; that)</font></td>
+ <td>Extract out the orientation of the direction</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">orientation_3</font></b><font
+ face="Courier New"><b>d</b>(const orientation_2d&amp; that)</font></td>
+ <td>Up cast orientation_2d to orientation_3d.</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">orientation_3</font></b><font
+ face="Courier New"><b>d</b>(const orientation_3d_enum&amp; that)</font></td>
+ <td>Construct from constant value</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">orientation_3d&amp;
+ <b>operator=</b>(const orientation_3d o)</font></td>
+ <td>Assignment</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">orientation_3d&amp;
+ <b>operator==</b>(const orientation_3d o) const</font></td>
+ <td>Equivalence</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">orientation_3d&amp;
+ <b>operator!=</b>(const orientation_3d o) const</font></td>
+ <td>Inequivalence</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">unsigned int <b>to_int</b>()
+const</font></td>
+ <td>Convert to the integer enum value of current state to
+use as index.&nbsp; Auto-cast to int is disallowed for type safety
+reasons</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">int <b>get_direction</b>(direction_1d
+dir) const</font></td>
+ <td>Returns the positive or negative direction_2d depending
+on the value of dir</td>
+ </tr>
+ </tbody>
+ </table>
+ <h2>direction_3d</h2>
+ <p> </p>
+ <p align="left">The direction_3d data type has six possible
+states.&nbsp; These are the cardinal directions of the 3D Cartesian
+coordinate system.&nbsp;&nbsp; These states can be described by one of
+the direction_2d_enum values or the direction_3d_enum values:</p>
+ <p align="left"><font face="Courier New">enum direction_3d_enum {
+DOWN = 4, UP = 5 };</font></p>
+ <h2>Member Functions</h2>
+ <table id="table5" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New"><b>direction_3d</b>(direction_2d_enum
+val = WEST)</font></td>
+ <td>Constructor defaults to LOW. </td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">direction_3d</font></b><font
+ face="Courier New">(direction_3d_enum that)</font></td>
+ <td>Construct from constant value</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">direction_3d</font></b><font
+ face="Courier New">(const direction_3d&amp; that)</font></td>
+ <td>Copy construct</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">direction_3d</font></b><font
+ face="Courier New">(direction_2d that)</font></td>
+ <td>Up cast direction_2d to direction_3d</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_3d&amp; <b>operator=</b>(const
+direction_3d dir)</font></td>
+ <td>Assignment</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_3d&amp; <b>operator==</b>(const
+direction_3d dir) const</font></td>
+ <td>Equivalence</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_2d&amp; <b>operator!=</b>(const
+direction_3d dir) const</font></td>
+ <td>Inequivalence</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">unsigned int <b>to_int</b>()
+const</font></td>
+ <td>Convert to the integer enum value of current state to
+use as index.&nbsp; Auto-cast to int is disallowed for type safety
+reasons.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">direction_1d&amp; <b>backward</b>()</font></td>
+ <td>Inverts direction.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">int <b>is_positive</b>()
+const</font></td>
+ <td>Returns true if direction is EAST, NORTH or UP.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">int <b>is_negative</b>()
+const</font></td>
+ <td>Returns true if direction is WEST, SOUTH or DOWN</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">int <b>get_sign</b>()
+const</font></td>
+ <td>Returns positive 1 if positive direction and negative
+one if negative direction.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table7" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_point_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_point_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_point_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,409 +1,535 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
+<!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Point Concept</title>
-
-
-
-
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Point Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-
- </ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Point Concept</h1>
-
-<p>
-</p><p>
-The point concept tag is <font face="Courier New">
-point_concept</font></p><p>
-To register a user defined type as a model of point concept, specialize the
-geometry concept meta-function for that type.&nbsp; In the example below <span style="font-family: Courier New,Courier,monospace;">CPoint</span> is registered as a model of
-point&nbsp; concept.</p><p>
-<font face="Courier New">template &lt;&gt;<br />
-struct geometry_concept&lt;CPoint&gt; { typedef point_concept type; };</font></p><p>
-The semantic of a point is that it has an x and y
-coordinate.&nbsp; A std::pair&lt;int, int&gt;, boost::tuple&lt;int, int&gt; or boost::array&lt;int, 2&gt;
-could all be made models of point by simply providing indirect access to their
-elements through traits, however, these objects cannot be made a model of both
-point and interval in the same compilation unit, for obvious reason that
-duplicate specialization of the geometry_concept struct is illegal, but also
-because it would make overloading generic function by concept ambiguous if a
-type modeled more than one concept.</p><p>
-Below is shown the default point traits.&nbsp;
-Specialization of these traits is required for types that don't conform to the
-default behavior.</p>
- <p>
-template &lt;typename T&gt;<br />
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Point Concept</h1>
+ <p> </p>
+ <p> The point concept tag is <font face="Courier New">
+point_concept</font></p>
+ <p> To register a user defined type as a model of point concept,
+specialize the geometry concept meta-function for that type.&nbsp; In
+the example below <span
+ style="font-family: Courier New,Courier,monospace;">CPoint</span> is
+registered as a model of point&nbsp; concept.</p>
+ <p> <font face="Courier New">template &lt;&gt;<br />
+struct geometry_concept&lt;CPoint&gt; { typedef point_concept type; };</font></p>
+ <p> The semantic of a point is that it has an x and y
+coordinate.&nbsp; A std::pair&lt;int, int&gt;, boost::tuple&lt;int,
+int&gt; or boost::array&lt;int, 2&gt; could all be made models of point
+by simply providing indirect access to their elements through traits,
+however, these objects cannot be made a model of both point and
+interval in the same compilation unit, for obvious reason that
+duplicate specialization of the geometry_concept struct is illegal, but
+also because it would make overloading generic function by concept
+ambiguous if a type modeled more than one concept.</p>
+ <p> Below is shown the default point traits.&nbsp; Specialization
+of these traits is required for types that don't conform to the default
+behavior.</p>
+ <p style="font-family: Courier New,Courier,monospace;"> template
+&lt;typename T&gt;<br />
 struct point_traits {<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::coordinate_type coordinate_type;<br />
-<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static coordinate_type get(const T&amp; point,
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::coordinate_type
+coordinate_type;<br />
+ <br />
+&nbsp;&nbsp;&nbsp;&nbsp; static coordinate_type get(const T&amp; point,
 orientation_2d orient) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return point.get(orient);
-<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+point.get(orient);
+ <br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };<br />
-<br />
+ <br />
 template &lt;typename T&gt;<br />
 struct point_mutable_traits {<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static void set(T&amp; point, orientation_2d orient,
-typename point_traits&lt;T&gt;::coordinate_type value) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; point.set(orient, value);
-<br />
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::coordinate_type
+coordinate_type;<br />
+ <br />
+&nbsp;&nbsp;&nbsp;&nbsp; static void set(T&amp; point, orientation_2d
+orient, typename point_traits&lt;T&gt;::coordinate_type value) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+point.set(orient, value);
+ <br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static T construct(typename point_traits&lt;T&gt;::coordinate_type
-x_value, typename point_traits&lt;T&gt;::coordinate_type y_value) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return T(x_value, y_value);
-<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static T construct(typename
+point_traits&lt;T&gt;::coordinate_type x_value,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+typename point_traits&lt;T&gt;::coordinate_type y_value) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+T(x_value, y_value);
+ <br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</p>
-<p>
-Example code custom_point.cpp demonstrates
-how to map a
- user defined point class to the library point_concept</p><h2>Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename PointType&gt;<br />
- coordinate_type <b>get</b>(const PointType&amp; point,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <p> Example code custom_point.cpp
+demonstrates how to map a user defined point class to the library
+point_concept</p>
+ <h2>Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename PointType&gt;<br />
+coordinate_type <b>get</b>(const PointType&amp; point,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 orientation_2d)</font></td>
- <td>Expects a model of point. Returns
- the x or y coordinate of the point, depending on the orientation_2d
- value.<br />
-
+ <td>Expects a model of point. Returns the x or y coordinate
+of the point, depending on the orientation_2d value.<br />
 &nbsp;</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename PointType&gt;<br />
- void <b>set</b>(PointType&amp; point, orientation_2d,<br />
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename PointType&gt;<br />
+void <b>set</b>(PointType&amp; point, orientation_2d,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_type)</font></td>
- <td>Expects a model of point. Sets the x or y coordinate of the point to the coordinate, depending on
- the orientation_2d&nbsp; value. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename PointType&gt;<br />PointType <b>construct</b>(coordinate_type x,<br />
+ <td>Expects a model of point. Sets the x or y coordinate of
+the point to the coordinate, depending on the orientation_2d&nbsp;
+value. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename PointType&gt;<br />
+PointType <b>construct</b>(coordinate_type x,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 coordinate_type y)</font></td>
- <td>Construct an object that is a model of point given x and y
- coordinate values.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename PointType1, typename PointType2&gt;<br />
- PointType1&amp; <b>assign</b>(PointType1&amp; left,<br />
+ <td>Construct an object that is a model of point given x
+and y coordinate values.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename PointType1, typename PointType2&gt;<br />
+PointType1&amp; <b>assign</b>(PointType1&amp; left,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const PointType2&amp; right)</font></td>
- <td>Copies data from right object that models point into left object
- that models point.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename PointType1, typename PointType2&gt;<br />
- bool <b>equivalence</b>(const </font><font face="Courier New">PointType1</font><font face="Courier New">&amp; point1,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const </font><font face="Courier New">PointType2</font><font face="Courier New">&amp; point2)</font></td>
- <td>Given two objects that model point, compares and returns true if
- their x and y values are respectively equal to each other.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename PointType&gt;<br />
- coordinate_type <b>x</b>(const </font><font face="Courier New">PointType</font><font face="Courier New">&amp; point)</font></td>
- <td>Returns the x coordinate of an object that models point.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename </font><font face="Courier New">PointType</font><font face="Courier New">&gt;<br />
- coordinate_type <b>y</b>(const </font><font face="Courier New">PointType</font><font face="Courier New">&amp; point)</font></td>
- <td>Returns the y coordinate of an object that models point.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename </font><font face="Courier New">PointType</font><font face="Courier New">&gt;<br />
- void <b>x</b>(p</font><font face="Courier New">PointType</font><font face="Courier New">&amp; point, coordinate_type )</font></td>
- <td>Sets the x coordinate of the object that models point to the
- coordinate value.&nbsp; </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename </font><font face="Courier New">PointType</font><font face="Courier New">&gt;<br />
- void <b>y</b>(</font><font face="Courier New">PointType</font><font face="Courier New">&amp; point, coordinate_type )</font></td>
- <td>Sets the y coordinate of the object that models point to the
- coordinate value.&nbsp; </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename </font><font face="Courier New">PointType</font><font face="Courier New">&gt;<br />
- point_type&amp; <b>scale_up</b>(</font><font face="Courier New">PointType</font><font face="Courier New">&amp; point, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>Copies data from right object that models point into
+left object that models point.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename PointType1, typename PointType2&gt;<br />
+bool <b>equivalence</b>(const </font><font face="Courier New">PointType1</font><font
+ face="Courier New">&amp; point1,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const </font><font face="Courier New">PointType2</font><font
+ face="Courier New">&amp; point2)</font></td>
+ <td>Given two objects that model point, compares and
+returns true if their x and y values are respectively equal to each
+other.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename PointType&gt;<br />
+coordinate_type <b>x</b>(const </font><font face="Courier New">PointType</font><font
+ face="Courier New">&amp; point)</font></td>
+ <td>Returns the x coordinate of an object that models point.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">&gt;<br />
+coordinate_type <b>y</b>(const </font><font face="Courier New">PointType</font><font
+ face="Courier New">&amp; point)</font></td>
+ <td>Returns the y coordinate of an object that models point.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">&gt;<br />
+void <b>x</b>(p</font><font face="Courier New">PointType</font><font
+ face="Courier New">&amp; point, coordinate_type )</font></td>
+ <td>Sets the x coordinate of the object that models point
+to the coordinate value.&nbsp; </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">&gt;<br />
+void <b>y</b>(</font><font face="Courier New">PointType</font><font
+ face="Courier New">&amp; point, coordinate_type )</font></td>
+ <td>Sets the y coordinate of the object that models point
+to the coordinate value.&nbsp; </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">&gt;<br />
+point_type&amp; <b>scale_up</b>(</font><font face="Courier New">PointType</font><font
+ face="Courier New">&amp; point, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type factor)</font></td>
- <td>Multiplies x and y coordinate of an object that models point by
- unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename </font><font face="Courier New">PointType</font><font face="Courier New">&gt;<br />
- point_type&amp; <b>scale_down</b>(</font><font face="Courier New">PointType</font><font face="Courier New">&amp; point, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>Multiplies x and y coordinate of an object that models
+point by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">&gt;<br />
+point_type&amp; <b>scale_down</b>(</font><font face="Courier New">PointType</font><font
+ face="Courier New">&amp; point, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type factor)</font></td>
- <td>Divides x and y coordinate of an object that models point by
- unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename </font><font face="Courier New">PointType</font><font face="Courier New">,
- typename scaling_type&gt;<br />
- point_type&amp; <b>scale</b>(</font><font face="Courier New">PointType</font><font face="Courier New">&amp; point,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- const scaling_type&amp; factor) </font></td>
- <td>Calls the scale member function of scaling type on the x and y value
- of an object that models point and sets the point to the scaled values.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename </font><font face="Courier New">PointType</font><font face="Courier New">,
- typename transform_type&gt;<br />
- point_type&amp; <b>transform</b>(</font><font face="Courier New">PointType</font><font face="Courier New">&amp; point,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- const transform_type&amp; transform) </font></td>
- <td>Calls the transform member function of transform type on the x and y
- value of an object that models point and sets the point to the
- transformed values.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename </font><font face="Courier New">PointType</font><font face="Courier New">&gt;<br />
- point_type&amp; <b>move</b>(</font><font face="Courier New">PointType</font><font face="Courier New">&amp; point, orientation_2d,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- coordinate_difference displacement)</font></td>
- <td>Adds displacement value to the coordinate of an object that models
- point indicated by the orientation_2d.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename </font><font face="Courier New">PointType</font><font face="Courier New">1, typename PointType2&gt;<br />
- </font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">&amp; <b>convolve</b>(</font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">&amp; a,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const </font><font face="Courier New">PointType2</font><font face="Courier New">&amp; b)</font></td>
- <td>Adds x coordinate of b to x coordinate of a and adds y coordinate of
- b to y coordinate of a.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename </font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">, typename </font><font face="Courier New">PointType</font><span style="font-family: Courier New;">2</span><font face="Courier New">&gt;<br />
- </font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">,</font><font face="Courier New">&amp; <b>deconvolve</b>(</font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">&amp; a,<br />
+ <td>Divides x and y coordinate of an object that models
+point by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">, typename scaling_type&gt;<br />
+point_type&amp; <b>scale</b>(</font><font face="Courier New">PointType</font><font
+ face="Courier New">&amp; point,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const scaling_type&amp; factor) </font></td>
+ <td>Calls the scale member function of scaling type on the
+x and y value of an object that models point and sets the point to the
+scaled values.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">, typename transform_type&gt;<br />
+point_type&amp; <b>transform</b>(</font><font face="Courier New">PointType</font><font
+ face="Courier New">&amp; point,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const transform_type&amp; transform) </font></td>
+ <td>Calls the transform member function of transform type
+on the x and y value of an object that models point and sets the point
+to the transformed values.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">&gt;<br />
+point_type&amp; <b>move</b>(</font><font face="Courier New">PointType</font><font
+ face="Courier New">&amp; point, orientation_2d,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+coordinate_difference displacement)</font></td>
+ <td>Adds displacement value to the coordinate of an object
+that models point indicated by the orientation_2d.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">1, typename PointType2&gt;<br />
+ </font><font face="Courier New">PointType</font><font
+ face="Courier New">1</font><font face="Courier New">&amp; <b>convolve</b>(</font><font
+ face="Courier New">PointType</font><font face="Courier New">1</font><font
+ face="Courier New">&amp; a,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const </font><font face="Courier New">PointType2</font><font
+ face="Courier New">&amp; b)</font></td>
+ <td>Adds x coordinate of b to x coordinate of a and adds y
+coordinate of b to y coordinate of a.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">1</font><font face="Courier New">, typename </font><font
+ face="Courier New">PointType</font><span
+ style="font-family: Courier New;">2</span><font face="Courier New">&gt;<br />
+ </font><font face="Courier New">PointType</font><font
+ face="Courier New">1</font><font face="Courier New">,</font><font
+ face="Courier New">&amp; <b>deconvolve</b>(</font><font
+ face="Courier New">PointType</font><font face="Courier New">1</font><font
+ face="Courier New">&amp; a,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-const </font><font face="Courier New">PointType</font><span style="font-family: Courier New;">2</span><font face="Courier New">&gt;</font><font face="Courier New">&amp; b)</font></td>
- <td>Subtracts x coordinate of b from x coordinate of a and subtracts y
- coordinate of b from y coordinate of a. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename </font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">, typename </font><font face="Courier New">PointType</font><span style="font-family: Courier New;">2</span><font face="Courier New">&gt;<br />distance_type <b>euclidean_distance</b>(<br />
-&nbsp;&nbsp;&nbsp; const </font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">&amp;, const </font><font face="Courier New">PointType</font><span style="font-family: Courier New;">2</span><font face="Courier New">&amp;)</font></td>
- <td>Returns the distance from an object that models point to a second
- object that models point.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;</font><font face="Courier New">typename </font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">, typename </font><font face="Courier New">PointType</font><span style="font-family: Courier New;">2</span><font face="Courier New">&gt;<br />
- coordinate_difference <b>euclidean_distance</b>(<br />
-&nbsp;&nbsp;&nbsp; const </font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">&amp;, </font><font face="Courier New">const PointType</font><span style="font-family: Courier New;">2&amp;,</span><font face="Courier New"> orientation_2d)</font></td>
- <td>Returns the distance from an object that models point to a
- coordinate in the given orientation_2d.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;</font><font face="Courier New">typename </font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">, typename </font><font face="Courier New">PointType</font><span style="font-family: Courier New;">2</span><font face="Courier New">&gt;<br />
- coordinate_difference <b>manhattan_distance</b>(<br />
-&nbsp;&nbsp;&nbsp; </font><font face="Courier New">const </font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">&amp;, </font><font face="Courier New">const PointType</font><span style="font-family: Courier New;">2&amp;</span><font face="Courier New">)</font></td>
- <td>Returns the distance in x plus the distance in y from an object that
- models point to a second object that models point.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;</font><font face="Courier New">typename </font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">, typename </font><font face="Courier New">PointType</font><span style="font-family: Courier New;">2</span><font face="Courier New">&gt;<br />
- coordinate_difference <b>distance_squared</b>(<br />
-&nbsp;&nbsp;&nbsp; </font><font face="Courier New">const </font><font face="Courier New">PointType</font><font face="Courier New">1</font><font face="Courier New">&amp;, </font><font face="Courier New">const PointType</font><span style="font-family: Courier New;">2&amp;</span><font face="Courier New">)</font></td>
- <td>Returns the square of the distance in x plus the square of the
- distance in y from an object that models point to a second object that
- models point.</td>
- </tr>
-</tbody></table>
-<h1>Point Data</h1>
-
-<p>
-</p><p>The library provides a model of point concept declared
-<font face="Courier New">
-template&lt;typename T&gt; point_data </font>where T is the coordinate type.</p>
-<p>This data type is used internally when a point is needed and is available to
-the library user who finds it convenient to use a library point data type
-instead of providing their own.&nbsp; The data type is implemented to be
-convenient to use with the library traits.</p>
-<p>Example code point_usage.cpp demonstrates using the
- library provided point data type and functions</p>
-<h2>Members</h2>
-<table id="table2" border="1" width="100%">
- <tbody>
- <tr>
- <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
- <td>T</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>point_data</b>()</font></td>
- <td>Default constructs the two coordinate
- values of the point.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>point_data</b>(T x, T y)</font></td>
- <td>Constructs an interval with two
- coordinates.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>point_data</b>(const point_data&amp;
- that)</font></td>
- <td>Copy construct</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">point_data&amp; <b>operator=</b>(const
- point_data&amp; that)</font></td>
- <td>Assignment operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename PointType&gt;<br />
+const </font><font face="Courier New">PointType</font><span
+ style="font-family: Courier New;">2</span><font face="Courier New">&gt;</font><font
+ face="Courier New">&amp; b)</font></td>
+ <td>Subtracts x coordinate of b from x coordinate of a and
+subtracts y coordinate of b from y coordinate of a. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">1</font><font face="Courier New">, typename </font><font
+ face="Courier New">PointType</font><span
+ style="font-family: Courier New;">2</span><font face="Courier New">&gt;<br />
+distance_type <b>euclidean_distance</b>(<br />
+&nbsp;&nbsp;&nbsp; const </font><font face="Courier New">PointType</font><font
+ face="Courier New">1</font><font face="Courier New">&amp;, const </font><font
+ face="Courier New">PointType</font><span
+ style="font-family: Courier New;">2</span><font face="Courier New">&amp;)</font></td>
+ <td>Returns the distance from an object that models point
+to a second object that models point.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template &lt;</font><font
+ face="Courier New">typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">1</font><font face="Courier New">, typename </font><font
+ face="Courier New">PointType</font><span
+ style="font-family: Courier New;">2</span><font face="Courier New">&gt;<br />
+coordinate_difference <b>euclidean_distance</b>(<br />
+&nbsp;&nbsp;&nbsp; const </font><font face="Courier New">PointType</font><font
+ face="Courier New">1</font><font face="Courier New">&amp;, </font><font
+ face="Courier New">const PointType</font><span
+ style="font-family: Courier New;">2&amp;,</span><font
+ face="Courier New"> orientation_2d)</font></td>
+ <td>Returns the distance from an object that models point
+to a coordinate in the given orientation_2d.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template &lt;</font><font
+ face="Courier New">typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">1</font><font face="Courier New">, typename </font><font
+ face="Courier New">PointType</font><span
+ style="font-family: Courier New;">2</span><font face="Courier New">&gt;<br />
+coordinate_difference <b>manhattan_distance</b>(<br />
+&nbsp;&nbsp;&nbsp; </font><font face="Courier New">const </font><font
+ face="Courier New">PointType</font><font face="Courier New">1</font><font
+ face="Courier New">&amp;, </font><font face="Courier New">const
+PointType</font><span style="font-family: Courier New;">2&amp;</span><font
+ face="Courier New">)</font></td>
+ <td>Returns the distance in x plus the distance in y from
+an object that models point to a second object that models point.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template &lt;</font><font
+ face="Courier New">typename </font><font face="Courier New">PointType</font><font
+ face="Courier New">1</font><font face="Courier New">, typename </font><font
+ face="Courier New">PointType</font><span
+ style="font-family: Courier New;">2</span><font face="Courier New">&gt;<br />
+coordinate_difference <b>distance_squared</b>(<br />
+&nbsp;&nbsp;&nbsp; </font><font face="Courier New">const </font><font
+ face="Courier New">PointType</font><font face="Courier New">1</font><font
+ face="Courier New">&amp;, </font><font face="Courier New">const
+PointType</font><span style="font-family: Courier New;">2&amp;</span><font
+ face="Courier New">)</font></td>
+ <td>Returns the square of the distance in x plus the square
+of the distance in y from an object that models point to a second
+object that models point.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Point Data</h1>
+ <p> </p>
+ <p>The library provides a model of point concept declared
+ <font face="Courier New">template&lt;typename T&gt; point_data </font>where
+T is the coordinate type.</p>
+ <p>This data type is used internally when a point is needed and
+is available to the library user who finds it convenient to use a
+library point data type instead of providing their own.&nbsp; The data
+type is implemented to be convenient to use with the library traits.</p>
+ <p>Example code point_usage.cpp
+demonstrates using the library provided point data type and functions</p>
+ <h2>Members</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
+ <td>T</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>point_data</b>()</font></td>
+ <td>Default constructs the two coordinate values of the
+point.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>point_data</b>(T
+x, T y)</font></td>
+ <td>Constructs an interval with two coordinates.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>point_data</b>(const
+point_data&amp; that)</font></td>
+ <td>Copy construct</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">point_data&amp; <b>operator=</b>(const
+point_data&amp; that)</font></td>
+ <td>Assignment operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename PointType&gt;<br />
 point_data&amp; <b>operator=</b>(const PointType&amp; that) const</font></td>
- <td>Assign from an object that is a model of point.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool<b>
- operator==</b>(const </font><font face="Courier New">point_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Equality operator overload.<br />
-</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool<b>
- operator!=</b>(const </font><font face="Courier New">point_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Inequality operator overload.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b> </b>bool<b>
- operator&lt;</b>(const </font><font face="Courier New">point_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Compares y coordinates then x coordinates to break ties.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b> </b>bool<b>
- operator&lt;=</b>(const </font><font face="Courier New">point_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Compares y coordinates then x coordinates to break ties.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b> </b>bool<b>
- operator&gt;</b>(const </font><font face="Courier New">point_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Compares low coordinates then high coordinates to break ties.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool<b>
- operator&gt;=</b>(const </font><font face="Courier New">point_data</font><font face="Courier New">&amp; that) const</font></td>
- <td>Compares low coordinates then high coordinates to break ties.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">T <b>get</b>(orientation_2d
- orient) const</font></td>
- <td>Get the coordinate in the given orientation.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">T <b>x</b>() const</font></td>
- <td>Get the coordinate in the horizontal orientation.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">T <b>y</b>() const</font></td>
- <td>Get the coordinate in the vertical orientation.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">void <b>set</b>(orientation_2d
- orient, T value)</font></td>
- <td>Sets the coordinate in the given orientation to the value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">void <b>x</b>(T value)</font></td>
- <td>Sets the coordinate in the horizontal orientation to the value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">void <b>y</b>(T value)</font></td>
- <td>Sets the coordinate in the vertical orientation to the value.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table3" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Assign from an object that is a model of point.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool<b> operator==</b>(const
+ </font><font face="Courier New">point_data</font><font
+ face="Courier New">&amp; that) const</font></td>
+ <td>Equality operator overload.<br />
+ </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool<b> operator!=</b>(const
+ </font><font face="Courier New">point_data</font><font
+ face="Courier New">&amp; that) const</font></td>
+ <td>Inequality operator overload.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b> </b>bool<b>
+operator&lt;</b>(const </font><font face="Courier New">point_data</font><font
+ face="Courier New">&amp; that) const</font></td>
+ <td>Compares y coordinates then x coordinates to break ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b> </b>bool<b>
+operator&lt;=</b>(const </font><font face="Courier New">point_data</font><font
+ face="Courier New">&amp; that) const</font></td>
+ <td>Compares y coordinates then x coordinates to break ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b> </b>bool<b>
+operator&gt;</b>(const </font><font face="Courier New">point_data</font><font
+ face="Courier New">&amp; that) const</font></td>
+ <td>Compares low coordinates then high coordinates to break
+ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool<b>
+operator&gt;=</b>(const </font><font face="Courier New">point_data</font><font
+ face="Courier New">&amp; that) const</font></td>
+ <td>Compares low coordinates then high coordinates to break
+ties.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">T <b>get</b>(orientation_2d
+orient) const</font></td>
+ <td>Get the coordinate in the given orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">T <b>x</b>() const</font></td>
+ <td>Get the coordinate in the horizontal orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">T <b>y</b>() const</font></td>
+ <td>Get the coordinate in the vertical orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>set</b>(orientation_2d
+orient, T value)</font></td>
+ <td>Sets the coordinate in the given orientation to the
+value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>x</b>(T
+value)</font></td>
+ <td>Sets the coordinate in the horizontal orientation to
+the value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>y</b>(T
+value)</font></td>
+ <td>Sets the coordinate in the vertical orientation to the
+value.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table3" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_polygon_45_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_polygon_45_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_polygon_45_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,376 +1,432 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Polygon 45 Concept</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Polygon 45 Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Polygon 45 Concept</h1>
-
-<p>
-</p><p>The polygon_45 concept tag is <font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Polygon 45 Concept</h1>
+ <p> </p>
+ <p>The polygon_45 concept tag is <font face="Courier New">
 polygon_45_concept</font></p>
-<p>
-To register a user defined type as a model of
-<font face="Times New Roman">polygon_45 </font>concept, specialize the
-geometry concept meta-function for that type.&nbsp; In the example below CPolygon45 is registered as a model of
-polygon_45&nbsp; concept.</p><p>
-<font face="Courier New">template &lt;&gt;<br />
-struct geometry_concept&lt;CPolygon45&gt; { typedef polygon_45_concept type; };</font></p><p>
-<font face="Times New Roman">The semantic of a polygon_45 is that it can provide
-iterators over the points that represent its vertices, angles formed as these
-vertices must be multiple of 45-degree relative to the coordinate axis.&nbsp; It
-is acceptable to have the last edge explict with the first and last point equal
-to each other or implied by this segement that would connect the first and last
-point.&nbsp; A mutable polygon_45 must also be able to set its geometry based on
-an interator range over such points.&nbsp;&nbsp; A std::vector&lt;point_data&lt;int&gt; &gt;
-or std::list&lt;point_data&lt;int&gt; &gt;
-could be made models of polygon_45_concept by simply providing access to their
-iterators through traits.&nbsp; Library functions that create polygon objects
-require that those objects provide a default constructor.</font></p><p>
-<font face="Times New Roman">Below is shown the default polygon traits.&nbsp;
-Specialization of these traits is required for types that don't conform to the
-default behavior.&nbsp; Note that these traits are also used by several other
-polygon concepts through SFINAE enable template parameter.&nbsp; The SFINAE enable
-parameter also allows the library to provide default specialization that work
-for any object that models the 90 degree polygon concepts.</font></p><p>
-<font face="Courier New">template &lt;typename T, typename enable = gtl_yes&gt;<br />
+ <p> To register a user defined type as a model of <font
+ face="Times New Roman">polygon_45 </font>concept, specialize the
+geometry concept meta-function for that type.&nbsp; In the example
+below CPolygon45 is registered as a model of polygon_45&nbsp; concept.</p>
+ <p> <font face="Courier New">template &lt;&gt;<br />
+struct geometry_concept&lt;CPolygon45&gt; { typedef polygon_45_concept
+type; };</font></p>
+ <p> <font face="Times New Roman">The semantic of a polygon_45 is
+that it can provide iterators over the points that represent its
+vertices, angles formed as these vertices must be multiple of 45-degree
+relative to the coordinate axis.&nbsp; It is acceptable to have the
+last edge explict with the first and last point equal to each other or
+implied by this segement that would connect the first and last
+point.&nbsp; A mutable polygon_45 must also be able to set its geometry
+based on an interator range over such points.&nbsp;&nbsp; A
+std::vector&lt;point_data&lt;int&gt; &gt; or
+std::list&lt;point_data&lt;int&gt; &gt; could be made models of
+polygon_45_concept by simply providing access to their iterators
+through traits.&nbsp; Library functions that create polygon objects
+require that those objects provide a default constructor.</font></p>
+ <p> <font face="Times New Roman">Below is shown the default
+polygon traits.&nbsp; Specialization of these traits is required for
+types that don't conform to the default behavior.&nbsp; Note that these
+traits are also used by several other polygon concepts through SFINAE
+enable template parameter.&nbsp; The SFINAE enable parameter also
+allows the library to provide default specialization that work for any
+object that models the 90 degree polygon concepts.</font></p>
+ <p><font face="Courier New">template &lt;typename T, typename
+enable = gtl_yes&gt;<br />
 struct polygon_traits {};<br />
-<br />
+ <br />
 template &lt;typename T&gt;<br />
 struct polygon_traits&lt;T, <br />
 &nbsp; typename gtl_or_4&lt;<br />
-&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename geometry_concept&lt;T&gt;::type,
-polygon_concept&gt;::type,<br />
-&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename geometry_concept&lt;T&gt;::type,
-polygon_45_concept&gt;::type,<br />
-&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename geometry_concept&lt;T&gt;::type,
-polygon_with_holes_concept&gt;::type,<br />
-&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename geometry_concept&lt;T&gt;::type,
-polygon_45_with_holes_concept&gt;::type<br />
+&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename
+geometry_concept&lt;T&gt;::type, polygon_concept&gt;::type,<br />
+&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename
+geometry_concept&lt;T&gt;::type, polygon_45_concept&gt;::type,<br />
+&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename
+geometry_concept&lt;T&gt;::type, polygon_with_holes_concept&gt;::type,<br />
+&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename
+geometry_concept&lt;T&gt;::type, polygon_45_with_holes_concept&gt;::type<br />
 &nbsp; &gt;::type&gt; {<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::coordinate_type coordinate_type;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::iterator_type iterator_type;<br />
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::coordinate_type
+coordinate_type;<br />
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::iterator_type
+iterator_type;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::point_type point_type;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_type begin_points(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_type begin_points(const
+T&amp; t) {<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.begin();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_type end_points(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_type end_points(const
+T&amp; t) {<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.end();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size(const T&amp;
+t) {<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.size();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline winding_direction winding(const T&amp; t) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return unknown_winding;<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline winding_direction winding(const
+T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+unknown_winding;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</font></p>
-<p><font face="Courier New">template &lt;typename T, typename enable = void&gt;<br />
+ <p><font face="Courier New">template &lt;typename T, typename
+enable = void&gt;<br />
 struct polygon_mutable_traits {<br />
 &nbsp;&nbsp;&nbsp;&nbsp; template &lt;typename iT&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_points(T&amp; t, iT input_begin, iT
-input_end) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.set(input_begin,
-input_end);<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_points(T&amp; t, iT
+input_begin, iT input_end) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+t.set(input_begin, input_end);<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</font></p>
-<p>An object that is a model of <font face="Courier New">
-polygon_45_concept</font> can be viewed as a model of any of its
-refinements if it is determined at runtime to conform to the restriction of
-those concepts.&nbsp; This concept casting is accomplished through the
-<font face="Courier New">view_as&lt;&gt;()</font> function.</p>
-<p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_45_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_90_concept&gt;(polygon_45_object)</font></p>
-<p>The return value of <font face="Courier New">view_as&lt;&gt;()</font> can be
-passed into any interface that expects an object of the conceptual type
-specified in its template parameter.</p>
-<h2>Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_45.&nbsp;
- Returns the begin iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_45.&nbsp;
- Returns the end iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- iterator&gt;<br />
- void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_45.&nbsp;&nbsp;
- Sets the polygon to the point data range [b,e) that corresponds to
- vertices of a polygon.&nbsp; Non-45 edges between successive input
- points is disallowed.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- unsigned int <b>size</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Returns the number of edges in the
- polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
- <td>Copies data from right object that models polygon_45 into left object
- that models polygon_45.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename point_type&gt;<br />
- bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch=true)</font></td>
- <td>Given an object that models polygon_45 and an object that models
- point, returns true
- if the polygon contains the point.&nbsp; If the consider_touch
- flag is true will return true if the point lies along the boundary of
- the polygon.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br />
- template &lt;typename T, typename point_type&gt;<br />
- void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
- <td>Sets object that models point to the center point of the bounding
- box of an object that models polygon_45.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename rectangle_type&gt;<br />
- bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
- <td>Sets object that models rectangle to the bounding box of an object
- that models polygon_45 and returns true.&nbsp; Returns false and leaves
- bbox unchanged if polygon is empty.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- area_type <b>area</b>(const T&amp; polygon)</font></td>
- <td>Returns the area of an object
- that models polygon_45.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
- <td>Returns the winding direction of an object
- that models polygon_45, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.&nbsp;
- Complexity depends upon winding trait.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_distance <b>perimeter</b>(const T&amp; polygon)</font></td>
- <td>Returns the perimeter length of an object
- that models polygon_45.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename transform_type&gt;<br />
- T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
- <td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
- transforming its vertices.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales up coordinate of an object that models
- polygon_45 by unsigned factor.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales down coordinates of an object that models
- polygon_45 by unsigned factor.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, scaling_type&gt;<br />
- T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
- <td>Scales coordinates of an object that models polygon_45 by floating
- point factor.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference displacement)</font></td>
- <td>Adds displacement value to coordinate indicated by orientation_2d of
- vertices of an object that models polygon_45.&nbsp; Linear wrt.
- vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename polygon_type, typename point_type&gt;<br />
- polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <p>An object that is a model of <font face="Courier New">
+polygon_45_concept</font> can be viewed as a model of any of its
+refinements if it is determined at runtime to conform to the
+restriction of those concepts.&nbsp; This concept casting is
+accomplished through the
+ <font face="Courier New">view_as&lt;&gt;()</font> function.</p>
+ <p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_45_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_90_concept&gt;(polygon_45_object)</font></p>
+ <p>The return value of <font face="Courier New">view_as&lt;&gt;()</font>
+can be passed into any interface that expects an object of the
+conceptual type specified in its template parameter.</p>
+ <h2>Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_45.&nbsp; Returns the begin iterator over the range of points
+that correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_45.&nbsp; Returns the end iterator over the range of points
+that correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename iterator&gt;<br />
+void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_45.&nbsp;&nbsp; Sets the polygon to the point data range [b,e)
+that corresponds to vertices of a polygon.&nbsp; Non-45 edges between
+successive input points is disallowed.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+unsigned int <b>size</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Returns the number of
+edges in the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
+ <td>Copies data from right object that models polygon_45
+into left object that models polygon_45.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch=true)</font></td>
+ <td>Given an object that models polygon_45 and an object
+that models point, returns true if the polygon contains the
+point.&nbsp; If the consider_touch flag is true will return true if the
+point lies along the boundary of the polygon.&nbsp; Linear wrt.
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">// get the center
+coordinate<br />
+template &lt;typename T, typename point_type&gt;<br />
+void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
+ <td>Sets object that models point to the center point of
+the bounding box of an object that models polygon_45.&nbsp; Linear wrt.
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename rectangle_type&gt;<br />
+bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
+ <td>Sets object that models rectangle to the bounding box
+of an object that models polygon_45 and returns true.&nbsp; Returns
+false and leaves bbox unchanged if polygon is empty.&nbsp; Linear wrt.
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+area_type <b>area</b>(const T&amp; polygon)</font></td>
+ <td>Returns the area of an object that models
+polygon_45.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
+ <td>Returns the winding direction of an object that models
+polygon_45, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.&nbsp; Complexity
+depends upon winding trait.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_distance <b>perimeter</b>(const T&amp; polygon)</font></td>
+ <td>Returns the perimeter length of an object that models
+polygon_45.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename transform_type&gt;<br />
+T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
+ <td>Applies transform() on the vertices of polygon and sets
+the polygon to that described by the result of transforming its
+vertices.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales up coordinate of an object that models
+polygon_45 by unsigned factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales down coordinates of an object that models
+polygon_45 by unsigned factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, scaling_type&gt;<br />
+T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
+ <td>Scales coordinates of an object that models polygon_45
+by floating point factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference
+displacement)</font></td>
+ <td>Adds displacement value to coordinate indicated by
+orientation_2d of vertices of an object that models polygon_45.&nbsp;
+Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_type, typename point_type&gt;<br />
+polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const point_type&amp; point)</font></td>
- <td>Convolves coordinate values of point with vertices of an
- object that models polygon_45.&nbsp; Linear wrt. vertices.</td>
- </tr>
- </tbody></table>
- <h1>Polygon 45 Data</h1>
-
-<p>
-</p><p>The library provides a model of polygon 45 concept declared
-<font face="Courier New">
-template&lt;typename T&gt; polygon_45_data </font>where T is the coordinate type.</p>
-<p>This data type is used internally when a 45-degree polygon is needed and is
-available to the library user who finds it convenient to use a library polygon
-data type instead of providing their own.&nbsp; The data type is implemented to
-be convenient to use with the library traits.</p>
-<h2>Members</h2>
-<table id="table2" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
- <td><font face="Times New Roman">polygon_45_concept</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
- <td><font face="Times New Roman">T</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
- <td>Iterator over vertices point_data&lt;T&gt; vertices of polygon</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_45_data</b>()</font></td>
- <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_45_data</b>(const
- polygon_45_data&amp; that)</font></td>
- <td><font face="Times New Roman">Copy construct</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_45_data&amp; <b>operator=</b>(const
- polygon_45_data&amp; that)</font></td>
- <td>Assignment operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T2&gt;<b>&nbsp;
- <br /> </b>polygon_45_data&amp; <b>operator=</b>(const T2&amp; that) const</font></td>
- <td>Assign from an object that is a model of polygon 45.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
- const</font></td>
- <td>Get the begin iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>end</b>()
- const</font></td>
- <td>Get the end iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">std::size_t <b>size</b>() const</font></td>
- <td>Get the number of elements in the sequence stored to the polygon,
- usually equal to the number of edges of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<b>&nbsp;
- <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
- <td>Sets the polygon to the iterator range of points.&nbsp; No check is
- performed to ensure the points describe corners that are multiples of 45
- degrees relative to the coordinate axis.</td>
- </tr>
-</tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table3" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Convolves coordinate values of point with vertices of
+an object that models polygon_45.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Polygon 45 Data</h1>
+ <p> </p>
+ <p>The library provides a model of polygon 45 concept declared
+ <font face="Courier New">template&lt;typename T&gt;
+polygon_45_data </font>where T is the coordinate type.</p>
+ <p>This data type is used internally when a 45-degree polygon is
+needed and is available to the library user who finds it convenient to
+use a library polygon data type instead of providing their own.&nbsp;
+The data type is implemented to be convenient to use with the library
+traits.</p>
+ <h2>Members</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
+ <td><font face="Times New Roman">polygon_45_concept</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
+ <td><font face="Times New Roman">T</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
+ <td>Iterator over vertices point_data&lt;T&gt; vertices of
+polygon</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_45_data</b>()</font></td>
+ <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_45_data</b>(const
+polygon_45_data&amp; that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_45_data&amp;
+ <b>operator=</b>(const polygon_45_data&amp; that)</font></td>
+ <td>Assignment operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b>&nbsp; <br />
+ </b>polygon_45_data&amp; <b>operator=</b>(const T2&amp;
+that) const</font></td>
+ <td>Assign from an object that is a model of polygon 45.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
+const</font></td>
+ <td>Get the begin iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>end</b>()
+const</font></td>
+ <td>Get the end iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">std::size_t <b>size</b>()
+const</font></td>
+ <td>Get the number of elements in the sequence stored to
+the polygon, usually equal to the number of edges of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<b>&nbsp; <br />
+ </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <td>Sets the polygon to the iterator range of points.&nbsp;
+No check is performed to ensure the points describe corners that are
+multiples of 45 degrees relative to the coordinate axis.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table3" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_polygon_45_set_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_polygon_45_set_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_polygon_45_set_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,758 +1,842 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Polygon 45 Set Concept</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Polygon 45 Set Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li>Polygon 45 Set Concept</li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Polygon 45 Set Concept</h1>
-
-<p>
-</p><p>The polygon_45_set concept tag is <font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Polygon 45 Set Concept</h1>
+ <p> </p>
+ <p>The polygon_45_set concept tag is <font face="Courier New">
 polygon_45_set_concept</font></p>
-<p>
-<font face="Times New Roman">The semantic of a polygon_45_set is zero or more
-geometry regions which have angles at the vertices that are multiples of
-45-degrees relative to the coordinate axis.&nbsp; A Polygon 45 Set Concept makes
-no sense in floating point, but currently does not provide a static assert to
-prevent it from being used with floating point coordinates.&nbsp; The result of
-such use is undefined.&nbsp; When the intersection of two 45 degree edges
-results in a vertex that is off the integer grid that case is handled by
-inserting a unit length edge between the two 45 degree edges near the off grid
-intersection point.&nbsp; In the case that data represented contains no
-45-degree angles and is Manhattan a runtime check will default to the Manhattan
-algorithm.&nbsp; The results of which are identical to what the 45-degree
-algorithm would do, but obtained more efficiently.</font></p><p>
-<font face="Times New Roman">The motivation for providing the polygon_45_set is
-to extend the special case of Manhattan geometry capability of the library to
-encompass the slightly less common, but still important special case of geometry
-that is described by angles that are multiples of 45-degress with respect to the
-coordinate axis.&nbsp; This simplifies the implementation of geometry algorithms
-and affords many opportunities for optimization.&nbsp; 45-degree algorithms can
-be 50X faster than arbitrary angle algorithms and are required to provide a
-complete feature set that meets the performance requirements of application
-domains in which Manhattan and 45-degree geometry are a common special case.</font></p><p>Users are recommended to use std::vector and std::list of user defined polygons
-or library provided polygon_45_set_data&lt;coordinate_type&gt; objects.&nbsp; Lists
-and vectors of models of polygon_45_concept or polygon_45_with_holes_concept are automatically models of polygon_45_set_concept.</p>
-<p>An object that is a model of <font face="Courier New">
-polygon_45_set_concept</font> can be viewed as a model of <font face="Courier New">
-polygon_90_set_concept</font> if it is determined at runtime to conform to the
-restriction that all edges are axis-parallel.&nbsp; This concept casting is
-accomplished through the <font face="Courier New">view_as&lt;&gt;()</font> function.</p>
-<p><font face="Courier New">view_as&lt;polygon_90_set_concept&gt;(polygon_set_object)</font></p>
-<p>The return value of <font face="Courier New">view_as&lt;&gt;()</font> can be passed
-into any interface that expects an object of the conceptual type specified in
-its template parameter.&nbsp; Polygon sets cannot be viewed as single polygons
-or rectangles since it generally cannot be known whether a polygon set contains
-only a single polygon without converting to polygons.</p>
-<h2>Operators</h2>
-<p>The return type of some operators is the <font face="Courier New">polygon_45_set_view</font>
-operator template type.&nbsp; This type is itself a model of the polygon 90 set
-concept, but furthermore can be used as an argument to the <font face="Courier New">polygon_45_set_data</font>
-constructor and assignment operator.&nbsp; The operator template exists to
-eliminate temp copies of intermediate results when Boolean operators are chained
+ <p> <font face="Times New Roman">The semantic of a
+polygon_45_set is zero or more geometry regions which have angles at
+the vertices that are multiples of 45-degrees relative to the
+coordinate axis.&nbsp; A Polygon 45 Set Concept makes no sense in
+floating point, but currently does not provide a static assert to
+prevent it from being used with floating point coordinates.&nbsp; The
+result of such use is undefined.&nbsp; When the intersection of two 45
+degree edges results in a vertex that is off the integer grid that case
+is handled by inserting a unit length edge between the two 45 degree
+edges near the off grid intersection point.&nbsp; In the case that data
+represented contains no 45-degree angles and is Manhattan a runtime
+check will default to the Manhattan algorithm.&nbsp; The results of
+which are identical to what the 45-degree algorithm would do, but
+obtained more efficiently.</font></p>
+ <p> <font face="Times New Roman">The motivation for providing
+the polygon_45_set is to extend the special case of Manhattan geometry
+capability of the library to encompass the slightly less common, but
+still important special case of geometry that is described by angles
+that are multiples of 45-degress with respect to the coordinate
+axis.&nbsp; This simplifies the implementation of geometry algorithms
+and affords many opportunities for optimization.&nbsp; 45-degree
+algorithms can be 50X faster than arbitrary angle algorithms and are
+required to provide a complete feature set that meets the performance
+requirements of application domains in which Manhattan and 45-degree
+geometry are a common special case.</font></p>
+ <p>Users are recommended to use std::vector and std::list of user
+defined polygons or library provided
+polygon_45_set_data&lt;coordinate_type&gt; objects.&nbsp; Lists and
+vectors of models of polygon_45_concept or
+polygon_45_with_holes_concept are automatically models of
+polygon_45_set_concept.</p>
+ <p>An object that is a model of <font face="Courier New">
+polygon_45_set_concept</font> can be viewed as a model of <font
+ face="Courier New">
+polygon_90_set_concept</font> if it is determined at runtime to conform
+to the restriction that all edges are axis-parallel.&nbsp; This concept
+casting is accomplished through the <font face="Courier New">view_as&lt;&gt;()</font>
+function.</p>
+ <p><font face="Courier New">view_as&lt;polygon_90_set_concept&gt;(polygon_set_object)</font></p>
+ <p>The return value of <font face="Courier New">view_as&lt;&gt;()</font>
+can be passed into any interface that expects an object of the
+conceptual type specified in its template parameter.&nbsp; Polygon sets
+cannot be viewed as single polygons or rectangles since it generally
+cannot be known whether a polygon set contains only a single polygon
+without converting to polygons.</p>
+ <h2>Operators</h2>
+ <p>The return type of some operators is the <font
+ face="Courier New">polygon_45_set_view</font> operator template
+type.&nbsp; This type is itself a model of the polygon 90 set concept,
+but furthermore can be used as an argument to the <font
+ face="Courier New">polygon_45_set_data</font> constructor and
+assignment operator.&nbsp; The operator template exists to eliminate
+temp copies of intermediate results when Boolean operators are chained
 together.</p>
-<p>Operators are declared inside the namespace <font face="Courier New">boost::polygon::operators</font>.</p>
-<table id="table5" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_45_set_view <b>operator</b>|(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean OR operation (polygon set union).&nbsp; Accepts two objects
- that model polygon_45_set or one of its refinements.&nbsp; Returns an
- operator template that performs the operation on demand when chained or
- or nested in a library function call such as assign().&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_45_set_view <b>operator</b>+(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator|.&nbsp; The plus sign is also used for OR
- operations in Boolean logic expressions.&nbsp; O( n log n) runtime
- complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_45_set_view <b>operator</b>&amp;(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean AND operation (polygon set intersection).&nbsp; Accepts two
- objects that model polygon_45_set or one of its refinements.&nbsp; O( n
- log n) runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_45_set_view <b>operator</b>*(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator&amp;.&nbsp; The multiplication symbol is also used for
- AND operations in Boolean logic expressions.&nbsp; O( n log n) runtime
- complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_45_set_view <b>operator</b>^(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean XOR operation (polygon set disjoint-union).&nbsp; Accepts
- two objects that model polygon_45_set or one of its refinements.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_45_set_view <b>operator</b>-(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean SUBTRACT operation (polygon set difference).&nbsp; Accepts
- two objects that model polygon_45_set or one of its refinements.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>|=(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator|, but with self assignment, left operand must model
- polygon_45_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>+=(T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator+, but with self assignment, left operand must model
- polygon_45_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>&amp;=(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator&amp;, but with self assignment, left operand must model
- polygon_45_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>*=(T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator*, but with self assignment, left operand must model
- polygon_45_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>^=(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator^, but with self assignment, left operand must model
- polygon_45_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>-=(T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator-, but with self assignment, left operand must model
- polygon_45_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1&gt;<br />
- T1 <b>operator</b>+(const T1&amp;, coordinate_type bloating)</font></td>
- <td>Performs resize operation, inflating by bloating ammount.&nbsp; If
- negative the result is a shrink instead of bloat.&nbsp; Note: returns
- result by value.&nbsp; O( n log n) runtime complexity and O(n) memory
- wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1 <b>operator</b>-(const T1&amp;, coordinate_type shrinking)</font></td>
- <td>Performs resize operation, deflating by bloating ammount.&nbsp; If
- negative the result is a bloat instead of shrink.&nbsp; Note: returns
- result by value.&nbsp; O( n log n) runtime complexity and O(n) memory
- wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>+=(const T1&amp;, coordinate_type bloating)</font></td>
- <td>Performs resize operation, inflating by bloating ammount.&nbsp; If
- negative the result is a shrink instead of bloat.&nbsp; Returns
- reference to modified argument.&nbsp; O( n log n) runtime complexity and
- O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>-=(const T1&amp;, coordinate_type shrinking)</font></td>
- <td>Performs resize operation, deflating by bloating ammount.&nbsp; If
- negative the result is a bloat instead of shrink.&nbsp; Returns
- reference to modified argument.&nbsp; O( n log n) runtime complexity and
- O(n) memory wrt vertices + intersections.</td>
- </tr>
- </tbody></table>
-<h2>Functions</h2>
-<table id="table3" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>assign</b>(T1&amp; lvalue, const T2&amp; rvalue)</font></td>
- <td>Eliminates overlaps in geometry and copies from an object that
- models polygon_45_set or any of its refinements into an object that
- models polygon_45_set.&nbsp; O( n log n) runtime complexity and O(n)
- memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>equivalence</b>(const T1&amp; lvalue, const T2&amp; rvalue) </font></td>
- <td>Returns true if an object that models polygon_45_set or one of its
- refinements covers the exact same geometric regions as another object
- that models polygon_45_set or one of its refinements.&nbsp; For example:
- two of polygon_45 objects.&nbsp; O( n log n) runtime complexity and O(n)
- memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- output_container_type, typename T&gt;<br />
- void <b>get_trapezoids</b>(output_container_type&amp; output, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- const T&amp; polygon_set)</font></td>
- <td>Output container is expected to be a standard container.&nbsp;
- Slices geometry of an object that models polygon_45_set or one of its
- refinements into non overlapping trapezoids along a vertical slicing
- orientation and appends them to the
- output, which must have a value type that models polygon_45,
- polygon_45_with_holes, polygon or polygon_with_holes.&nbsp;&nbsp; O( n
- log n) runtime complexity and O(n) memory wrt vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- output_container_type, typename T&gt;<br />
- void <b>get_trapezoids</b>(output_container_type&amp; output, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- const T&amp; polygon_set,<br />
+ <p>Operators are declared inside the namespace <font
+ face="Courier New">boost::polygon::operators</font>.</p>
+ <table id="table5" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_45_set_view <b>operator</b>|(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Boolean OR operation (polygon set union).&nbsp; Accepts
+two objects that model polygon_45_set or one of its refinements.&nbsp;
+Returns an operator template that performs the operation on demand when
+chained or or nested in a library function call such as assign().&nbsp;
+O( n log n) runtime complexity and O(n) memory wrt vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_45_set_view <b>operator</b>+(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator|.&nbsp; The plus sign is also used for
+OR operations in Boolean logic expressions.&nbsp; O( n log n) runtime
+complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_45_set_view <b>operator</b>&amp;(const T1&amp; l, const
+T2&amp; r)</font></td>
+ <td>Boolean AND operation (polygon set intersection).&nbsp;
+Accepts two objects that model polygon_45_set or one of its
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_45_set_view <b>operator</b>*(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator&amp;.&nbsp; The multiplication symbol
+is also used for AND operations in Boolean logic expressions.&nbsp; O(
+n log n) runtime complexity and O(n) memory wrt vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_45_set_view <b>operator</b>^(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Boolean XOR operation (polygon set
+disjoint-union).&nbsp; Accepts two objects that model polygon_45_set or
+one of its refinements.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_45_set_view <b>operator</b>-(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Boolean SUBTRACT operation (polygon set
+difference).&nbsp; Accepts two objects that model polygon_45_set or one
+of its refinements.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>|=(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator|, but with self assignment, left
+operand must model polygon_45_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>+=(T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator+, but with self assignment, left
+operand must model polygon_45_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>&amp;=(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator&amp;, but with self assignment, left
+operand must model polygon_45_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>*=(T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator*, but with self assignment, left
+operand must model polygon_45_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>^=(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator^, but with self assignment, left
+operand must model polygon_45_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>-=(T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator-, but with self assignment, left
+operand must model polygon_45_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1&gt;<br />
+T1 <b>operator</b>+(const T1&amp;, coordinate_type bloating)</font></td>
+ <td>Performs resize operation, inflating by bloating
+ammount.&nbsp; If negative the result is a shrink instead of
+bloat.&nbsp; Note: returns result by value.&nbsp; O( n log n) runtime
+complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1 <b>operator</b>-(const T1&amp;, coordinate_type shrinking)</font></td>
+ <td>Performs resize operation, deflating by bloating
+ammount.&nbsp; If negative the result is a bloat instead of
+shrink.&nbsp; Note: returns result by value.&nbsp; O( n log n) runtime
+complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>+=(const T1&amp;, coordinate_type bloating)</font></td>
+ <td>Performs resize operation, inflating by bloating
+ammount.&nbsp; If negative the result is a shrink instead of
+bloat.&nbsp; Returns reference to modified argument.&nbsp; O( n log n)
+runtime complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>-=(const T1&amp;, coordinate_type shrinking)</font></td>
+ <td>Performs resize operation, deflating by bloating
+ammount.&nbsp; If negative the result is a bloat instead of
+shrink.&nbsp; Returns reference to modified argument.&nbsp; O( n log n)
+runtime complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h2>Functions</h2>
+ <table id="table3" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; lvalue, const T2&amp; rvalue)</font></td>
+ <td>Eliminates overlaps in geometry and copies from an
+object that models polygon_45_set or any of its refinements into an
+object that models polygon_45_set.&nbsp; O( n log n) runtime complexity
+and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>equivalence</b>(const T1&amp; lvalue, const T2&amp; rvalue) </font></td>
+ <td>Returns true if an object that models polygon_45_set or
+one of its refinements covers the exact same geometric regions as
+another object that models polygon_45_set or one of its
+refinements.&nbsp; For example: two of polygon_45 objects.&nbsp; O( n
+log n) runtime complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container_type, typename T&gt;<br />
+void <b>get_trapezoids</b>(output_container_type&amp; output, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const T&amp; polygon_set)</font></td>
+ <td>Output container is expected to be a standard
+container.&nbsp; Slices geometry of an object that models
+polygon_45_set or one of its refinements into non overlapping
+trapezoids along a vertical slicing orientation and appends them to the
+output, which must have a value type that models polygon_45,
+polygon_45_with_holes, polygon or polygon_with_holes.&nbsp;&nbsp; O( n
+log n) runtime complexity and O(n) memory wrt vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container_type, typename T&gt;<br />
+void <b>get_trapezoids</b>(output_container_type&amp; output, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const T&amp; polygon_set,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 orientation_2d orient)</font></td>
- <td>Output container is expected to be a standard container.&nbsp;
- Slices geometry of an object that models polygon_45_set or one of its
- refinements into non overlapping trapezoids along a the specified slicing
- orientation and appends them to the
- output, which must have a value type that models polygon_45,
- polygon_45_with_holes, polygon or polygon_with_holes.&nbsp;&nbsp; O( n
- log n) runtime complexity and O(n) memory wrt vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- polygon_set_type&gt;<br />
- void <b>clear</b>(polygon_set_type&amp; polygon_set)</font></td>
- <td>Makes the object empty of geometry.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- polygon_set_type&gt;<br />
- bool <b>empty</b>(const polygon_set_type&amp; polygon_set)</font></td>
- <td>Checks whether the object is empty of geometry.&nbsp; Polygons that
- are completely covered by holes will result in empty returning true.&nbsp;&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- rectangle_type&gt;<br />
- bool <b>extents</b>(rectangle_type&amp; extents_rectangle, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const
- T&amp; polygon_set)</font></td>
- <td>Computes bounding box of an object that models polygon_45_set and
- stores it in an object that models rectangle.&nbsp; If the polygon set
- is empty returns false.&nbsp; If there are holes outside of shells they
- do not contribute to the extents of the polygon set.&nbsp;&nbsp; O( n
- log n) runtime complexity and O(n) memory wrt vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- area_type <b>area</b>(const T&amp; polygon_set)</font></td>
- <td>Computes the area covered by geometry in an object that models
- polygon_45_set.&nbsp;&nbsp; O( n log n) runtime complexity and O(n)
- memory wrt vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>interact</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Given an object that models polygon_45_set and an object that models
- polygon_45_set or one of its refinements, modifies a to retain only
- regions that overlap or touch regions in b.&nbsp;&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices plus intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>self_intersect</b>(T&amp; polygon_set)</font></td>
- <td>Given an object that models polygon_45_set that has self overlapping
- regions, modifies the argument to contain only the regions of overlap.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>self_xor</b>(T&amp; polygon_set)</font></td>
- <td>Given an object that models polygon_45_set that has self overlapping
- regions, modifies the argument to contain only the regions that do not
- overlap.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
- vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; polygon_set, unsigned_area_type bloating)</font></td>
- <td>Same as getting all the polygons, bloating them and putting them
- back.&nbsp; O( n log n) runtime complexity and O(n) memory wrt vertices
- + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; polygon_set, unsigned_area_type shrinking)</font></td>
- <td>Same as getting all the polygons, shrinking them and overwriting
- the polygon set with the resulting regions.&nbsp; O( n log n) runtime
- complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- coord_type&gt;<br />
- T&amp; <b>resize</b>(T&amp; polygon_set, coord_type resizing,<br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- RoundingOption rounding = CLOSEST, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CornerOption corner = INTERSECTION)</font></td>
- <td>Same as bloat if resizing is positive, same as shrink if resizing is
- negative.&nbsp; RoundingOption is an enum that controls snapping of
- non-integer results of resizing 45 degree edges.&nbsp; CornerOption is
- an enum that controls how corner filling is performed.&nbsp;
- polygon_45_set_data.hpp defines these enums.&nbsp; O( n log n) runtime
- complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Output container is expected to be a standard
+container.&nbsp; Slices geometry of an object that models
+polygon_45_set or one of its refinements into non overlapping
+trapezoids along a the specified slicing orientation and appends them
+to the output, which must have a value type that models polygon_45,
+polygon_45_with_holes, polygon or polygon_with_holes.&nbsp;&nbsp; O( n
+log n) runtime complexity and O(n) memory wrt vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_set_type&gt;<br />
+void <b>clear</b>(polygon_set_type&amp; polygon_set)</font></td>
+ <td>Makes the object empty of geometry.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_set_type&gt;<br />
+bool <b>empty</b>(const polygon_set_type&amp; polygon_set)</font></td>
+ <td>Checks whether the object is empty of geometry.&nbsp;
+Polygons that are completely covered by holes will result in empty
+returning true.&nbsp;&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename rectangle_type&gt;<br />
+bool <b>extents</b>(rectangle_type&amp; extents_rectangle, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const T&amp; polygon_set)</font></td>
+ <td>Computes bounding box of an object that models
+polygon_45_set and stores it in an object that models rectangle.&nbsp;
+If the polygon set is empty returns false.&nbsp; If there are holes
+outside of shells they do not contribute to the extents of the polygon
+set.&nbsp;&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+area_type <b>area</b>(const T&amp; polygon_set)</font></td>
+ <td>Computes the area covered by geometry in an object that
+models polygon_45_set.&nbsp;&nbsp; O( n log n) runtime complexity and
+O(n) memory wrt vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>interact</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Given an object that models polygon_45_set and an
+object that models polygon_45_set or one of its refinements, modifies a
+to retain only regions that overlap or touch regions in b.&nbsp;&nbsp;
+O( n log n) runtime complexity and O(n) memory wrt vertices plus
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>self_intersect</b>(T&amp; polygon_set)</font></td>
+ <td>Given an object that models polygon_45_set that has
+self overlapping regions, modifies the argument to contain only the
+regions of overlap.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>self_xor</b>(T&amp; polygon_set)</font></td>
+ <td>Given an object that models polygon_45_set that has
+self overlapping regions, modifies the argument to contain only the
+regions that do not overlap.&nbsp; O( n log n) runtime complexity and
+O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; polygon_set, unsigned_area_type bloating)</font></td>
+ <td>Same as getting all the polygons, bloating them and
+putting them back.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; polygon_set, unsigned_area_type shrinking)</font></td>
+ <td>Same as getting all the polygons, shrinking them and
+overwriting the polygon set with the resulting regions.&nbsp; O( n log
+n) runtime complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename coord_type&gt;<br />
+T&amp; <b>resize</b>(T&amp; polygon_set, coord_type resizing,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RoundingOption
+rounding = CLOSEST, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CornerOption
+corner = INTERSECTION)</font></td>
+ <td>Same as bloat if resizing is positive, same as shrink
+if resizing is negative.&nbsp; RoundingOption is an enum that controls
+snapping of non-integer results of resizing 45 degree edges.&nbsp;
+CornerOption is an enum that controls how corner filling is
+performed.&nbsp; polygon_45_set_data.hpp defines these enums.&nbsp; O(
+n log n) runtime complexity and O(n) memory wrt vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>grow_and</b>(T&amp; polygon_set, unsigned_area_type bloating)</font></td>
- <td>Same as bloating non-overlapping regions and then applying self
- intersect to retain only the overlaps introduced by the bloat.&nbsp; O(
- n log n) runtime complexity and O(n) memory wrt vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Same as bloating non-overlapping regions and then
+applying self intersect to retain only the overlaps introduced by the
+bloat.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>scale_up</b>(T&amp; polygon_set, unsigned_area_type factor)</font></td>
- <td>Scales geometry up by unsigned factor.&nbsp; O( n log n) runtime
- complexity and O(n) memory wrt vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Scales geometry up by unsigned factor.&nbsp; O( n log
+n) runtime complexity and O(n) memory wrt vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>scale_down</b>(T&amp; polygon_set, unsigned_area_type factor)</font></td>
- <td>Scales geometry down by unsigned factor.&nbsp; Snaps 45 degree edges
- back to 45 degrees after division truncation leads to small changes in
- angle.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
- vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename scaling_type&gt;<br />
+ <td>Scales geometry down by unsigned factor.&nbsp; Snaps 45
+degree edges back to 45 degrees after division truncation leads to
+small changes in angle.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename scaling_type&gt;<br />
 T&amp; <b>scale</b>(polygon_set_type&amp; polygon_set, double scaling)</font></td>
- <td>Scales geometry by multiplying by floating point factor.&nbsp;&nbsp;
- Snaps 45 degree edges back to 45 degrees after truncation of fractional
- results of multiply leads to small changes in angle.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename transformation_type&gt;<br />
+ <td>Scales geometry by multiplying by floating point
+factor.&nbsp;&nbsp; Snaps 45 degree edges back to 45 degrees after
+truncation of fractional results of multiply leads to small changes in
+angle.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename transformation_type&gt;<br />
 T&amp; <b>transform</b>(T&amp; polygon_set,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const
-transformation_type&amp; transformation)</font></td>
- <td>Applies transformation.transform() on all vertices.&nbsp; O( n log
- n) runtime complexity and O(n) memory wrt vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const transformation_type&amp; transformation)</font></td>
+ <td>Applies transformation.transform() on all
+vertices.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>keep</b>(T&amp; polygon_set, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type min_area,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type max_area,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type min_width,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type max_width,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type min_height,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type max_height)</font></td>
- <td>Retains only regions that satisfy the min/max criteria in the
- argument list.&nbsp; Note: useful for visualization to cull too small
- polygons.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
- vertices.</td>
- </tr>
- </tbody></table>
- <h1>Polygon 45 Set Data Object</h1>
-
-<p>
-</p><p>The polygon 45 set data type encapsulates the internal data format that
-serves as the input to the sweep-line algorithm that implements polygon-clipping
-Boolean operations.&nbsp; It also internally keeps track of whether that data
-has been sorted or scanned and maintains the invariant that when its flags
-indicate that the data is sorted or scanned the data has not been changed to
-violate that assumption.&nbsp; Using the Polygon 45 Set Data type directly can
-be more efficient than using lists and vectors of polygons in the functions
-above because of the invariants it can enforce which provide the opportunity to
-maintain the data is sorted form rather than going all the way out to polygons
-then resorting those vertices for a subsequent operation.</p>
-<p>The declaration of Polygon 45 Set Data is the following:</p>
-<p><font face="Courier New">template &lt;typename T&gt;<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+min_height,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+max_height)</font></td>
+ <td>Retains only regions that satisfy the min/max criteria
+in the argument list.&nbsp; Note: useful for visualization to cull too
+small polygons.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Polygon 45 Set Data Object</h1>
+ <p> </p>
+ <p>The polygon 45 set data type encapsulates the internal data
+format that serves as the input to the sweep-line algorithm that
+implements polygon-clipping Boolean operations.&nbsp; It also
+internally keeps track of whether that data has been sorted or scanned
+and maintains the invariant that when its flags indicate that the data
+is sorted or scanned the data has not been changed to violate that
+assumption.&nbsp; Using the Polygon 45 Set Data type directly can be
+more efficient than using lists and vectors of polygons in the
+functions above because of the invariants it can enforce which provide
+the opportunity to maintain the data is sorted form rather than going
+all the way out to polygons then resorting those vertices for a
+subsequent operation.</p>
+ <p>The declaration of Polygon 45 Set Data is the following:</p>
+ <p><font face="Courier New">template &lt;typename T&gt;<br />
 class polygon_45_set_data;</font></p>
-<p>The class is parameterized on the coordinate data type.&nbsp; Algorithms that
-benefit from knowledge of the invariants enforced by the class are implemented
-as member functions to provide them access to information about those
-invariants.&nbsp; </p>
-<h2>Member Functions</h2>
-<table id="table4" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New"><b>polygon_45_set_data</b>()</font></td>
- <td>Default constructor. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<br />
- <b>polygon_45_set_data</b>(iT input_begin, iT
- input_end)</font></td>
- <td>Construct from an iterator range of
- insertable objects.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
- <b>polygon_45_set_data</b>(const polygon_45_set_data&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">template &lt;typename l, typename r, typename op&gt;<br />
-<b>polygon_45_set_data</b>(const polygon_45_set_view&lt;l,r,op&gt;&amp;
-t)</font></td>
- <td>Copy construct from a Boolean operator template.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">polygon_45_set_data&amp; <br /><b>operator=</b>(const polygon_45_set_data&amp; that)</font></td>
- <td>Assignment from another polygon set, may change scanning
- orientation.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">template &lt;typename l, typename r, typename op&gt;<br />
-polygon_45_set_data&amp; <br /><b>operator=</b>(const polygon_45_set_view&lt;l, r,
+ <p>The class is parameterized on the coordinate data type.&nbsp;
+Algorithms that benefit from knowledge of the invariants enforced by
+the class are implemented as member functions to provide them access to
+information about those invariants.&nbsp; </p>
+ <h2>Member Functions</h2>
+ <table id="table4" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_45_set_data</b>()</font></td>
+ <td>Default constructor. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<br />
+ <b>polygon_45_set_data</b>(iT input_begin, iT input_end)</font></td>
+ <td>Construct from an iterator range of insertable objects.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"> <b>polygon_45_set_data</b>(const
+polygon_45_set_data&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename l, typename r, typename op&gt;<br />
+ <b>polygon_45_set_data</b>(const
+polygon_45_set_view&lt;l,r,op&gt;&amp; t)</font></td>
+ <td>Copy construct from a Boolean operator template.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_45_set_data&amp;
+ <br />
+ <b>operator=</b>(const polygon_45_set_data&amp; that)</font></td>
+ <td>Assignment from another polygon set, may change
+scanning orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename l, typename r, typename op&gt;<br />
+polygon_45_set_data&amp; <br />
+ <b>operator=</b>(const polygon_45_set_view&lt;l, r,
 op&gt;&amp; that)</font></td>
- <td>Assignment from a Boolean operator template.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename geometry_object&gt;<br />
-polygon_45_set_data&amp; <b>operator=</b>(const geometry_object&amp; geo)</font></td>
- <td>Assignment from an insertable object.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Assignment from a Boolean operator template.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename geometry_object&gt;<br />
+polygon_45_set_data&amp; <b>operator=</b>(const geometry_object&amp;
+geo)</font></td>
+ <td>Assignment from an insertable object.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename iT&gt;<br />
-void <b>insert</b>(iT input_begin, iT input_end, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool is_hole = false)</font></td>
- <td>Insert objects of an iterator range.&nbsp; If is_hole is true
- inserts subtractive regions.&nbsp; Linear wrt the number of vertices
- added.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
-void <b>insert</b>(const polygon_45_set_data&amp; polygon_set, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool is_hole
-= false)</font></td>
- <td>Insert a polygon set.&nbsp; Linear wrt the number of vertices added.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+void <b>insert</b>(iT input_begin, iT input_end, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool
+is_hole = false)</font></td>
+ <td>Insert objects of an iterator range.&nbsp; If is_hole
+is true inserts subtractive regions.&nbsp; Linear wrt the number of
+vertices added.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
+void <b>insert</b>(const polygon_45_set_data&amp; polygon_set, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool
+is_hole = false)</font></td>
+ <td>Insert a polygon set.&nbsp; Linear wrt the number of
+vertices added.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename geometry_type&gt;<br />
-void <b>insert</b>(const geometry_type&amp; geometry_object, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool is_hole
-= false)</font></td>
- <td>Insert a geometry object, if is_hole is true then the inserted
- region is subtractive rather than additive.&nbsp; Linear wrt the number
- of vertices added.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename output_container&gt;<br />
+void <b>insert</b>(const geometry_type&amp; geometry_object, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool
+is_hole = false)</font></td>
+ <td>Insert a geometry object, if is_hole is true then the
+inserted region is subtractive rather than additive.&nbsp; Linear wrt
+the number of vertices added.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container&gt;<br />
 void <b>get</b>(output_container&amp; output) const</font></td>
- <td>Expects a standard container of geometry objects.&nbsp; Will scan
- and eliminate overlaps.&nbsp; Converts polygon set geometry to objects
- of that type and appends them to the container.&nbsp; Polygons will be
- output with counterclockwise winding, hole polygons will be output with
- clockwise winding.&nbsp; The last vertex of an output polygon is not the
- duplicate of the first, and the number of points is equal to the number
- of edges.&nbsp; O(n log n) runtime and O(n) memory wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename output_container&gt;<br />
+ <td>Expects a standard container of geometry objects.&nbsp;
+Will scan and eliminate overlaps.&nbsp; Converts polygon set geometry
+to objects of that type and appends them to the container.&nbsp;
+Polygons will be output with counterclockwise winding, hole polygons
+will be output with clockwise winding.&nbsp; The last vertex of an
+output polygon is not the duplicate of the first, and the number of
+points is equal to the number of edges.&nbsp; O(n log n) runtime and
+O(n) memory wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container&gt;<br />
 void <b>get_polygons</b>(output_container&amp; output) const</font></td>
- <td>Expects a standard container of polygon objects.&nbsp; Will scan and
- eliminate overlaps.&nbsp; Converts polygon set geometry to polygons and
- appends them to the container.&nbsp; Polygons will have holes fractured
- out to the outer boundary along the positive y direction.&nbsp; O(n log
- n) runtime and O(n) memory wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename output_container&gt;<br />
+ <td>Expects a standard container of polygon objects.&nbsp;
+Will scan and eliminate overlaps.&nbsp; Converts polygon set geometry
+to polygons and appends them to the container.&nbsp; Polygons will have
+holes fractured out to the outer boundary along the positive y
+direction.&nbsp; O(n log n) runtime and O(n) memory wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container&gt;<br />
 void <b>get_polygons_with_holes</b>(output_container&amp; o) const</font></td>
- <td>Expects a standard container of polygon with holes objects.&nbsp; Will scan and
- eliminate overlaps.&nbsp; Converts polygon set geometry to polygons and
- appends them to the container.&nbsp; O(n log n) runtime and O(n) memory
- wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename output_container&gt;<br />
+ <td>Expects a standard container of polygon with holes
+objects.&nbsp; Will scan and eliminate overlaps.&nbsp; Converts polygon
+set geometry to polygons and appends them to the container.&nbsp; O(n
+log n) runtime and O(n) memory wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container&gt;<br />
 void <b>get_trapezoids</b>(output_container&amp; output) const</font></td>
- <td>Expects a standard container of polygon objects.&nbsp; Will scan
- and eliminate overlaps.&nbsp; Slices polygon set geometry to trapezoids
- vertically and appends them to the container.&nbsp; O(n log n) runtime
- and O(n) memory wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Expects a standard container of polygon objects.&nbsp;
+Will scan and eliminate overlaps.&nbsp; Slices polygon set geometry to
+trapezoids vertically and appends them to the container.&nbsp; O(n log
+n) runtime and O(n) memory wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename output_container&gt;<br />
-void <b>get_trapezoids</b>(output_container&amp; output, <br />&nbsp; orientation_2d
-slicing_orientation) const </font>
- </td>
- <td>Expects a standard container of polygon objects.&nbsp; Will scan
- and eliminate overlaps.&nbsp; Slices polygon set geometry to trapezoids
- along the given orientation and appends them to the container.&nbsp; O(n
- log n) runtime and O(n) memory wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+void <b>get_trapezoids</b>(output_container&amp; output, <br />
+&nbsp; orientation_2d slicing_orientation) const </font> </td>
+ <td>Expects a standard container of polygon objects.&nbsp;
+Will scan and eliminate overlaps.&nbsp; Slices polygon set geometry to
+trapezoids along the given orientation and appends them to the
+container.&nbsp; O(n log n) runtime and O(n) memory wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 bool <b>operator==</b>(const polygon_45_set_data&amp; p) const</font></td>
- <td>Once scanned the data representation of geometry within a polygon
- set is in a mathematically canonical form.&nbsp; Comparison between two
- sets is therefore a linear time operation once they are in the scanned
- state. Will scan and eliminate overlaps in both polygon sets.&nbsp; O(n
- log n) runtime and O(n) memory wrt. vertices + intersections the first
- time and linear runtime and constant memory subsequently.&nbsp; </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-bool <b>operator!=</b>(const polygon_45_set_data&amp; p) const</font></td>
- <td>Inverse logic of equivalence operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">void <b>clear</b>()</font></td>
- <td>Make the polygon set empty.&nbsp; Note: does not de-allocate memory.&nbsp;
- Use shrink to fit idiom and assign default constructed polygon set to
- de-allocate.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool <b>empty</b>() const </font>
- </td>
- <td>Check whether the polygon set contains no geometry.&nbsp; Will scan
- and eliminate overlaps because subtractive regions might make the
- polygon set empty.&nbsp; O(n log n) runtime and O(n) memory wrt.
- vertices + intersections the first time and linear runtime and constant
- memory subsequently.&nbsp; </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool <b>is_manhattan</b>()
- const</font></td>
- <td>Returns in constant time the information about whether the geometry
- contains only Manhattan (axis-parallel rectilinear) edges.&nbsp;
- Constant time.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">void <b>clean</b>() const</font></td>
- <td>Scan and eliminate overlaps.&nbsp; O(n log n) runtime and O(n)
- memory wrt. vertices + intersections the first time and linear runtime
- and constant memory subsequently.&nbsp; </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename input_iterator_type&gt;<br />
-void <b>set</b>(input_iterator_type input_begin, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input_iterator_type input_end) </font>
- </td>
- <td>Overwrite geometry in polygon set with insertable objects in the
- iterator range.&nbsp; </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename rectangle_type&gt;<br />
+ <td>Once scanned the data representation of geometry within
+a polygon set is in a mathematically canonical form.&nbsp; Comparison
+between two sets is therefore a linear time operation once they are in
+the scanned state. Will scan and eliminate overlaps in both polygon
+sets.&nbsp; O(n log n) runtime and O(n) memory wrt. vertices +
+intersections the first time and linear runtime and constant memory
+subsequently.&nbsp; </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool <b>operator!=</b>(const
+polygon_45_set_data&amp; p) const</font></td>
+ <td>Inverse logic of equivalence operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>clear</b>()</font></td>
+ <td>Make the polygon set empty.&nbsp; Note: does not
+de-allocate memory.&nbsp; Use shrink to fit idiom and assign default
+constructed polygon set to de-allocate.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool <b>empty</b>()
+const </font> </td>
+ <td>Check whether the polygon set contains no
+geometry.&nbsp; Will scan and eliminate overlaps because subtractive
+regions might make the polygon set empty.&nbsp; O(n log n) runtime and
+O(n) memory wrt. vertices + intersections the first time and linear
+runtime and constant memory subsequently.&nbsp; </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool <b>is_manhattan</b>()
+const</font></td>
+ <td>Returns in constant time the information about whether
+the geometry contains only Manhattan (axis-parallel rectilinear)
+edges.&nbsp; Constant time.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>clean</b>()
+const</font></td>
+ <td>Scan and eliminate overlaps.&nbsp; O(n log n) runtime
+and O(n) memory wrt. vertices + intersections the first time and linear
+runtime and constant memory subsequently.&nbsp; </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename input_iterator_type&gt;<br />
+void <b>set</b>(input_iterator_type input_begin, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input_iterator_type
+input_end) </font> </td>
+ <td>Overwrite geometry in polygon set with insertable
+objects in the iterator range.&nbsp; </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type&gt;<br />
 bool <b>extents</b>(rectangle_type&amp; extents_rectangle) const</font></td>
- <td>Given an object that models rectangle, scans and eliminates overlaps
- in the polygon set because subtractive regions may alter its extents
- then computes the bounding box and assigns it to extents_rectangle.&nbsp;
- O(n log n) runtime and O(n) memory wrt. vertices the first time and
- linear runtime and constant memory subsequently.&nbsp; </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-polygon_45_set_data&amp;<br />
-<b>resize</b>(coord_type resizing,<br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RoundingOption rounding = CLOSEST, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CornerOption
- corner = INTERSECTION)</font></td>
- <td>Same as bloat if resizing is positive, same as shrink if resizing is
- negative.&nbsp; RoundingOption is an enum that controls snapping of
- non-integer results of resizing 45 degree edges.&nbsp; CornerOption is
- an enum that controls how corner filling is performed.&nbsp;
- polygon_45_set_data.hpp defines these enums.&nbsp; O(n log n) runtime
- and O(n) memory wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename transformation_type&gt;<br />
-polygon_45_set_data&amp; <br /><b>transform</b>(const transformation_type&amp; transformation) </font>
- </td>
- <td>Applies transformation.transform() on vertices stored within the
- polygon set.&nbsp; O(n log n) runtime and O(n) memory wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-polygon_45_set_data&amp; <b>scale_up</b>(unsigned_area_type factor)</font></td>
- <td>Scales vertices stored within the polygon set up by factor.&nbsp;
- Linear wrt vertices.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">polygon_45_set_data&amp; <b>scale_down</b>(unsigned_area_type
-factor)</font>&nbsp;</td>
- <td>Scales vertices stored within the polygon set down by factor.&nbsp;
- Linear wrt vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_45_set_data&amp; <b>scale</b>(double factor) </font></td>
- <td>Scales vertices stored within the polygon set by floating point
- factor.&nbsp; Linear wrt vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_45_set_data&amp; <b>self_xor</b>()</font></td>
- <td>Retain only non-overlapping regions of geometry within polygon set.&nbsp;
- O(n log n) runtime and O(n) memory wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_45_set_data&amp; <b>self_intersect</b>()</font></td>
- <td>Retain only overlapping regions of geometry within a polygon set.&nbsp;
- O(n log n) runtime and O(n) memory wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool <b>has_error_data</b>()
- const </font></td>
- <td>Returns true if non-integer intersections resulted in small
- artifacts in the output of a boolean.&nbsp; Constant time.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">std::size_t <b>error_count</b>()
- const</font></td>
- <td>Returns the number of artifacts that may potentially be present in
- the output due to non-integer intersections.&nbsp; Constant time.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">void <b>get_error_data</b>(polygon_45_set_data&amp;
- p) const</font></td>
- <td>Populates the input polygon set with 1x1 unit squares that bound the
- error that may be present in the output due to non-integer
- intersections.&nbsp; Linear wrt. vertices of error data.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_45_set_data&amp; <b>self_intersect</b>()</font></td>
- <td>Retain only overlapping regions of geometry within a polygon set.&nbsp;
- O(n log n) runtime and O(n) memory wrt. vertices + intersections.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table6" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Given an object that models rectangle, scans and
+eliminates overlaps in the polygon set because subtractive regions may
+alter its extents then computes the bounding box and assigns it to
+extents_rectangle.&nbsp; O(n log n) runtime and O(n) memory wrt.
+vertices the first time and linear runtime and constant memory
+subsequently.&nbsp; </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_45_set_data&amp;<br />
+ <b>resize</b>(coord_type resizing,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RoundingOption rounding = CLOSEST,
+ <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CornerOption corner = INTERSECTION)</font></td>
+ <td>Same as bloat if resizing is positive, same as shrink
+if resizing is negative.&nbsp; RoundingOption is an enum that controls
+snapping of non-integer results of resizing 45 degree edges.&nbsp;
+CornerOption is an enum that controls how corner filling is
+performed.&nbsp; polygon_45_set_data.hpp defines these enums.&nbsp; O(n
+log n) runtime and O(n) memory wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename transformation_type&gt;<br />
+polygon_45_set_data&amp; <br />
+ <b>transform</b>(const transformation_type&amp;
+transformation) </font> </td>
+ <td>Applies transformation.transform() on vertices stored
+within the polygon set.&nbsp; O(n log n) runtime and O(n) memory wrt.
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_45_set_data&amp;
+ <b>scale_up</b>(unsigned_area_type factor)</font></td>
+ <td>Scales vertices stored within the polygon set up by
+factor.&nbsp; Linear wrt vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_45_set_data&amp;
+ <b>scale_down</b>(unsigned_area_type factor)</font>&nbsp;</td>
+ <td>Scales vertices stored within the polygon set down by
+factor.&nbsp; Linear wrt vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_45_set_data&amp;
+ <b>scale</b>(double factor) </font></td>
+ <td>Scales vertices stored within the polygon set by
+floating point factor.&nbsp; Linear wrt vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_45_set_data&amp;
+ <b>self_xor</b>()</font></td>
+ <td>Retain only non-overlapping regions of geometry within
+polygon set.&nbsp; O(n log n) runtime and O(n) memory wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_45_set_data&amp;
+ <b>self_intersect</b>()</font></td>
+ <td>Retain only overlapping regions of geometry within a
+polygon set.&nbsp; O(n log n) runtime and O(n) memory wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool <b>has_error_data</b>()
+const </font></td>
+ <td>Returns true if non-integer intersections resulted in
+small artifacts in the output of a boolean.&nbsp; Constant time.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">std::size_t <b>error_count</b>()
+const</font></td>
+ <td>Returns the number of artifacts that may potentially be
+present in the output due to non-integer intersections.&nbsp; Constant
+time.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>get_error_data</b>(polygon_45_set_data&amp;
+p) const</font></td>
+ <td>Populates the input polygon set with 1x1 unit squares
+that bound the error that may be present in the output due to
+non-integer intersections.&nbsp; Linear wrt. vertices of error data.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_45_set_data&amp;
+ <b>self_intersect</b>()</font></td>
+ <td>Retain only overlapping regions of geometry within a
+polygon set.&nbsp; O(n log n) runtime and O(n) memory wrt. vertices +
+intersections.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table6" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_polygon_45_with_holes_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_polygon_45_with_holes_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_polygon_45_with_holes_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,415 +1,461 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Polygon 45 With Holes Concept</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Polygon 45 With Holes Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li>Polygon 45 With Holes Concept</li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Polygon 45 With Holes Concept</h1>
-
-<p>
-</p><p>The polygon_45_with_holes concept tag is <font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Polygon 45 With Holes Concept</h1>
+ <p> </p>
+ <p>The polygon_45_with_holes concept tag is <font
+ face="Courier New">
 polygon_45_with_holes_concept</font></p>
-<p>
-To register a user defined type as a model of
-<font face="Times New Roman">polygon_45_with_holes </font>concept, specialize
-the geometry concept meta-function for that type.&nbsp; In the example below
-CPolygon45WithHoles is registered as a model of polygon<font face="Times New Roman">_45_with_holes&nbsp;</font> concept.</p><p>
-<font face="Courier New">template &lt;&gt;<br />
-struct geometry_concept&lt;CPolygon45WithHoles&gt; { typedef polygon_45_with_holes_concept type; };</font></p><p>
-<font face="Times New Roman">The semantic of a polygon_45_with_holes is a
-polygon_45 that it can provide iterators over holes that are also polygon_45.&nbsp;
-A mutable polygon_45_with_holes must also be able to set its geometry based on
-an interator range over polygon_45 holes.&nbsp; There is no convention of
-winding of holes enforced within the library. </font></p><p>
-<font face="Times New Roman">Below is shown the default polygon with holes
-traits.&nbsp; Specialization of these traits is required for types that don't
-conform to the default behavior.</font></p><p><font face="Courier New">template &lt;typename
-T, typename enable = void&gt;<br />
+ <p> To register a user defined type as a model of <font
+ face="Times New Roman">polygon_45_with_holes </font>concept,
+specialize the geometry concept meta-function for that type.&nbsp; In
+the example below CPolygon45WithHoles is registered as a model of
+polygon<font face="Times New Roman">_45_with_holes&nbsp;</font> concept.</p>
+ <p> <font face="Courier New">template &lt;&gt;<br />
+struct geometry_concept&lt;CPolygon45WithHoles&gt; { typedef
+polygon_45_with_holes_concept type; };</font></p>
+ <p> <font face="Times New Roman">The semantic of a
+polygon_45_with_holes is a polygon_45 that it can provide iterators
+over holes that are also polygon_45.&nbsp; A mutable
+polygon_45_with_holes must also be able to set its geometry based on an
+interator range over polygon_45 holes.&nbsp; There is no convention of
+winding of holes enforced within the library. </font></p>
+ <p> <font face="Times New Roman">Below is shown the default
+polygon with holes traits.&nbsp; Specialization of these traits is
+required for types that don't conform to the default behavior.</font></p>
+ <p><font face="Courier New">template &lt;typename T, typename
+enable = void&gt;<br />
 struct polygon_with_holes_traits {<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::iterator_holes_type
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::iterator_holes_type
 iterator_holes_type;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::hole_type hole_type;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type begin_holes(const T&amp;
-t) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.begin_holes();<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type
+begin_holes(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+t.begin_holes();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type end_holes(const T&amp; t)
-{<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.end_holes();<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type
+end_holes(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+t.end_holes();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size_holes(const T&amp; t) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.size_holes();<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size_holes(const
+T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+t.size_holes();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</font></p>
-<p><font face="Courier New">template &lt;typename T, typename enable = void&gt;<br />
+ <p><font face="Courier New">template &lt;typename T, typename
+enable = void&gt;<br />
 struct polygon_with_holes_mutable_traits {<br />
 &nbsp;&nbsp;&nbsp;&nbsp; template &lt;typename iT&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_holes(T&amp; t, iT inputBegin, iT
-inputEnd) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.set_holes(inputBegin,
-inputEnd);<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_holes(T&amp; t, iT
+inputBegin, iT inputEnd) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+t.set_holes(inputBegin, inputEnd);<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</font></p>
-<p>An object that is a model of <font face="Courier New">
-polygon_45_with_holes_concept</font> can be viewed as a model of any of its
-refinements if it is determined at runtime to conform to the restriction of
-those concepts.&nbsp; This concept casting is accomplished through the
-<font face="Courier New">view_as&lt;&gt;()</font> function.</p>
-<p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_45_with_holes_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_90_concept&gt;(polygon_45_with_holes_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_90_with_holes_concept&gt;(polygon_45_with_holes_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_45_concept&gt;(polygon_45_with_holes_object)</font></p>
-<p>The return value of <font face="Courier New">view_as&lt;&gt;()</font> can be
-passed into any interface that expects an object of the conceptual type
-specified in its template parameter. </p>
-<h2>Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_45_with_holes.&nbsp;
- Returns the begin iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_45_with_holes.&nbsp;
- Returns the end iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- hole_iterator_type <b>begin_holes</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_45_with_holes.&nbsp;
- Returns the begin iterator over the range of coordinates that correspond
- to horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- hole_iterator_type <b>end_holes</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_45_with_holes.&nbsp;
- Returns the end iterator over the range of coordinates that correspond
- to horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- iterator&gt;<br />
- void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_45_with_holes.&nbsp;&nbsp;
- Sets the polygon to the point data range [b,e) that corresponds to
- vertices of a polygon.&nbsp; </font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- iterator&gt;<br />
- void <b>set_holes</b>(T&amp; polygon, iterator b, iterator e)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_45_with_holes.&nbsp;&nbsp;
- Sets the polygon holes to the hole data range [b,e)</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- unsigned int <b>size</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Returns the number of edges in the
- outer shell of the polygon_45_with_holes.&nbsp; Does not include sizes
- of the holes.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
- <td>Copies data from right object that models polygon_45_with_holes or
- one of its refinements into left object
- that models polygon_45_with_holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename point_type&gt;<br />
- bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch=true)</font></td>
- <td>Given an object that models polygon_45_with_holes and an object that models
- point, returns true
- if the polygon shell contains the point and one of its holes does not
- contain the point.&nbsp; If the consider_touch
- flag is true will return true if the point lies along the boundary of
- the polygon or one of its holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br />
- template &lt;typename T, typename point_type&gt;<br />
- void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
- <td>Sets object that models point to the center point of the bounding
- box of an object that models polygon_45_with_holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename rectangle_type&gt;<br />
- bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
- <td>Sets object that models rectangle to the bounding box of an object
- that models polygon_45_with_holes and returns true.&nbsp; Returns false
- and leaves bbox unchanged if polygon is empty.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- manhattan_area_type <b>area</b>(const T&amp; polygon)</font></td>
- <td>Returns the area of an object
- that models polygon_45_with_holes including subtracting the area of its
- holes from the area of the outer shell polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
- <td>Returns the winding direction of an object
- that models polygon_45_with_holes, LOW == CLOCKWISE, HIGH =
- COUNTERCLOCKWISE.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_difference <b>perimeter</b>(const T&amp; polygon)</font></td>
- <td>Returns the perimeter length of an object
- that models polygon_45, including the perimeters of the holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename transform_type&gt;<br />
- T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
- <td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
- transforming its vertices.&nbsp; Also applies transform() on the holes
- of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales up outer shell and holes of an object that models
- polygon_45 by unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales down outer shell and holes of an object that models
- polygon_45 by unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, scaling_type&gt;<br />
- T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
- <td>Scales outer shell and holes of an object that models polygon_45 by
- floating point factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference displacement)</font></td>
- <td>Adds displacement value to coordinate indicated by orientation_2d of
- vertices of an object that models polygon_45 .</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename polygon_type, typename point_type&gt;<br />
- polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <p>An object that is a model of <font face="Courier New">
+polygon_45_with_holes_concept</font> can be viewed as a model of any of
+its refinements if it is determined at runtime to conform to the
+restriction of those concepts.&nbsp; This concept casting is
+accomplished through the
+ <font face="Courier New">view_as&lt;&gt;()</font> function.</p>
+ <p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_45_with_holes_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_90_concept&gt;(polygon_45_with_holes_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_90_with_holes_concept&gt;(polygon_45_with_holes_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_45_concept&gt;(polygon_45_with_holes_object)</font></p>
+ <p>The return value of <font face="Courier New">view_as&lt;&gt;()</font>
+can be passed into any interface that expects an object of the
+conceptual type specified in its template parameter. </p>
+ <h2>Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_45_with_holes.&nbsp; Returns the begin iterator over the range
+of points that correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_45_with_holes.&nbsp; Returns the end iterator over the range of
+points that correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+hole_iterator_type <b>begin_holes</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_45_with_holes.&nbsp; Returns the begin iterator over the range
+of coordinates that correspond to horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+hole_iterator_type <b>end_holes</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_45_with_holes.&nbsp; Returns the end iterator over the range of
+coordinates that correspond to horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename iterator&gt;<br />
+void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_45_with_holes.&nbsp;&nbsp; Sets the polygon to the point data
+range [b,e) that corresponds to vertices of a polygon.&nbsp; </font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename iterator&gt;<br />
+void <b>set_holes</b>(T&amp; polygon, iterator b, iterator e)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_45_with_holes.&nbsp;&nbsp; Sets the polygon holes to the hole
+data range [b,e)</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+unsigned int <b>size</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Returns the number of
+edges in the outer shell of the polygon_45_with_holes.&nbsp; Does not
+include sizes of the holes.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
+ <td>Copies data from right object that models
+polygon_45_with_holes or one of its refinements into left object that
+models polygon_45_with_holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch=true)</font></td>
+ <td>Given an object that models polygon_45_with_holes and
+an object that models point, returns true if the polygon shell contains
+the point and one of its holes does not contain the point.&nbsp; If the
+consider_touch flag is true will return true if the point lies along
+the boundary of the polygon or one of its holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">// get the center
+coordinate<br />
+template &lt;typename T, typename point_type&gt;<br />
+void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
+ <td>Sets object that models point to the center point of
+the bounding box of an object that models polygon_45_with_holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename rectangle_type&gt;<br />
+bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
+ <td>Sets object that models rectangle to the bounding box
+of an object that models polygon_45_with_holes and returns true.&nbsp;
+Returns false and leaves bbox unchanged if polygon is empty.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+manhattan_area_type <b>area</b>(const T&amp; polygon)</font></td>
+ <td>Returns the area of an object that models
+polygon_45_with_holes including subtracting the area of its holes from
+the area of the outer shell polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
+ <td>Returns the winding direction of an object that models
+polygon_45_with_holes, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_difference <b>perimeter</b>(const T&amp; polygon)</font></td>
+ <td>Returns the perimeter length of an object that models
+polygon_45, including the perimeters of the holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename transform_type&gt;<br />
+T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
+ <td>Applies transform() on the vertices of polygon and sets
+the polygon to that described by the result of transforming its
+vertices.&nbsp; Also applies transform() on the holes of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales up outer shell and holes of an object that
+models polygon_45 by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales down outer shell and holes of an object that
+models polygon_45 by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, scaling_type&gt;<br />
+T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
+ <td>Scales outer shell and holes of an object that models
+polygon_45 by floating point factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference
+displacement)</font></td>
+ <td>Adds displacement value to coordinate indicated by
+orientation_2d of vertices of an object that models polygon_45 .</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_type, typename point_type&gt;<br />
+polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const point_type&amp; point)</font></td>
- <td>Convolves coordinate values of point with the outer shell and holes of an
- object that models polygon_45_with_holes.</td>
- </tr>
- </tbody></table>
- <h1>Polygon 45 With Holes Data</h1>
-
-<p>
-</p><p>The library provides a model of polygon 45 with holes concept declared
-<font face="Courier New">
-template&lt;typename T&gt; polygon_45_with_holes_data </font>where T is the
-coordinate type.</p>
-<p>This data type is used internally when a 45 degree polygon with holes is
-needed and is available to the library user who finds it convenient to use a
-library polygon data type instead of providing their own.&nbsp; The data type is
-implemented to be convenient to use with the library traits.</p>
-<h2>Members</h2>
-<table id="table2" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
- <td><font face="Times New Roman">polygon_45_with_holes_concept</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
- <td><font face="Times New Roman">T</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
- <td>Iterator over vertices point_data&lt;T&gt; vertices of polygon</td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">iterator_holes_type</font></b></td>
- <td><font face="Times New Roman">Iterator over hole polygons of type
- polygon_45_data&lt;T&gt;.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_45_with_holes_data</b>()</font></td>
- <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_45_with_holes_data</b>(const
- polygon_45_with_holes_data&amp; that)</font></td>
- <td><font face="Times New Roman">Copy construct</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_45_with_holes_data&amp; <b>
- <br />operator=</b>(const polygon_45_with_holes_data&amp; that)</font></td>
- <td>Assignment operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T2&gt;<b> </b>
- polygon_45_with_holes_data&amp;<b>&nbsp;
- <br /> operator=</b>(const T2&amp; that) const</font></td>
- <td>Assign from an object that is a model of polygon 45 with holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
- const</font></td>
- <td>Get the begin iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>end</b>()
- const</font></td>
- <td>Get the end iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_hole_type <b>begin_holes</b>()
- const</font></td>
- <td>Get the begin compact iterator over non-redundant coordinates of the
- polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_hole_type <b>end_holes</b>()
- const</font></td>
- <td>Get the end compact iterator over non-redundant coordinates of the
- polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">std::size_t <b>size</b>() const</font></td>
- <td>Get the number of elements in the sequence stored to the polygon,
- usually equal to the number of edges of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">std::size_t <b>size_holes</b>() const</font></td>
- <td>Get the number of holes in the polygon</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<b>&nbsp;
- <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
- <td>Sets the polygon to the iterator range of points.&nbsp; No check is
- performed to ensure the points describe a 45 degree figure.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<b>&nbsp;
- <br /> </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
- <td>Sets the polygon holes the iterator range of hole polygons.&nbsp; These
- polygons in the input range may be either polygon_45_data or
- polygon_45_with_holes_data or any type that provides begin and end
- member functions to iterate over point_data&lt;T&gt;.</td>
- </tr>
-</tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table3" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Convolves coordinate values of point with the outer
+shell and holes of an object that models polygon_45_with_holes.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Polygon 45 With Holes Data</h1>
+ <p> </p>
+ <p>The library provides a model of polygon 45 with holes concept
+declared
+ <font face="Courier New">template&lt;typename T&gt;
+polygon_45_with_holes_data </font>where T is the coordinate type.</p>
+ <p>This data type is used internally when a 45 degree polygon
+with holes is needed and is available to the library user who finds it
+convenient to use a library polygon data type instead of providing
+their own.&nbsp; The data type is implemented to be convenient to use
+with the library traits.</p>
+ <h2>Members</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
+ <td><font face="Times New Roman">polygon_45_with_holes_concept</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
+ <td><font face="Times New Roman">T</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
+ <td>Iterator over vertices point_data&lt;T&gt; vertices of
+polygon</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">iterator_holes_type</font></b></td>
+ <td><font face="Times New Roman">Iterator over hole
+polygons of type polygon_45_data&lt;T&gt;.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_45_with_holes_data</b>()</font></td>
+ <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_45_with_holes_data</b>(const
+polygon_45_with_holes_data&amp; that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_45_with_holes_data&amp;
+ <b> <br />
+operator=</b>(const polygon_45_with_holes_data&amp; that)</font></td>
+ <td>Assignment operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b> </b> polygon_45_with_holes_data&amp;<b>&nbsp; <br />
+operator=</b>(const T2&amp; that) const</font></td>
+ <td>Assign from an object that is a model of polygon 45
+with holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
+const</font></td>
+ <td>Get the begin iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>end</b>()
+const</font></td>
+ <td>Get the end iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_hole_type
+ <b>begin_holes</b>() const</font></td>
+ <td>Get the begin compact iterator over non-redundant
+coordinates of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_hole_type
+ <b>end_holes</b>() const</font></td>
+ <td>Get the end compact iterator over non-redundant
+coordinates of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">std::size_t <b>size</b>()
+const</font></td>
+ <td>Get the number of elements in the sequence stored to
+the polygon, usually equal to the number of edges of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">std::size_t <b>size_holes</b>()
+const</font></td>
+ <td>Get the number of holes in the polygon</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<b>&nbsp; <br />
+ </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <td>Sets the polygon to the iterator range of points.&nbsp;
+No check is performed to ensure the points describe a 45 degree figure.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<b>&nbsp; <br />
+ </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
+ <td>Sets the polygon holes the iterator range of hole
+polygons.&nbsp; These polygons in the input range may be either
+polygon_45_data or polygon_45_with_holes_data or any type that provides
+begin and end member functions to iterate over point_data&lt;T&gt;.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table3" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_polygon_90_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_polygon_90_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_polygon_90_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,411 +1,469 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Polygon 90 Concept</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Polygon 90 Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Polygon 90 Concept</h1>
-
-<p>
-</p><p>The polygon_90 concept tag is <font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Polygon 90 Concept</h1>
+ <p> </p>
+ <p>The polygon_90 concept tag is <font face="Courier New">
 polygon_90_concept</font></p>
-<p>
-To register a user defined type as a model of
-<font face="Times New Roman">polygon_90 </font>concept, specialize the
-geometry concept meta-function for that type.&nbsp; In the example below CPolygon90 is registered as a model of
-polygon_90&nbsp; concept.</p><p>
-<font face="Courier New">template &lt;&gt;<br />
-struct geometry_concept&lt;CPolygon90&gt; { typedef polygon_90_concept type; };</font></p><p>
-<font face="Times New Roman">The semantic of a polygon_90 is that it can provide
-iterators over the x and y coordinates that correspond to its horizontal and
-vertical sides, starting with an x coordinate.&nbsp; A mutable polygon_90 must
-also be able to set its geometry based on an interator range over such
-coordinates.&nbsp; Since most polygons use vertex points in internal storage
-iterator adaptors for converting to and from point sequences are provided in
-iterator_points_to_compact.hpp and iterator_compact_to_points.hpp to aid in the
-specialization of polygon_90_traits.&nbsp; A std::vector&lt;int&gt; or std::list&lt;int&gt;
-could be made models of polygon_90_concept by simply providing access to their
-iterators through traits.&nbsp; Library functions that create polygon objects
-require that those objects provide a default constructor.</font></p><p>
-<font face="Times New Roman">Below is shown the default polygon traits.&nbsp;
-Specialization of these traits is required for types that don't conform to the
-default behavior.&nbsp; Note that these traits are also used by the
-polygon_90_with_holes concept.</font></p><p><font face="Courier New">template &lt;typename
-T&gt;<br />
+ <p> To register a user defined type as a model of <font
+ face="Times New Roman">polygon_90 </font>concept, specialize the
+geometry concept meta-function for that type.&nbsp; In the example
+below CPolygon90 is registered as a model of polygon_90&nbsp; concept.</p>
+ <p> <font face="Courier New">template &lt;&gt;<br />
+struct geometry_concept&lt;CPolygon90&gt; { typedef polygon_90_concept
+type; };</font></p>
+ <p> <font face="Times New Roman">The semantic of a polygon_90 is
+that it can provide iterators over the x and y coordinates that
+correspond to its horizontal and vertical sides, starting with an x
+coordinate.&nbsp; A mutable polygon_90 must also be able to set its
+geometry based on an interator range over such coordinates.&nbsp; Since
+most polygons use vertex points in internal storage iterator adaptors
+for converting to and from point sequences are provided in
+iterator_points_to_compact.hpp and iterator_compact_to_points.hpp to
+aid in the specialization of polygon_90_traits.&nbsp; A
+std::vector&lt;int&gt; or std::list&lt;int&gt; could be made models of
+polygon_90_concept by simply providing access to their iterators
+through traits.&nbsp; Library functions that create polygon objects
+require that those objects provide a default constructor.</font></p>
+ <p> <font face="Times New Roman">Below is shown the default
+polygon traits.&nbsp; Specialization of these traits is required for
+types that don't conform to the default behavior.&nbsp; Note that these
+traits are also used by the polygon_90_with_holes concept.</font></p>
+ <p><font face="Courier New">template &lt;typename T&gt;<br />
 struct polygon_90_traits {<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::coordinate_type coordinate_type;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::compact_iterator_type
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::coordinate_type
+coordinate_type;<br />
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::compact_iterator_type
 compact_iterator_type;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline compact_iterator_type begin_compact(const
-T&amp; t) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.begin_compact();<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline compact_iterator_type
+begin_compact(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+t.begin_compact();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline compact_iterator_type end_compact(const
-T&amp; t) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.end_compact();<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline compact_iterator_type
+end_compact(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+t.end_compact();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size(const T&amp;
+t) {<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.size();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline winding_direction winding(const T&amp; t) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return unknown_winding;<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline winding_direction winding(const
+T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+unknown_winding;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</font></p>
-<p><font face="Courier New">template &lt;typename T&gt;<br />
+ <p><font face="Courier New">template &lt;typename T&gt;<br />
 struct polygon_90_mutable_traits { <br />
 &nbsp;&nbsp;&nbsp;&nbsp; template &lt;typename iT&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_compact(T&amp; t, iT input_begin, iT
-input_end) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.set_compact(input_begin,
-input_end);<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_compact(T&amp; t, iT
+input_begin, iT input_end) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+t.set_compact(input_begin, input_end);<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }</font><br />
-<font face="Courier New">};</font></p>
-<p>An object that is a model of <font face="Courier New">
-polygon_90_concept</font> can be viewed as a model of any of its
-refinements if it is determined at runtime to conform to the restriction of
-those concepts.&nbsp; This concept casting is accomplished through the
-<font face="Courier New">view_as&lt;&gt;()</font> function.</p>
-<p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_90_object)</font></p>
-<p>The return value of <font face="Courier New">view_as&lt;&gt;()</font> can be
-passed into any interface that expects an object of the conceptual type
-specified in its template parameter.</p>
-<h2>Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- compact_iterator_type <b>begin_compact</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_90.&nbsp;
- Returns the begin iterator over the range of coordinates that correspond
- to horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- compact_iterator_type <b>end_compact</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_90.&nbsp;
- Returns the end iterator over the range of coordinates that correspond
- to horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_90.&nbsp;
- Returns the begin iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_90.&nbsp;
- Returns the end iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- iterator&gt;<br />
- void <b>set_compact</b>(T&amp; polygon, iterator b, iterator e)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_90.&nbsp;&nbsp;
- Sets the polygon to the coordinate data range [b,e) that corresponds to
- .horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- iterator&gt;<br />
- void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_90.&nbsp;&nbsp;
- Sets the polygon to the point data range [b,e) that corresponds to
- vertices of a manhattan polygon.&nbsp; Non-manhattan edges between
- successive input points results in undefined behavior.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- unsigned int <b>size</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Returns the number of edges in the
- polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
- <td>Copies data from right object that models polygon_90 into left object
- that models polygon_90.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename point_type&gt;<br />
- bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch=true)</font></td>
- <td>Given an object that models polygon_90 and an object that models
- point, returns true
- if the polygon contains the point.&nbsp; If the consider_touch
- flag is true will return true if the point lies along the boundary of
- the polygon.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br />
- template &lt;typename T, typename point_type&gt;<br />
- void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
- <td>Sets object that models point to the center point of the bounding
- box of an object that models polygon_90.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename rectangle_type&gt;<br />
- bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
- <td>Sets object that models rectangle to the bounding box of an object
- that models polygon_90 and returns true.&nbsp; Returns false and leaves
- bbox unchanged if polygon is empty.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- manhattan_area_type <b>area</b>(const T&amp; polygon)</font></td>
- <td>Returns the area of an object
- that models polygon_90.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
- <td>Returns the winding direction of an object
- that models polygon_90, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.&nbsp;
- Complexity depends upon winding trait.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_difference <b>perimeter</b>(const T&amp; polygon)</font></td>
- <td>Returns the perimeter length of an object
- that models polygon_90.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename transform_type&gt;<br />
- T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
- <td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
- transforming its vertices.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales up coordinate of an object that models
- polygon_90 by unsigned factor.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales down coordinates of an object that models
- polygon_90 by unsigned factor.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, scaling_type&gt;<br />
- T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
- <td>Scales coordinates of an object that models polygon_90 by floating
- point factor.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference displacement)</font></td>
- <td>Adds displacement value to coordinate indicated by orientation_2d of
- vertices of an object that models polygon_90 .&nbsp; Linear wrt.
- vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename polygon_type, typename point_type&gt;<br />
- polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <font face="Courier New">};</font></p>
+ <p>An object that is a model of <font face="Courier New">
+polygon_90_concept</font> can be viewed as a model of any of its
+refinements if it is determined at runtime to conform to the
+restriction of those concepts.&nbsp; This concept casting is
+accomplished through the
+ <font face="Courier New">view_as&lt;&gt;()</font> function.</p>
+ <p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_90_object)</font></p>
+ <p>The return value of <font face="Courier New">view_as&lt;&gt;()</font>
+can be passed into any interface that expects an object of the
+conceptual type specified in its template parameter.</p>
+ <h2>Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+compact_iterator_type <b>begin_compact</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90.&nbsp; Returns the begin iterator over the range of
+coordinates that correspond to horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+compact_iterator_type <b>end_compact</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90.&nbsp; Returns the end iterator over the range of
+coordinates that correspond to horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90.&nbsp; Returns the begin iterator over the range of points
+that correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90.&nbsp; Returns the end iterator over the range of points
+that correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename iterator&gt;<br />
+void <b>set_compact</b>(T&amp; polygon, iterator b, iterator e)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90.&nbsp;&nbsp; Sets the polygon to the coordinate data range
+[b,e) that corresponds to .horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename iterator&gt;<br />
+void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90.&nbsp;&nbsp; Sets the polygon to the point data range [b,e)
+that corresponds to vertices of a manhattan polygon.&nbsp;
+Non-manhattan edges between successive input points results in
+undefined behavior.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+unsigned int <b>size</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Returns the number of
+edges in the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
+ <td>Copies data from right object that models polygon_90
+into left object that models polygon_90.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch=true)</font></td>
+ <td>Given an object that models polygon_90 and an object
+that models point, returns true if the polygon contains the
+point.&nbsp; If the consider_touch flag is true will return true if the
+point lies along the boundary of the polygon.&nbsp; Linear wrt.
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">// get the center
+coordinate<br />
+template &lt;typename T, typename point_type&gt;<br />
+void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
+ <td>Sets object that models point to the center point of
+the bounding box of an object that models polygon_90.&nbsp; Linear wrt.
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename rectangle_type&gt;<br />
+bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
+ <td>Sets object that models rectangle to the bounding box
+of an object that models polygon_90 and returns true.&nbsp; Returns
+false and leaves bbox unchanged if polygon is empty.&nbsp; Linear wrt.
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+manhattan_area_type <b>area</b>(const T&amp; polygon)</font></td>
+ <td>Returns the area of an object that models
+polygon_90.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
+ <td>Returns the winding direction of an object that models
+polygon_90, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.&nbsp; Complexity
+depends upon winding trait.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_difference <b>perimeter</b>(const T&amp; polygon)</font></td>
+ <td>Returns the perimeter length of an object that models
+polygon_90.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename transform_type&gt;<br />
+T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
+ <td>Applies transform() on the vertices of polygon and sets
+the polygon to that described by the result of transforming its
+vertices.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales up coordinate of an object that models
+polygon_90 by unsigned factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales down coordinates of an object that models
+polygon_90 by unsigned factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, scaling_type&gt;<br />
+T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
+ <td>Scales coordinates of an object that models polygon_90
+by floating point factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference
+displacement)</font></td>
+ <td>Adds displacement value to coordinate indicated by
+orientation_2d of vertices of an object that models polygon_90 .&nbsp;
+Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_type, typename point_type&gt;<br />
+polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const point_type&amp; point)</font></td>
- <td>Convolves coordinate values of point with vertices of an
- object that models polygon_90.&nbsp; Linear wrt. vertices.</td>
- </tr>
- </tbody></table>
- <h1>Polygon 90 Data</h1>
-
-<p>
-</p><p>The library provides a model of polygon 90 concept declared
-<font face="Courier New">
-template&lt;typename T&gt; polygon_90_data </font>where T is the coordinate type.</p>
-<p>This data type is used internally when a Manhattan polygon is needed and is
-available to the library user who finds it convenient to use a library polygon
-data type instead of providing their own.&nbsp; The data type is implemented to
-be convenient to use with the library traits.</p>
-<h2>Members</h2>
-<table id="table2" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
- <td><font face="Times New Roman">polygon_90_concept</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
- <td><font face="Times New Roman">T</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
- <td>Iterator over vertices point_data&lt;T&gt; vertices of polygon</td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">compact_iterator_type</font></b></td>
- <td><font face="Times New Roman">Iterator over non-redundant coordinates
- of the polygon, alternating x, y, x, y starting with an x, where each x
- corresponds to a vertical edge and each y corresponds to a horizontal
- edge.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_90_data</b>()</font></td>
- <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_90_data</b>(const
- polygon_90_data&amp; that)</font></td>
- <td><font face="Times New Roman">Copy construct</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_90_data&amp; <b>operator=</b>(const
- polygon_90_data&amp; that)</font></td>
- <td>Assignment operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T2&gt;<b>&nbsp;
- <br /> </b>polygon_90_data&amp; <b>operator=</b>(const T2&amp; that) const</font></td>
- <td>Assign from an object that is a model of polygon 90.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
- const</font></td>
- <td>Get the begin iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>end</b>()
- const</font></td>
- <td>Get the end iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">compact_iterator_type <b>
- begin_compact</b>() const</font></td>
- <td>Get the begin compact iterator over non-redundant coordinates of the
- polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">compact_iterator_type <b>
- end_compact</b>() const</font></td>
- <td>Get the end compact iterator over non-redundant coordinates of the
- polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">std::size_t <b>size</b>() const</font></td>
- <td>Get the number of elements in the sequence stored to the polygon,
- usually equal to the number of edges of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<b>&nbsp;
- <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
- <td>Sets the polygon to the iterator range of points.&nbsp; No check is
- performed to ensure the points describe a Manhattan figure, every other
- x and y value of the points is used to initialize the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<b>&nbsp;
- <br /> </b>void <b>set_compact</b>(iT begin_coords, iT end_coords)</font></td>
- <td>Sets the polygon to the iterator range of coordinates.&nbsp; These
- coordinates correspond to the x values of vertical edges and y values of
- horizontal edges.&nbsp; It is expected that the sequence start with an x
- value and proceed x then y then x then y.</td>
- </tr>
-</tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table3" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Convolves coordinate values of point with vertices of
+an object that models polygon_90.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Polygon 90 Data</h1>
+ <p> </p>
+ <p>The library provides a model of polygon 90 concept declared
+ <font face="Courier New">template&lt;typename T&gt;
+polygon_90_data </font>where T is the coordinate type.</p>
+ <p>This data type is used internally when a Manhattan polygon is
+needed and is available to the library user who finds it convenient to
+use a library polygon data type instead of providing their own.&nbsp;
+The data type is implemented to be convenient to use with the library
+traits.</p>
+ <h2>Members</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
+ <td><font face="Times New Roman">polygon_90_concept</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
+ <td><font face="Times New Roman">T</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
+ <td>Iterator over vertices point_data&lt;T&gt; vertices of
+polygon</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">compact_iterator_type</font></b></td>
+ <td><font face="Times New Roman">Iterator over
+non-redundant coordinates of the polygon, alternating x, y, x, y
+starting with an x, where each x corresponds to a vertical edge and
+each y corresponds to a horizontal edge.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_90_data</b>()</font></td>
+ <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_90_data</b>(const
+polygon_90_data&amp; that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_data&amp;
+ <b>operator=</b>(const polygon_90_data&amp; that)</font></td>
+ <td>Assignment operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b>&nbsp; <br />
+ </b>polygon_90_data&amp; <b>operator=</b>(const T2&amp;
+that) const</font></td>
+ <td>Assign from an object that is a model of polygon 90.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
+const</font></td>
+ <td>Get the begin iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>end</b>()
+const</font></td>
+ <td>Get the end iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">compact_iterator_type
+ <b> begin_compact</b>() const</font></td>
+ <td>Get the begin compact iterator over non-redundant
+coordinates of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">compact_iterator_type
+ <b> end_compact</b>() const</font></td>
+ <td>Get the end compact iterator over non-redundant
+coordinates of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">std::size_t <b>size</b>()
+const</font></td>
+ <td>Get the number of elements in the sequence stored to
+the polygon, usually equal to the number of edges of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<b>&nbsp; <br />
+ </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <td>Sets the polygon to the iterator range of points.&nbsp;
+No check is performed to ensure the points describe a Manhattan figure,
+every other x and y value of the points is used to initialize the
+polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<b>&nbsp; <br />
+ </b>void <b>set_compact</b>(iT begin_coords, iT end_coords)</font></td>
+ <td>Sets the polygon to the iterator range of
+coordinates.&nbsp; These coordinates correspond to the x values of
+vertical edges and y values of horizontal edges.&nbsp; It is expected
+that the sequence start with an x value and proceed x then y then x
+then y.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table3" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_polygon_90_set_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_polygon_90_set_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_polygon_90_set_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,917 +1,1016 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Polygon 90 Set Concept</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Polygon 90 Set Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li>Polygon 90 Set Concept</li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Polygon 90 Set Concept</h1>
-
-<p>
-</p><p>The polygon_90_set concept tag is <font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Polygon 90 Set Concept</h1>
+ <p> </p>
+ <p>The polygon_90_set concept tag is <font face="Courier New">
 polygon_90_set_concept</font></p>
-<p>
-<font face="Times New Roman">The semantic of a polygon_90_set is zero or more
-Manhattan geometry regions.</font></p><p>
-<font face="Times New Roman">The motivation for providing the
-polygon_90_set_concept is that it is a very common special case of planar
-geometry which afford the implementation of a variety of optimizations on the
-general planar geometry algorithms.&nbsp; Manhattan geometry processing by the
-polygon_90_set_concept can be 100X faster than arbitrary angle polygon
-manipulation.&nbsp; Because the performance benefits are so large and the
-special case is important enough, the library provides these performance
-benefits for those application domains that require them.</font></p><p>Users are recommended to use std::vector and std::list of user defined polygons
-or library provided polygon_90_set_data&lt;coordinate_type&gt; objects.&nbsp; Lists
-and vectors of models of polygon_90_concept or polygon_90_with_holes_concept or
-rectangle_concept are automatically models of polygon_90_set_concept.</p>
-<h2>Operators</h2>
-<p>The return type of some operators is the <font face="Courier New">polygon_90_set_view</font>
-operator template type.&nbsp; This type is itself a model of the polygon_90_set
-concept, but furthermore can be used as an argument to the <font face="Courier New">polygon_90_set_data</font>
-constructor and assignment operator.&nbsp; The operator template exists to
-eliminate temp copies of intermediate results when Boolean operators are chained
+ <p> <font face="Times New Roman">The semantic of a
+polygon_90_set is zero or more Manhattan geometry regions.</font></p>
+ <p> <font face="Times New Roman">The motivation for providing
+the polygon_90_set_concept is that it is a very common special case of
+planar geometry which afford the implementation of a variety of
+optimizations on the general planar geometry algorithms.&nbsp;
+Manhattan geometry processing by the polygon_90_set_concept can be 100X
+faster than arbitrary angle polygon manipulation.&nbsp; Because the
+performance benefits are so large and the special case is important
+enough, the library provides these performance benefits for those
+application domains that require them.</font></p>
+ <p>Users are recommended to use std::vector and std::list of user
+defined polygons or library provided
+polygon_90_set_data&lt;coordinate_type&gt; objects.&nbsp; Lists and
+vectors of models of polygon_90_concept or
+polygon_90_with_holes_concept or rectangle_concept are automatically
+models of polygon_90_set_concept.</p>
+ <h2>Operators</h2>
+ <p>The return type of some operators is the <font
+ face="Courier New">polygon_90_set_view</font> operator template
+type.&nbsp; This type is itself a model of the polygon_90_set concept,
+but furthermore can be used as an argument to the <font
+ face="Courier New">polygon_90_set_data</font> constructor and
+assignment operator.&nbsp; The operator template exists to eliminate
+temp copies of intermediate results when Boolean operators are chained
 together.</p>
-<p>Operators are declared inside the namespace <font face="Courier New">boost::polygon::operators</font>.</p>
-<table id="table3" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_90_set_view <b>operator</b>|(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean OR operation (polygon set union).&nbsp; Accepts two objects
- that model polygon_90_set or one of its refinements.&nbsp; Returns an
- operator template that performs the operation on demand when chained or
- or nested in a library function call such as assign().&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_90_set_view <b>operator</b>+(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator|.&nbsp; The plus sign is also used for OR
- operations in Boolean logic expressions.&nbsp; O( n log n) runtime
- complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_90_set_view <b>operator</b>&amp;(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean AND operation (polygon set intersection).&nbsp; Accepts two
- objects that model polygon_90_set or one of its refinements.&nbsp; O( n
- log n) runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_90_set_view <b>operator</b>*(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator&amp;.&nbsp; The multiplication symbol is also used for
- AND operations in Boolean logic expressions.&nbsp; O( n log n) runtime
- complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_90_set_view <b>operator</b>^(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean XOR operation (polygon set disjoint-union).&nbsp; Accepts
- two objects that model polygon_90_set or one of its refinements.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
- vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_90_set_view <b>operator</b>-(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean SUBTRACT operation (polygon set difference).&nbsp; Accepts
- two objects that model polygon_90_set or one of its refinements.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>|=(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator|, but with self assignment, left operand must model
- polygon_90_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>+=(T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator+, but with self assignment, left operand must model
- polygon_90_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>&amp;=(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator&amp;, but with self assignment, left operand must model
- polygon_90_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>*=(T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator*, but with self assignment, left operand must model
- polygon_90_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>^=(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator^, but with self assignment, left operand must model
- polygon_90_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>-=(T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator-, but with self assignment, left operand must model
- polygon_90_set and not one of it's refinements.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1&gt;<br />
- T1 <b>operator</b>+(const T1&amp;, coordinate_type bloating)</font></td>
- <td>Performs resize operation, inflating by bloating ammount.&nbsp; If
- negative the result is a shrink instead of bloat.&nbsp; Note: returns
- result by value.&nbsp; O( n log n) runtime complexity and O(n) memory
- wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1 <b>operator</b>-(const T1&amp;, coordinate_type shrinking)</font></td>
- <td>Performs resize operation, deflating by bloating ammount.&nbsp; If
- negative the result is a bloat instead of shrink.&nbsp; Note: returns
- result by value.&nbsp; O( n log n) runtime complexity and O(n) memory
- wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>+=(const T1&amp;, coordinate_type bloating)</font></td>
- <td>Performs resize operation, inflating by bloating ammount.&nbsp; If
- negative the result is a shrink instead of bloat.&nbsp; Returns
- reference to modified argument.&nbsp; O( n log n) runtime complexity and
- O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>-=(const T1&amp;, coordinate_type shrinking)</font></td>
- <td>Performs resize operation, deflating by bloating ammount.&nbsp; If
- negative the result is a bloat instead of shrink.&nbsp; Returns
- reference to modified argument.&nbsp; O( n log n) runtime complexity and
- O(n) memory wrt vertices + intersections.</td>
- </tr>
- </tbody></table>
-<h2>Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>assign</b>(T1&amp; lvalue, const T2&amp; rvalue)</font></td>
- <td>Eliminates overlaps in geometry and copies from an object that
- models polygon_90_set or any of its refinements into an object that
- models polygon_90_set.&nbsp; O( n log n) runtime complexity and O(n)
- memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>equivalence</b>(const T1&amp; lvalue, const T2&amp; rvalue) </font></td>
- <td>Returns true if an object that models polygon_90_set or one of its
- refinements covers the exact same geometric regions as another object
- that models polygon_90_set or one of its refinements.&nbsp; For example:
- two of polygon_90 objects.&nbsp; O( n log n) runtime complexity and O(n)
- memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- output_container_type, typename T&gt;<br />
- void <b>get_rectangles</b>(output_container_type&amp; output, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- const T&amp; polygon_set)</font></td>
- <td>Output container is expected to be a standard container.&nbsp;
- Slices geometry of an object that models polygon_90_set or one of its
- refinements into non overlapping rectangles and appends them to the
- output.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
- vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- output_container_type, typename T&gt;<br />
- void <b>get_max_rectangles</b>(output_container_type&amp; output, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <p>Operators are declared inside the namespace <font
+ face="Courier New">boost::polygon::operators</font>.</p>
+ <table id="table3" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_90_set_view <b>operator</b>|(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Boolean OR operation (polygon set union).&nbsp; Accepts
+two objects that model polygon_90_set or one of its refinements.&nbsp;
+Returns an operator template that performs the operation on demand when
+chained or or nested in a library function call such as assign().&nbsp;
+O( n log n) runtime complexity and O(n) memory wrt vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_90_set_view <b>operator</b>+(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator|.&nbsp; The plus sign is also used for
+OR operations in Boolean logic expressions.&nbsp; O( n log n) runtime
+complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_90_set_view <b>operator</b>&amp;(const T1&amp; l, const
+T2&amp; r)</font></td>
+ <td>Boolean AND operation (polygon set intersection).&nbsp;
+Accepts two objects that model polygon_90_set or one of its
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_90_set_view <b>operator</b>*(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator&amp;.&nbsp; The multiplication symbol
+is also used for AND operations in Boolean logic expressions.&nbsp; O(
+n log n) runtime complexity and O(n) memory wrt vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_90_set_view <b>operator</b>^(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Boolean XOR operation (polygon set
+disjoint-union).&nbsp; Accepts two objects that model polygon_90_set or
+one of its refinements.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections.&nbsp; O( n log n) runtime
+complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_90_set_view <b>operator</b>-(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Boolean SUBTRACT operation (polygon set
+difference).&nbsp; Accepts two objects that model polygon_90_set or one
+of its refinements.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>|=(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator|, but with self assignment, left
+operand must model polygon_90_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>+=(T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator+, but with self assignment, left
+operand must model polygon_90_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>&amp;=(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator&amp;, but with self assignment, left
+operand must model polygon_90_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>*=(T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator*, but with self assignment, left
+operand must model polygon_90_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>^=(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator^, but with self assignment, left
+operand must model polygon_90_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>-=(T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator-, but with self assignment, left
+operand must model polygon_90_set and not one of it's
+refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1&gt;<br />
+T1 <b>operator</b>+(const T1&amp;, coordinate_type bloating)</font></td>
+ <td>Performs resize operation, inflating by bloating
+ammount.&nbsp; If negative the result is a shrink instead of
+bloat.&nbsp; Note: returns result by value.&nbsp; O( n log n) runtime
+complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1 <b>operator</b>-(const T1&amp;, coordinate_type shrinking)</font></td>
+ <td>Performs resize operation, deflating by bloating
+ammount.&nbsp; If negative the result is a bloat instead of
+shrink.&nbsp; Note: returns result by value.&nbsp; O( n log n) runtime
+complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>+=(const T1&amp;, coordinate_type bloating)</font></td>
+ <td>Performs resize operation, inflating by bloating
+ammount.&nbsp; If negative the result is a shrink instead of
+bloat.&nbsp; Returns reference to modified argument.&nbsp; O( n log n)
+runtime complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>-=(const T1&amp;, coordinate_type shrinking)</font></td>
+ <td>Performs resize operation, deflating by bloating
+ammount.&nbsp; If negative the result is a bloat instead of
+shrink.&nbsp; Returns reference to modified argument.&nbsp; O( n log n)
+runtime complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h2>Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; lvalue, const T2&amp; rvalue)</font></td>
+ <td>Eliminates overlaps in geometry and copies from an
+object that models polygon_90_set or any of its refinements into an
+object that models polygon_90_set.&nbsp; O( n log n) runtime complexity
+and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>equivalence</b>(const T1&amp; lvalue, const T2&amp; rvalue) </font></td>
+ <td>Returns true if an object that models polygon_90_set or
+one of its refinements covers the exact same geometric regions as
+another object that models polygon_90_set or one of its
+refinements.&nbsp; For example: two of polygon_90 objects.&nbsp; O( n
+log n) runtime complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container_type, typename T&gt;<br />
+void <b>get_rectangles</b>(output_container_type&amp; output, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const T&amp; polygon_set)</font></td>
+ <td>Output container is expected to be a standard
+container.&nbsp; Slices geometry of an object that models
+polygon_90_set or one of its refinements into non overlapping
+rectangles and appends them to the output.&nbsp; O( n log n) runtime
+complexity and O(n) memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container_type, typename T&gt;<br />
+void <b>get_max_rectangles</b>(output_container_type&amp; output, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const T&amp; polygon_set)</font></td>
+ <td>Output container is expected to be a standard
+container.&nbsp; Given an object that models polygon_90_set or one of
+its refinements finds all overlapping rectangles that are maximal in
+area and appends them to the output.&nbsp; Expected n log n runtime,
+worst case quadratic rutnime.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_set_type&gt;<br />
+void <b>clear</b>(polygon_set_type&amp; polygon_set)</font></td>
+ <td>Makes the object empty of geometry.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_set_type&gt;<br />
+bool <b>empty</b>(const polygon_set_type&amp; polygon_set)</font></td>
+ <td>Checks whether the object is empty of geometry.&nbsp;
+Polygons that are completely covered by holes will result in empty
+returning true.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename rectangle_type&gt;<br />
+bool <b>extents</b>(rectangle_type&amp; extents_rectangle, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const T&amp; polygon_set)</font></td>
- <td>Output container is expected to be a standard container.&nbsp; Given
- an object that models polygon_90_set or one of its refinements finds all
- overlapping rectangles that are maximal in area and appends them to the
- output.&nbsp; Expected n log n runtime, worst case quadratic rutnime.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- polygon_set_type&gt;<br />
- void <b>clear</b>(polygon_set_type&amp; polygon_set)</font></td>
- <td>Makes the object empty of geometry.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- polygon_set_type&gt;<br />
- bool <b>empty</b>(const polygon_set_type&amp; polygon_set)</font></td>
- <td>Checks whether the object is empty of geometry.&nbsp; Polygons that
- are completely covered by holes will result in empty returning true.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- rectangle_type&gt;<br />
- bool <b>extents</b>(rectangle_type&amp; extents_rectangle, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const
- T&amp; polygon_set)</font></td>
- <td>Computes bounding box of an object that models polygon_90_set and
- stores it in an object that models rectangle.&nbsp; If the polygon set
- is empty returns false.&nbsp; If there are holes outside of shells they
- do not contribute to the extents of the polygon set.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- manhattan_area_type <b>area</b>(const T&amp; polygon_set)</font></td>
- <td>Computes the area covered by geometry in an object that models
- polygon_90_set.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
- vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>interact</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Given an object that models polygon_90_set and an object that models
- polygon_90_set or one of its refinements, modifies a to retain only
- regions that overlap or touch regions in b.&nbsp; O( n log n) runtime
- complexity and O(n) memory wrt vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>self_intersect</b>(T&amp; polygon_set)</font></td>
- <td>Given an object that models polygon_90_set that has self overlapping
- regions, modifies the argument to contain only the regions of overlap.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>self_xor</b>(T&amp; polygon_set)</font></td>
- <td>Given an object that models polygon_90_set that has self overlapping
- regions, modifies the argument to contain only the regions that do not
- overlap.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
- vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; polygon_set, unsigned_area_type bloating)</font></td>
- <td>Same as getting all the rectangles, bloating them and putting them
- back.&nbsp; O( n log n) runtime complexity and O(n) memory wrt vertices
- + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; polygon_set, orientation_2d orient,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type bloating)</font></td>
- <td>Same as getting all the rectangles, bloating them and putting them
- back.&nbsp; O( n log n) runtime complexity and O(n) memory wrt vertices
- + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; polygon_set, orientation_2d orient,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type low_bloating,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- high_bloating)</font></td>
- <td>Same as getting all the rectangles, bloating them and putting them
- back.&nbsp; O( n log n) runtime complexity and O(n) memory wrt vertices
- + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; polygon_set, direction_2d dir,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type bloating)</font></td>
- <td>Same as getting all the rectangles, bloating them and putting them
- back.&nbsp; O( n log n) runtime complexity and O(n) memory wrt vertices
- + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; polygon_set, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- west_bloating,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- east_bloating,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- south_bloating,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- north_bloating)</font></td>
- <td>Same as getting all the rectangles, bloating them and putting them
- back.&nbsp; O( n log n) runtime complexity and O(n) memory wrt vertices
- + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; polygon_set, unsigned_area_type shrinking)</font></td>
- <td>Same as getting all the rectangles of the inverse, bloating them and overwriting
- the polygon set with the resulting regions then negating.&nbsp; O( n log
- n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; polygon_set, orientation_2d orient,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- shrinking)</font></td>
- <td>Same as getting all the rectangles of the inverse, bloating them and overwriting
- the polygon set with the resulting regions then negating.&nbsp; O( n log
- n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; polygon_set, orientation_2d orient,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- low_shrinking,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- high_shrinking)</font></td>
- <td>Same as getting all the rectangles of the inverse, bloating them and overwriting
- the polygon set with the resulting regions then negating.&nbsp; O( n log
- n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; polygon_set, direction_2d dir,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- shrinking)</font></td>
- <td>Same as getting all the rectangles of the inverse, bloating them and overwriting
- the polygon set with the resulting regions then negating.&nbsp; O( n log
- n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; polygon_set, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- west_shrinking,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- east_shrinking,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- south_shrinking,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
- north_shrinking)</font></td>
- <td>Same as getting all the rectangles of the inverse, bloating them and overwriting
- the polygon set with the resulting regions then negating.&nbsp; O( n log
- n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- coord_type&gt;<br />
- T&amp; <b>resize</b>(T&amp; polygon_set, coord_type resizing)</font></td>
- <td>Same as bloat if resizing is positive, same as shrink if resizing is
- negative.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- coord_type&gt;<br />
- T&amp; <b>resize</b>(polygon_set_type&amp; polygon_set, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coord_type west, coord_type east,
- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coord_type south, coord_type north)</font></td>
- <td>Same as bloat if resizing is positive, same as shrink if resizing is
- negative.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
- vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Computes bounding box of an object that models
+polygon_90_set and stores it in an object that models rectangle.&nbsp;
+If the polygon set is empty returns false.&nbsp; If there are holes
+outside of shells they do not contribute to the extents of the polygon
+set.&nbsp; O( n log n) runtime complexity and O(n) memory wrt vertices
++ intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+manhattan_area_type <b>area</b>(const T&amp; polygon_set)</font></td>
+ <td>Computes the area covered by geometry in an object that
+models polygon_90_set.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>interact</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Given an object that models polygon_90_set and an
+object that models polygon_90_set or one of its refinements, modifies a
+to retain only regions that overlap or touch regions in b.&nbsp; O( n
+log n) runtime complexity and O(n) memory wrt vertices + intersections.
+ </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>self_intersect</b>(T&amp; polygon_set)</font></td>
+ <td>Given an object that models polygon_90_set that has
+self overlapping regions, modifies the argument to contain only the
+regions of overlap.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>self_xor</b>(T&amp; polygon_set)</font></td>
+ <td>Given an object that models polygon_90_set that has
+self overlapping regions, modifies the argument to contain only the
+regions that do not overlap.&nbsp; O( n log n) runtime complexity and
+O(n) memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; polygon_set, unsigned_area_type bloating)</font></td>
+ <td>Same as getting all the rectangles, bloating them and
+putting them back.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; polygon_set, orientation_2d orient,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+bloating)</font></td>
+ <td>Same as getting all the rectangles, bloating them and
+putting them back.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; polygon_set, orientation_2d orient,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+low_bloating,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+high_bloating)</font></td>
+ <td>Same as getting all the rectangles, bloating them and
+putting them back.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; polygon_set, direction_2d dir,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+bloating)</font></td>
+ <td>Same as getting all the rectangles, bloating them and
+putting them back.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; polygon_set, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+west_bloating,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+east_bloating,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+south_bloating,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+north_bloating)</font></td>
+ <td>Same as getting all the rectangles, bloating them and
+putting them back.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; polygon_set, unsigned_area_type shrinking)</font></td>
+ <td>Same as getting all the rectangles of the inverse,
+bloating them and overwriting the polygon set with the resulting
+regions then negating.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; polygon_set, orientation_2d orient,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+unsigned_area_type shrinking)</font></td>
+ <td>Same as getting all the rectangles of the inverse,
+bloating them and overwriting the polygon set with the resulting
+regions then negating.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; polygon_set, orientation_2d orient,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+unsigned_area_type low_shrinking,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+unsigned_area_type high_shrinking)</font></td>
+ <td>Same as getting all the rectangles of the inverse,
+bloating them and overwriting the polygon set with the resulting
+regions then negating.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; polygon_set, direction_2d dir,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+unsigned_area_type shrinking)</font></td>
+ <td>Same as getting all the rectangles of the inverse,
+bloating them and overwriting the polygon set with the resulting
+regions then negating.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; polygon_set, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+unsigned_area_type west_shrinking,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+unsigned_area_type east_shrinking,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+unsigned_area_type south_shrinking,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+unsigned_area_type north_shrinking)</font></td>
+ <td>Same as getting all the rectangles of the inverse,
+bloating them and overwriting the polygon set with the resulting
+regions then negating.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename coord_type&gt;<br />
+T&amp; <b>resize</b>(T&amp; polygon_set, coord_type resizing)</font></td>
+ <td>Same as bloat if resizing is positive, same as shrink
+if resizing is negative.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename coord_type&gt;<br />
+T&amp; <b>resize</b>(polygon_set_type&amp; polygon_set, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coord_type west,
+coord_type east, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coord_type
+south, coord_type north)</font></td>
+ <td>Same as bloat if resizing is positive, same as shrink
+if resizing is negative.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>grow_and</b>(T&amp; polygon_set, unsigned_area_type bloating)</font></td>
- <td>Same as bloating non-overlapping regions and then applying self
- intersect to retain only the overlaps introduced by the bloat.&nbsp; O(
- n log n) runtime complexity and O(n) memory wrt vertices +
- intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Same as bloating non-overlapping regions and then
+applying self intersect to retain only the overlaps introduced by the
+bloat.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>grow_and</b>(T&amp; polygon_set, orientation_2d orient,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type bloating)</font></td>
- <td>Same as bloating non-overlapping regions and then applying self
- intersect to retain only the overlaps introduced by the bloat.&nbsp; O(
- n log n) runtime complexity and O(n) memory wrt vertices +
- intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Same as bloating non-overlapping regions and then
+applying self intersect to retain only the overlaps introduced by the
+bloat.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>grow_and</b>(T&amp; polygon_set, orientation_2d orient,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type low_bloating,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type high_bloating)</font></td>
- <td>Same as bloating non-overlapping regions and then applying self
- intersect to retain only the overlaps introduced by the bloat.&nbsp; O(
- n log n) runtime complexity and O(n) memory wrt vertices +
- intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Same as bloating non-overlapping regions and then
+applying self intersect to retain only the overlaps introduced by the
+bloat.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>grow_and</b>(T&amp; polygon_set, direction_2d dir,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type bloating)</font></td>
- <td>Same as bloating non-overlapping regions and then applying self
- intersect to retain only the overlaps introduced by the bloat.&nbsp; O(
- n log n) runtime complexity and O(n) memory wrt vertices +
- intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Same as bloating non-overlapping regions and then
+applying self intersect to retain only the overlaps introduced by the
+bloat.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>grow_and</b>(T&amp; polygon_set, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type west_bloating,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type east_bloating,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type south_bloating,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type north_bloating)</font></td>
- <td>Same as bloating non-overlapping regions and then applying self
- intersect to retain only the overlaps introduced by the bloat.&nbsp; O(
- n log n) runtime complexity and O(n) memory wrt vertices +
- intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Same as bloating non-overlapping regions and then
+applying self intersect to retain only the overlaps introduced by the
+bloat.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>scale_up</b>(T&amp; polygon_set, unsigned_area_type factor)</font></td>
- <td>Scales geometry up by unsigned factor.&nbsp; O( n log n) runtime
- complexity and O(n) memory wrt vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Scales geometry up by unsigned factor.&nbsp; O( n log
+n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>scale_down</b>(T&amp; polygon_set, unsigned_area_type factor)</font></td>
- <td>Scales geometry down by unsigned factor.&nbsp; O( n log n) runtime
- complexity and O(n) memory wrt vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename scaling_type&gt;<br />
+ <td>Scales geometry down by unsigned factor.&nbsp; O( n log
+n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename scaling_type&gt;<br />
 T&amp; <b>scale</b>(polygon_set_type&amp; polygon_set, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const scaling_type&amp; scaling)</font></td>
- <td>Scales geometry by applying scaling.scale() on all vertices.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename coord_type&gt;<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const
+scaling_type&amp; scaling)</font></td>
+ <td>Scales geometry by applying scaling.scale() on all
+vertices.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename coord_type&gt;<br />
 T&amp; <b>move</b>(T&amp; polygon_set,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; orientation_2d orient, coord_type
-displacement)</font></td>
- <td>Moves geometry by displacement amount in the orientation.&nbsp;&nbsp;&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename coord_type&gt;<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; orientation_2d orient,
+coord_type displacement)</font></td>
+ <td>Moves geometry by displacement amount in the
+orientation.&nbsp;&nbsp;&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename coord_type&gt;<br />
 T&amp; <b>move</b>(T&amp; polygon_set, coord_type x_displacement, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coord_type y_displacement)</font></td>
- <td>Moves the geometry by x_dispacement in x and y_displacement in y.&nbsp;
- Note: for consistency should be convolve(polygon_set, point).&nbsp; O( n
- log n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename transformation_type&gt;<br />
+ <td>Moves the geometry by x_dispacement in x and
+y_displacement in y.&nbsp; Note: for consistency should be
+convolve(polygon_set, point).&nbsp; O( n log n) runtime complexity and
+O(n) memory wrt vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename transformation_type&gt;<br />
 T&amp; <b>transform</b>(T&amp; polygon_set,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const
-transformation_type&amp; transformation)</font></td>
- <td>Applies transformation.transform() on all vertices.&nbsp; O( n log
- n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const transformation_type&amp; transformation)</font></td>
+ <td>Applies transformation.transform() on all
+vertices.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>keep</b>(T&amp; polygon_set, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type min_area,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type max_area,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type min_width,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type max_width,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type min_height,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type max_height)</font></td>
- <td>Retains only regions that satisfy the min/max criteria in the
- argument list.&nbsp; Note: useful for visualization to cull too small
- polygons.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
- vertices + intersections. </td>
- </tr>
- </tbody></table>
- <h1>Polygon 90 Set Data Object</h1>
-
-<p>
-</p><p>The polygon 90 set data type encapsulates the internal data format that
-serves as the input to the sweep-line algorithm that implements polygon-clipping
-boolean operations.&nbsp; It also internally keeps track of whether that data
-has been sorted or scanned and maintains the invariant that when its flags
-indicate that the data is sorted or scanned the data has not been changed to
-violate that assumption.&nbsp; Using the Polygon 90 Set Data type directly can
-be more efficient than using lists and vectors of polygons in the functions
-above because of the invariants it can enforce which provide the opportunity to
-maintain the data is sorted form rather than going all the way out to polygons
-then resorting those vertices for a subsequent operation.</p>
-<p>The declaration of Polygon 90 Set Data is the following:</p>
-<p><font face="Courier New">template &lt;typename T&gt;<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+min_height,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+max_height)</font></td>
+ <td>Retains only regions that satisfy the min/max criteria
+in the argument list.&nbsp; Note: useful for visualization to cull too
+small polygons.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices + intersections. </td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Polygon 90 Set Data Object</h1>
+ <p> </p>
+ <p>The polygon 90 set data type encapsulates the internal data
+format that serves as the input to the sweep-line algorithm that
+implements polygon-clipping boolean operations.&nbsp; It also
+internally keeps track of whether that data has been sorted or scanned
+and maintains the invariant that when its flags indicate that the data
+is sorted or scanned the data has not been changed to violate that
+assumption.&nbsp; Using the Polygon 90 Set Data type directly can be
+more efficient than using lists and vectors of polygons in the
+functions above because of the invariants it can enforce which provide
+the opportunity to maintain the data is sorted form rather than going
+all the way out to polygons then resorting those vertices for a
+subsequent operation.</p>
+ <p>The declaration of Polygon 90 Set Data is the following:</p>
+ <p><font face="Courier New">template &lt;typename T&gt;<br />
 class polygon_90_set_data;</font></p>
-<p>The class is parameterized on the coordinate data type.&nbsp; Algorithms that
-benefit from knowledge of the invariants enforced by the class are implemented
-as member functions to provide them access to information about those
-invariants.&nbsp; </p>
-<h2>Member Functions</h2>
-<table id="table2" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New"><b>polygon_90_set_data</b>()</font></td>
- <td>Default constructor.&nbsp; Scanning orientation defaults to
- HORIZONTAL</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_90_set_data</b>(orientation_2d
- orient)</font></td>
- <td>Construct with scanning orientation.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<br />
- <b>polygon_90_set_data</b>(orientation_2d orient, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <p>The class is parameterized on the coordinate data type.&nbsp;
+Algorithms that benefit from knowledge of the invariants enforced by
+the class are implemented as member functions to provide them access to
+information about those invariants.&nbsp; </p>
+ <h2>Member Functions</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_90_set_data</b>()</font></td>
+ <td>Default constructor.&nbsp; Scanning orientation
+defaults to HORIZONTAL</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_90_set_data</b>(orientation_2d
+orient)</font></td>
+ <td>Construct with scanning orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<br />
+ <b>polygon_90_set_data</b>(orientation_2d orient, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 iT input_begin, iT input_end)</font></td>
- <td>Construct with scanning orientation from an iterator range of
- insertable objects.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
- <b>polygon_90_set_data</b>(const polygon_90_set_data&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">template &lt;typename l, typename r, typename op&gt;<br />
-<b>polygon_90_set_data</b>(const polygon_90_set_view&lt;l,r,op&gt;&amp;
-t)</font></td>
- <td>Copy construct from a Boolean operator template.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
-<b>polygon_90_set_data</b>(orientation_2d orient, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <td>Construct with scanning orientation from an iterator
+range of insertable objects.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"> <b>polygon_90_set_data</b>(const
+polygon_90_set_data&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename l, typename r, typename op&gt;<br />
+ <b>polygon_90_set_data</b>(const
+polygon_90_set_view&lt;l,r,op&gt;&amp; t)</font></td>
+ <td>Copy construct from a Boolean operator template.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
+ <b>polygon_90_set_data</b>(orientation_2d orient, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const polygon_90_set_data&amp; that)</font></td>
- <td>Construct with scanning orientation and copy from another polygon
- set.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">polygon_90_set_data&amp; <br /><b>operator=</b>(const polygon_90_set_data&amp; that)</font></td>
- <td>Assignment from another polygon set, may change scanning
- orientation.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">template &lt;typename l, typename r, typename op&gt;<br />
-polygon_90_set_data&amp; <br /><b>operator=</b>(const polygon_90_set_view&lt;l, r,
+ <td>Construct with scanning orientation and copy from
+another polygon set.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_set_data&amp;
+ <br />
+ <b>operator=</b>(const polygon_90_set_data&amp; that)</font></td>
+ <td>Assignment from another polygon set, may change
+scanning orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename l, typename r, typename op&gt;<br />
+polygon_90_set_data&amp; <br />
+ <b>operator=</b>(const polygon_90_set_view&lt;l, r,
 op&gt;&amp; that)</font></td>
- <td>Assignment from a Boolean operator template.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename geometry_object&gt;<br />
-polygon_90_set_data&amp; <b>operator=</b>(const geometry_object&amp; geo)</font></td>
- <td>Assignment from an insertable object.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Assignment from a Boolean operator template.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename geometry_object&gt;<br />
+polygon_90_set_data&amp; <b>operator=</b>(const geometry_object&amp;
+geo)</font></td>
+ <td>Assignment from an insertable object.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename iT&gt;<br />
 void <b>insert</b>(iT input_begin, iT input_end)</font></td>
- <td>Insert objects of an iterator range.&nbsp; Linear wrt. inserted
- vertices.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Insert objects of an iterator range.&nbsp; Linear wrt.
+inserted vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 void <b>insert</b>(const polygon_90_set_data&amp; polygon_set)</font></td>
- <td>Insert a polygon set.&nbsp; Linear wrt. inserted vertices.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Insert a polygon set.&nbsp; Linear wrt. inserted
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename geometry_type&gt;<br />
-void <b>insert</b>(const geometry_type&amp; geometry_object, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool is_hole
-= false)</font></td>
- <td>Insert a geometry object, if is_hole is true then the inserted
- region is subtractive rather than additive.&nbsp; Linear wrt. inserted
- vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename output_container&gt;<br />
+void <b>insert</b>(const geometry_type&amp; geometry_object, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool
+is_hole = false)</font></td>
+ <td>Insert a geometry object, if is_hole is true then the
+inserted region is subtractive rather than additive.&nbsp; Linear wrt.
+inserted vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container&gt;<br />
 void <b>get</b>(output_container&amp; output) const</font></td>
- <td>Expects a standard container of geometry objects.&nbsp; Will scan
- and eliminate overlaps.&nbsp; Converts polygon set geometry to objects
- of that type and appends them to the container.&nbsp; Polygons will be
- output with counterclockwise winding, hole polygons will be output with
- clockwise winding.&nbsp; The last vertex of an output polygon is not the
- duplicate of the first, and the number of points is equal to the number
- of edges.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
- vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename output_container&gt;<br />
+ <td>Expects a standard container of geometry objects.&nbsp;
+Will scan and eliminate overlaps.&nbsp; Converts polygon set geometry
+to objects of that type and appends them to the container.&nbsp;
+Polygons will be output with counterclockwise winding, hole polygons
+will be output with clockwise winding.&nbsp; The last vertex of an
+output polygon is not the duplicate of the first, and the number of
+points is equal to the number of edges.&nbsp; O( n log n) runtime
+complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container&gt;<br />
 void <b>get_polygons</b>(output_container&amp; output) const</font></td>
- <td>Expects a standard container of polygon objects.&nbsp; Will scan and
- eliminate overlaps.&nbsp; Converts polygon set geometry to polygons and
- appends them to the container.&nbsp; Polygons will have holes fractured
- out to the outer boundary along the positive direction of the scanline
- orientation of the polygon set.&nbsp; O( n log n) runtime complexity and
- O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename output_container&gt;<br />
+ <td>Expects a standard container of polygon objects.&nbsp;
+Will scan and eliminate overlaps.&nbsp; Converts polygon set geometry
+to polygons and appends them to the container.&nbsp; Polygons will have
+holes fractured out to the outer boundary along the positive direction
+of the scanline orientation of the polygon set.&nbsp; O( n log n)
+runtime complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container&gt;<br />
 void <b>get_rectangles</b>(output_container&amp; output) const</font></td>
- <td>Expects a standard container of rectangle objects.&nbsp; Will scan
- and eliminate overlaps.&nbsp; Slices polygon set geometry to rectangles
- along the scanning orientation and appends them to the container.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Expects a standard container of rectangle
+objects.&nbsp; Will scan and eliminate overlaps.&nbsp; Slices polygon
+set geometry to rectangles along the scanning orientation and appends
+them to the container.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename output_container&gt;<br />
-void <b>get_rectangles</b>(output_container&amp; output, <br />&nbsp; orientation_2d
-slicing_orientation) const </font>
- </td>
- <td>Expects a standard container of rectangle objects.&nbsp; Will scan
- and eliminate overlaps.&nbsp; Slices polygon set geometry to rectangles
- along the given orientation and appends them to the container.&nbsp; O(
- n log n) runtime complexity and O(n) memory wrt vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+void <b>get_rectangles</b>(output_container&amp; output, <br />
+&nbsp; orientation_2d slicing_orientation) const </font> </td>
+ <td>Expects a standard container of rectangle
+objects.&nbsp; Will scan and eliminate overlaps.&nbsp; Slices polygon
+set geometry to rectangles along the given orientation and appends them
+to the container.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 bool <b>operator==</b>(const polygon_90_set_data&amp; p) const</font></td>
- <td>Once scanned the data representation of geometry within a polygon
- set is in a mathematically canonical form.&nbsp; Comparison between two
- sets is therefore a linear time operation once they are in the scanned
- state. Will scan and eliminate overlaps in both polygon sets.&nbsp; O( n
- log n) runtime complexity and O(n) memory wrt vertices + intersections
- the first time, linear subsequently.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-bool <b>operator!=</b>(const polygon_90_set_data&amp; p) const</font></td>
- <td>Inverse logic of equivalence operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">void <b>clear</b>()</font></td>
- <td>Make the polygon set empty.&nbsp; Note: does not de-allocate memory.&nbsp;
- Use shrink to fit idiom and assign default constructed polygon set to
- de-allocate.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool <b>empty</b>() const </font>
- </td>
- <td>Check whether the polygon set contains no geometry.&nbsp; Will scan
- and eliminate overlaps because subtractive regions might make the
- polygon set empty.&nbsp; O( n log n) runtime complexity and O(n) memory
- wrt vertices + intersections the first time, linear subsequently.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">orientation_2d <b>orient</b>() const</font></td>
- <td>Get the scanning orientation.&nbsp; Depending on the data it is
- sometimes more efficient to scan in a specific orientation.&nbsp; This
- is particularly true of Manhattan geometry data.&nbsp; Constant time.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">void <b>clean</b>() const</font></td>
- <td>Scan and eliminate overlaps.&nbsp; O( n log n) runtime complexity
- and O(n) memory wrt vertices + intersections the first time, constant
- time subsequently.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename input_iterator_type&gt;<br />
-void <b>set</b>(input_iterator_type input_begin, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input_iterator_type input_end,
-<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; orientation_2d orient) </font>
- </td>
- <td>Overwrite geometry in polygon set with insertable objects in the
- iterator range.&nbsp; Also sets the scanning orientation to that
- specified.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename rectangle_type&gt;<br />
+ <td>Once scanned the data representation of geometry within
+a polygon set is in a mathematically canonical form.&nbsp; Comparison
+between two sets is therefore a linear time operation once they are in
+the scanned state. Will scan and eliminate overlaps in both polygon
+sets.&nbsp; O( n log n) runtime complexity and O(n) memory wrt vertices
++ intersections the first time, linear subsequently.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool <b>operator!=</b>(const
+polygon_90_set_data&amp; p) const</font></td>
+ <td>Inverse logic of equivalence operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>clear</b>()</font></td>
+ <td>Make the polygon set empty.&nbsp; Note: does not
+de-allocate memory.&nbsp; Use shrink to fit idiom and assign default
+constructed polygon set to de-allocate.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool <b>empty</b>()
+const </font> </td>
+ <td>Check whether the polygon set contains no
+geometry.&nbsp; Will scan and eliminate overlaps because subtractive
+regions might make the polygon set empty.&nbsp; O( n log n) runtime
+complexity and O(n) memory wrt vertices + intersections the first time,
+linear subsequently.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">orientation_2d <b>orient</b>()
+const</font></td>
+ <td>Get the scanning orientation.&nbsp; Depending on the
+data it is sometimes more efficient to scan in a specific
+orientation.&nbsp; This is particularly true of Manhattan geometry
+data.&nbsp; Constant time.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>clean</b>()
+const</font></td>
+ <td>Scan and eliminate overlaps.&nbsp; O( n log n) runtime
+complexity and O(n) memory wrt vertices + intersections the first time,
+constant time subsequently.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename input_iterator_type&gt;<br />
+void <b>set</b>(input_iterator_type input_begin, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input_iterator_type
+input_end, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; orientation_2d orient)
+ </font> </td>
+ <td>Overwrite geometry in polygon set with insertable
+objects in the iterator range.&nbsp; Also sets the scanning orientation
+to that specified.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type&gt;<br />
 bool <b>extents</b>(rectangle_type&amp; extents_rectangle) const</font></td>
- <td>Given an object that models rectangle, scans and eliminates overlaps
- in the polygon set because subtractive regions may alter its extents
- then computes the bounding box and assigns it to extents_rectangle.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections the first time, linear subsequently.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-polygon_90_set_data&amp;<br />
-<b>bloat</b>(unsigned_area_type west_bloating,<br />
+ <td>Given an object that models rectangle, scans and
+eliminates overlaps in the polygon set because subtractive regions may
+alter its extents then computes the bounding box and assigns it to
+extents_rectangle.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices + intersections the first time, linear subsequently.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_set_data&amp;<br />
+ <b>bloat</b>(unsigned_area_type west_bloating,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type east_bloating,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type south_bloating,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type north_bloating) </font></td>
- <td>Scans to eliminate overlaps and subtractive regions.&nbsp; Inserts
- rectangles of width specified by bloating values to the indicated side
- of geometry within the polygon set and fills corners with rectangles of
- the length and width specified for the adjacent sides.&nbsp; O( n log n)
- runtime complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-polygon_90_set_data&amp;<br />
-<b>shrink</b>(unsigned_area_type west_shrinking,<br />
+ <td>Scans to eliminate overlaps and subtractive
+regions.&nbsp; Inserts rectangles of width specified by bloating values
+to the indicated side of geometry within the polygon set and fills
+corners with rectangles of the length and width specified for the
+adjacent sides.&nbsp; O( n log n) runtime complexity and O(n) memory
+wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_set_data&amp;<br />
+ <b>shrink</b>(unsigned_area_type west_shrinking,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type east_shrinking,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type south_shrinking,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type north_shrinking)</font></td>
- <td>Scans to eliminate overlaps and subtractive regions.&nbsp; Inserts
- subtractiive rectangles of width specified by bloating values to the
- indicated side of geometry within the polygon set and subtractive
- rectangle at convex corners of the length and width specified for the
- adjacent sides.&nbsp; Scans to eliminate overlapping subtractive
- regions.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
- vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
+ <td>Scans to eliminate overlaps and subtractive
+regions.&nbsp; Inserts subtractiive rectangles of width specified by
+bloating values to the indicated side of geometry within the polygon
+set and subtractive rectangle at convex corners of the length and width
+specified for the adjacent sides.&nbsp; Scans to eliminate overlapping
+subtractive regions.&nbsp; O( n log n) runtime complexity and O(n)
+memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_set_data&amp;<br />
+ <b>resize</b>(coordinate_type west, coordinate_type east, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_type south,
+coordinate_type north)</font></td>
+ <td>Call bloat or shrink or shrink then bloat depending on
+whether the resizing values are positive or negative.&nbsp; O( n log n)
+runtime complexity and O(n) memory wrt vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_set_data&amp;
+ <b>move</b>(coordinate_type x_delta, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+coordinate_type y_delta) </font> </td>
+ <td>Add x_delta to x values and y_delta to y values of
+vertices stored within the polygon set.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename transformation_type&gt;<br />
+polygon_90_set_data&amp; <br />
+ <b>transform</b>(const transformation_type&amp;
+transformation) </font> </td>
+ <td>Applies transformation.transform() on vertices stored
+within the polygon set.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_set_data&amp;
+ <b>scale_up</b>(unsigned_area_type factor)</font></td>
+ <td>Scales vertices stored within the polygon set up by
+factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586">
+ <p><font face="Courier New">polygon_90_set_data&amp; <b>scale_down</b>(unsigned_area_type
+factor)</font>&nbsp;</p>
+ </td>
+ <td>Scales vertices stored within the polygon set down by
+factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename scaling_type&gt;<br />
 polygon_90_set_data&amp;<br />
-<b>resize</b>(coordinate_type west, coordinate_type east, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_type south, coordinate_type north)</font></td>
- <td>Call bloat or shrink or shrink then bloat depending on whether the
- resizing values are positive or negative.&nbsp; O( n log n) runtime
- complexity and O(n) memory wrt vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-polygon_90_set_data&amp; <b>move</b>(coordinate_type x_delta, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-coordinate_type y_delta) </font>
- </td>
- <td>Add x_delta to x values and y_delta to y values of vertices stored
- within the polygon set.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename transformation_type&gt;<br />
-polygon_90_set_data&amp; <br /><b>transform</b>(const transformation_type&amp; transformation) </font>
- </td>
- <td>Applies transformation.transform() on vertices stored within the
- polygon set.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-polygon_90_set_data&amp; <b>scale_up</b>(unsigned_area_type factor)</font></td>
- <td>Scales vertices stored within the polygon set up by factor.&nbsp;
- Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586">
-<p><font face="Courier New">polygon_90_set_data&amp; <b>scale_down</b>(unsigned_area_type
-factor)</font>&nbsp;</p></td>
- <td>Scales vertices stored within the polygon set down by factor.&nbsp;
- Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename scaling_type&gt;<br />
-polygon_90_set_data&amp;<br /> <b>scale</b>(const anisotropic_scale_factor&lt;scaling_type&gt;&amp;
- f)</font></td>
- <td>Scales vertices stored within the polygon set by applying f.scale().&nbsp;
- Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_90_set_data&amp; <b>scale</b>(double factor) </font></td>
- <td>Scales vertices stored within the polygon set by floating point
- factor.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_90_set_data&amp; <b>self_xor</b>()</font></td>
- <td>Retain only non-overlapping regions of geometry within polygon set.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_90_set_data&amp; <b>self_intersect</b>()</font></td>
- <td>Retain only overlapping regions of geometry within a polygon set.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_90_set_data&amp;<br /> <b>interact</b>(const polygon_90_set_data&amp; that)</font></td>
- <td>Retain only regions that touch or overlap regions in argument.&nbsp;
- O( n log n) runtime complexity and O(n) memory wrt vertices +
- intersections.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table4" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <b>scale</b>(const
+anisotropic_scale_factor&lt;scaling_type&gt;&amp; f)</font></td>
+ <td>Scales vertices stored within the polygon set by
+applying f.scale().&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_set_data&amp;
+ <b>scale</b>(double factor) </font></td>
+ <td>Scales vertices stored within the polygon set by
+floating point factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_set_data&amp;
+ <b>self_xor</b>()</font></td>
+ <td>Retain only non-overlapping regions of geometry within
+polygon set.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_set_data&amp;
+ <b>self_intersect</b>()</font></td>
+ <td>Retain only overlapping regions of geometry within a
+polygon set.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_set_data&amp;<br />
+ <b>interact</b>(const polygon_90_set_data&amp; that)</font></td>
+ <td>Retain only regions that touch or overlap regions in
+argument.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
+vertices + intersections.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table4" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_polygon_90_with_holes_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_polygon_90_with_holes_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_polygon_90_with_holes_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,464 +1,516 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Polygon 90 With Holes Concept</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Polygon 90 With Holes Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li>Polygon 90 With Holes Concept</li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Polygon 90 With Holes Concept</h1>
-
-<p>
-</p><p>The polygon_90_with_holes concept tag is <font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Polygon 90 With Holes Concept</h1>
+ <p> </p>
+ <p>The polygon_90_with_holes concept tag is <font
+ face="Courier New">
 polygon_90_with_holes_concept</font></p>
-<p>
-To register a user defined type as a model of
-<font face="Times New Roman">polygon_90_with_holes </font>concept, specialize the
-geometry concept meta-function for that type.&nbsp; In the example below CPolygon90WithHoles is registered as a model of
-polygon<font face="Times New Roman">_90_with_holes&nbsp;</font> concept.</p><p>
-<font face="Courier New">template &lt;&gt;<br />
-struct geometry_concept&lt;CPolygon90WithHoles&gt; { typedef polygon_90_with_holes_concept type; };</font></p><p>
-<font face="Times New Roman">The semantic of a polygon_90_with_holes is a
-polygon_90 that it can provide iterators over holes that are also polygon_90.&nbsp;
-A mutable polygon_90_with_holes must also be able to set its geometry based on
-an interator range over polygon_90 holes.&nbsp; There is no convention of
-winding of holes enforced within the library. </font></p><p>
-<font face="Times New Roman">Below is shown the default polygon with holes
-traits.&nbsp; Specialization of these traits is required for types that don't
-conform to the default behavior.</font></p><p><font face="Courier New">template &lt;typename
-T, typename enable = void&gt;<br />
+ <p> To register a user defined type as a model of <font
+ face="Times New Roman">polygon_90_with_holes </font>concept,
+specialize the geometry concept meta-function for that type.&nbsp; In
+the example below CPolygon90WithHoles is registered as a model of
+polygon<font face="Times New Roman">_90_with_holes&nbsp;</font> concept.</p>
+ <p> <font face="Courier New">template &lt;&gt;<br />
+struct geometry_concept&lt;CPolygon90WithHoles&gt; { typedef
+polygon_90_with_holes_concept type; };</font></p>
+ <p> <font face="Times New Roman">The semantic of a
+polygon_90_with_holes is a polygon_90 that it can provide iterators
+over holes that are also polygon_90.&nbsp; A mutable
+polygon_90_with_holes must also be able to set its geometry based on an
+interator range over polygon_90 holes.&nbsp; There is no convention of
+winding of holes enforced within the library. </font></p>
+ <p> <font face="Times New Roman">Below is shown the default
+polygon with holes traits.&nbsp; Specialization of these traits is
+required for types that don't conform to the default behavior.</font></p>
+ <p><font face="Courier New">template &lt;typename T, typename
+enable = void&gt;<br />
 struct polygon_with_holes_traits {<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::iterator_holes_type
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::iterator_holes_type
 iterator_holes_type;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::hole_type hole_type;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type begin_holes(const T&amp;
-t) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.begin_holes();<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type
+begin_holes(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+t.begin_holes();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type end_holes(const T&amp; t)
-{<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.end_holes();<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type
+end_holes(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+t.end_holes();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size_holes(const T&amp; t) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.size_holes();<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size_holes(const
+T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+t.size_holes();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</font></p>
-<p><font face="Courier New">template &lt;typename T, typename enable = void&gt;<br />
+ <p><font face="Courier New">template &lt;typename T, typename
+enable = void&gt;<br />
 struct polygon_with_holes_mutable_traits {<br />
 &nbsp;&nbsp;&nbsp;&nbsp; template &lt;typename iT&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_holes(T&amp; t, iT inputBegin, iT
-inputEnd) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.set_holes(inputBegin,
-inputEnd);<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_holes(T&amp; t, iT
+inputBegin, iT inputEnd) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+t.set_holes(inputBegin, inputEnd);<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</font></p>
-<p>An object that is a model of <font face="Courier New">
-polygon_90_with_holes_concept</font> can be viewed as a model of any of its
-refinements if it is determined at runtime to conform to the restriction of
-those concepts.&nbsp; This concept casting is accomplished through the
-<font face="Courier New">view_as&lt;&gt;()</font> function.</p>
-<p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_90_with_holes_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_90_concept&gt;(polygon_90_with_holes_object)</font></p>
-<p>The return value of <font face="Courier New">view_as&lt;&gt;()</font> can be
-passed into any interface that expects an object of the conceptual type
-specified in its template parameter.</p>
-<h2>Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- compact_iterator_type <b>begin_compact</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_90.&nbsp;
- Returns the begin iterator over the range of coordinates that correspond
- to horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- compact_iterator_type <b>end_compact</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_90.&nbsp;
- Returns the end iterator over the range of coordinates that correspond
- to horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_90_with_holes.&nbsp;
- Returns the begin iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_90_with_holes.&nbsp;
- Returns the end iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- hole_iterator_type <b>begin_holes</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_90_with_holes.&nbsp;
- Returns the begin iterator over the range of coordinates that correspond
- to horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- hole_iterator_type <b>end_</b><b>holes</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_90_with_holes.&nbsp;
- Returns the end iterator over the range of coordinates that correspond
- to horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- iterator&gt;<br />
- void <b>set_compact</b>(T&amp; polygon, iterator b, iterator e)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_90_with_holes.&nbsp;&nbsp;
- Sets the polygon to the coordinate data range [b,e) that corresponds to
- .horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- iterator&gt;<br />
- void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_90_with_holes.&nbsp;&nbsp;
- Sets the polygon to the point data range [b,e) that corresponds to
- vertices of a manhattan polygon.&nbsp; Non-manhattan edges between
- successive input points results in undefined behavior.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- iterator&gt;<br />
- void <b>set_holes</b>(T&amp; polygon, iterator b, iterator e)</font></td>
- <td><font face="Times New Roman">Expects a model of
- polygon_90_with_holes.&nbsp;&nbsp;
- Sets the polygon holes to the hole data range [b,e)</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- unsigned int <b>size</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Returns the number of edges in the
- outer shell of the polygon_90_with_holes.&nbsp; Does not include sizes
- of the holes.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
- <td>Copies data from right object that models polygon_90_with_holes or
- one of its refinements into left object
- that models polygon_90_with_holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename point_type&gt;<br />
- bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch=true)</font></td>
- <td>Given an object that models polygon_90_with_holes and an object that models
- point, returns true
- if the polygon shell contains the point and one of its holes does not
- contain the point.&nbsp; If the consider_touch
- flag is true will return true if the point lies along the boundary of
- the polygon or one of its holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br />
- template &lt;typename T, typename point_type&gt;<br />
- void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
- <td>Sets object that models point to the center point of the bounding
- box of an object that models polygon_90_with_holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename rectangle_type&gt;<br />
- bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
- <td>Sets object that models rectangle to the bounding box of an object
- that models polygon_90_with_holes and returns true.&nbsp; Returns false
- and leaves bbox unchanged if polygon is empty.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- manhattan_area_type <b>area</b>(const T&amp; polygon)</font></td>
- <td>Returns the area of an object
- that models polygon_90_with_holes including subtracting the area of its
- holes from the area of the outer shell polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
- <td>Returns the winding direction of an object
- that models polygon_90_with_holes, LOW == CLOCKWISE, HIGH =
- COUNTERCLOCKWISE.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_difference <b>perimeter</b>(const T&amp; polygon)</font></td>
- <td>Returns the perimeter length of an object
- that models polygon_90, including the perimeters of the holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename transform_type&gt;<br />
- T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
- <td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
- transforming its vertices.&nbsp; Also applies transform() on the holes
- of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales up outer shell and holes of an object that models
- polygon_90 by unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales down outer shell and holes of an object that models
- polygon_90 by unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, scaling_type&gt;<br />
- T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
- <td>Scales outer shell and holes of an object that models polygon_90 by
- floating point factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference displacement)</font></td>
- <td>Adds displacement value to coordinate indicated by orientation_2d of
- vertices of an object that models polygon_90 .</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename polygon_type, typename point_type&gt;<br />
- polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <p>An object that is a model of <font face="Courier New">
+polygon_90_with_holes_concept</font> can be viewed as a model of any of
+its refinements if it is determined at runtime to conform to the
+restriction of those concepts.&nbsp; This concept casting is
+accomplished through the
+ <font face="Courier New">view_as&lt;&gt;()</font> function.</p>
+ <p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_90_with_holes_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_90_concept&gt;(polygon_90_with_holes_object)</font></p>
+ <p>The return value of <font face="Courier New">view_as&lt;&gt;()</font>
+can be passed into any interface that expects an object of the
+conceptual type specified in its template parameter.</p>
+ <h2>Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+compact_iterator_type <b>begin_compact</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90.&nbsp; Returns the begin iterator over the range of
+coordinates that correspond to horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+compact_iterator_type <b>end_compact</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90.&nbsp; Returns the end iterator over the range of
+coordinates that correspond to horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90_with_holes.&nbsp; Returns the begin iterator over the range
+of points that correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90_with_holes.&nbsp; Returns the end iterator over the range of
+points that correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+hole_iterator_type <b>begin_holes</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90_with_holes.&nbsp; Returns the begin iterator over the range
+of coordinates that correspond to horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+hole_iterator_type <b>end_</b><b>holes</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90_with_holes.&nbsp; Returns the end iterator over the range of
+coordinates that correspond to horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename iterator&gt;<br />
+void <b>set_compact</b>(T&amp; polygon, iterator b, iterator e)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90_with_holes.&nbsp;&nbsp; Sets the polygon to the coordinate
+data range [b,e) that corresponds to .horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename iterator&gt;<br />
+void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90_with_holes.&nbsp;&nbsp; Sets the polygon to the point data
+range [b,e) that corresponds to vertices of a manhattan polygon.&nbsp;
+Non-manhattan edges between successive input points results in
+undefined behavior.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename iterator&gt;<br />
+void <b>set_holes</b>(T&amp; polygon, iterator b, iterator e)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_90_with_holes.&nbsp;&nbsp; Sets the polygon holes to the hole
+data range [b,e)</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+unsigned int <b>size</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Returns the number of
+edges in the outer shell of the polygon_90_with_holes.&nbsp; Does not
+include sizes of the holes.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
+ <td>Copies data from right object that models
+polygon_90_with_holes or one of its refinements into left object that
+models polygon_90_with_holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch=true)</font></td>
+ <td>Given an object that models polygon_90_with_holes and
+an object that models point, returns true if the polygon shell contains
+the point and one of its holes does not contain the point.&nbsp; If the
+consider_touch flag is true will return true if the point lies along
+the boundary of the polygon or one of its holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">// get the center
+coordinate<br />
+template &lt;typename T, typename point_type&gt;<br />
+void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
+ <td>Sets object that models point to the center point of
+the bounding box of an object that models polygon_90_with_holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename rectangle_type&gt;<br />
+bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
+ <td>Sets object that models rectangle to the bounding box
+of an object that models polygon_90_with_holes and returns true.&nbsp;
+Returns false and leaves bbox unchanged if polygon is empty.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+manhattan_area_type <b>area</b>(const T&amp; polygon)</font></td>
+ <td>Returns the area of an object that models
+polygon_90_with_holes including subtracting the area of its holes from
+the area of the outer shell polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
+ <td>Returns the winding direction of an object that models
+polygon_90_with_holes, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_difference <b>perimeter</b>(const T&amp; polygon)</font></td>
+ <td>Returns the perimeter length of an object that models
+polygon_90, including the perimeters of the holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename transform_type&gt;<br />
+T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
+ <td>Applies transform() on the vertices of polygon and sets
+the polygon to that described by the result of transforming its
+vertices.&nbsp; Also applies transform() on the holes of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales up outer shell and holes of an object that
+models polygon_90 by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales down outer shell and holes of an object that
+models polygon_90 by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, scaling_type&gt;<br />
+T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
+ <td>Scales outer shell and holes of an object that models
+polygon_90 by floating point factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference
+displacement)</font></td>
+ <td>Adds displacement value to coordinate indicated by
+orientation_2d of vertices of an object that models polygon_90 .</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_type, typename point_type&gt;<br />
+polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const point_type&amp; point)</font></td>
- <td>Convolves coordinate values of point with the outer shell and holes of an
- object that models polygon_90_with_holes.</td>
- </tr>
- </tbody></table>
- <h1>Polygon 90 With Holes Data</h1>
-
-<p>
-</p><p>The library provides a model of polygon 90 with holes concept declared
-<font face="Courier New">
-template&lt;typename T&gt; polygon_90_with_holes_data </font>where T is the
-coordinate type.</p>
-<p>This data type is used internally when a Manhattan polygon with holes is
-needed and is available to the library user who finds it convenient to use a
-library polygon data type instead of providing their own.&nbsp; The data type is
-implemented to be convenient to use with the library traits.</p>
-<h2>Members</h2>
-<table id="table2" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
- <td><font face="Times New Roman">polygon_90_with_holes_concept</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
- <td><font face="Times New Roman">T</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
- <td>Iterator over vertices point_data&lt;T&gt; vertices of polygon</td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">compact_iterator_type</font></b></td>
- <td><font face="Times New Roman">Iterator over non-redundant coordinates
- of the polygon, alternating x, y, x, y starting with an x, where each x
- corresponds to a vertical edge and each y corresponds to a horizontal
- edge.</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">iterator_holes_type</font></b></td>
- <td><font face="Times New Roman">Iterator over hole polygons of type
- polygon_90_data&lt;T&gt;.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_90_with_holes_data</b>()</font></td>
- <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_90_with_holes_data</b>(const
- polygon_90_with_holes_data&amp; that)</font></td>
- <td><font face="Times New Roman">Copy construct</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_90_with_holes_data&amp; <b>
- <br />operator=</b>(const polygon_90_with_holes_data&amp; that)</font></td>
- <td>Assignment operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T2&gt;<b> </b>polygon_90_with_holes_data&amp;<b>&nbsp;
- <br /> operator=</b>(const T2&amp; that) const</font></td>
- <td>Assign from an object that is a model of polygon 90 with holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
- const</font></td>
- <td>Get the begin iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>end</b>()
- const</font></td>
- <td>Get the end iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">compact_iterator_type <b>begin_compact</b>()
- const</font></td>
- <td>Get the begin compact iterator over non-redundant coordinates of the
- polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">compact_iterator_type <b>end_compact</b>()
- const</font></td>
- <td>Get the end compact iterator over non-redundant coordinates of the
- polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_hole_type <b>begin_holes</b>()
- const</font></td>
- <td>Get the begin compact iterator over non-redundant coordinates of the
- polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_hole_type <b>end_holes</b>()
- const</font></td>
- <td>Get the end compact iterator over non-redundant coordinates of the
- polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">std::size_t <b>size</b>() const</font></td>
- <td>Get the number of elements in the sequence stored to the polygon,
- usually equal to the number of edges of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">std::size_t <b>size_holes</b>() const</font></td>
- <td>Get the number of holes in the polygon</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<b>&nbsp;
- <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
- <td>Sets the polygon to the iterator range of points.&nbsp; No check is
- performed to ensure the points describe a Manhattan figure, every other
- x and y value of the points is used to initialize the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<b>&nbsp;
- <br /> </b>void <b>set_compact</b>(iT begin_coords, iT end_coords)</font></td>
- <td>Sets the polygon to the iterator range of coordinates.&nbsp; These
- coordinates correspond to the x values of vertical edges and y values of
- horizontal edges.&nbsp; It is expected that the sequence start with an x
- value and proceed x then y then x then y.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<b>&nbsp;
- <br /> </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
- <td>Sets the polygon holes the iterator range of hole polygons.&nbsp; These
- polygons in the input range may be either polygon_90_data or
- polygon_90_with_holes_data or any type that provides begin_compact and
- end_compact member functions.</td>
- </tr>
-</tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table3" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Convolves coordinate values of point with the outer
+shell and holes of an object that models polygon_90_with_holes.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Polygon 90 With Holes Data</h1>
+ <p> </p>
+ <p>The library provides a model of polygon 90 with holes concept
+declared
+ <font face="Courier New">template&lt;typename T&gt;
+polygon_90_with_holes_data </font>where T is the coordinate type.</p>
+ <p>This data type is used internally when a Manhattan polygon
+with holes is needed and is available to the library user who finds it
+convenient to use a library polygon data type instead of providing
+their own.&nbsp; The data type is implemented to be convenient to use
+with the library traits.</p>
+ <h2>Members</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
+ <td><font face="Times New Roman">polygon_90_with_holes_concept</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
+ <td><font face="Times New Roman">T</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
+ <td>Iterator over vertices point_data&lt;T&gt; vertices of
+polygon</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">compact_iterator_type</font></b></td>
+ <td><font face="Times New Roman">Iterator over
+non-redundant coordinates of the polygon, alternating x, y, x, y
+starting with an x, where each x corresponds to a vertical edge and
+each y corresponds to a horizontal edge.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">iterator_holes_type</font></b></td>
+ <td><font face="Times New Roman">Iterator over hole
+polygons of type polygon_90_data&lt;T&gt;.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_90_with_holes_data</b>()</font></td>
+ <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_90_with_holes_data</b>(const
+polygon_90_with_holes_data&amp; that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_90_with_holes_data&amp;
+ <b> <br />
+operator=</b>(const polygon_90_with_holes_data&amp; that)</font></td>
+ <td>Assignment operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b> </b>polygon_90_with_holes_data&amp;<b>&nbsp; <br />
+operator=</b>(const T2&amp; that) const</font></td>
+ <td>Assign from an object that is a model of polygon 90
+with holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
+const</font></td>
+ <td>Get the begin iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>end</b>()
+const</font></td>
+ <td>Get the end iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">compact_iterator_type
+ <b>begin_compact</b>() const</font></td>
+ <td>Get the begin compact iterator over non-redundant
+coordinates of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">compact_iterator_type
+ <b>end_compact</b>() const</font></td>
+ <td>Get the end compact iterator over non-redundant
+coordinates of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_hole_type
+ <b>begin_holes</b>() const</font></td>
+ <td>Get the begin compact iterator over non-redundant
+coordinates of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_hole_type
+ <b>end_holes</b>() const</font></td>
+ <td>Get the end compact iterator over non-redundant
+coordinates of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">std::size_t <b>size</b>()
+const</font></td>
+ <td>Get the number of elements in the sequence stored to
+the polygon, usually equal to the number of edges of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">std::size_t <b>size_holes</b>()
+const</font></td>
+ <td>Get the number of holes in the polygon</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<b>&nbsp; <br />
+ </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <td>Sets the polygon to the iterator range of points.&nbsp;
+No check is performed to ensure the points describe a Manhattan figure,
+every other x and y value of the points is used to initialize the
+polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<b>&nbsp; <br />
+ </b>void <b>set_compact</b>(iT begin_coords, iT end_coords)</font></td>
+ <td>Sets the polygon to the iterator range of
+coordinates.&nbsp; These coordinates correspond to the x values of
+vertical edges and y values of horizontal edges.&nbsp; It is expected
+that the sequence start with an x value and proceed x then y then x
+then y.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<b>&nbsp; <br />
+ </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
+ <td>Sets the polygon holes the iterator range of hole
+polygons.&nbsp; These polygons in the input range may be either
+polygon_90_data or polygon_90_with_holes_data or any type that provides
+begin_compact and end_compact member functions.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table3" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_polygon_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_polygon_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_polygon_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,378 +1,433 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Polygon Concept</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Polygon Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Polygon Concept</h1>
-
-<p>
-</p><p>The polygon concept tag is <font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Polygon Concept</h1>
+ <p> </p>
+ <p>The polygon concept tag is <font face="Courier New">
 polygon_concept</font></p>
-<p>
-To register a user defined type as a model of
-<font face="Times New Roman">polygon </font>concept, specialize the
-geometry concept meta-function for that type.&nbsp; In the example below CPolygon is registered as a model of
-polygon&nbsp; concept.</p><p>
-<font face="Courier New">template &lt;&gt;<br />
-struct geometry_concept&lt;CPolygon&gt; { typedef polygon_concept type; };</font></p><p>
-<font face="Times New Roman">The semantic of a polygon is that it can provide
-iterators over the points that represent its vertices.&nbsp; It is acceptable to
-have the last edge explict with the first and last point equal to each other or
-implied by this segement that would connect the first and last point.&nbsp; A
-mutable polygon must also be able to set its geometry based on an interator
-range over such points.&nbsp; A std::vector&lt;point_data&lt;int&gt; &gt; or std::list&lt;point_data&lt;int&gt;
-&gt;
-could be made models of polygon_concept by simply providing access to their
-iterators through traits.&nbsp; Library functions that create polygon objects
-require that those objects provide a default constructor.</font></p><p>
-<font face="Times New Roman">Below is shown the default polygon traits.&nbsp;
-Specialization of these traits is required for types that don't conform to the
-default behavior.&nbsp; Note that these same traits are also used by several
-other polygon concepts through SFINE enable template parameter.&nbsp; The SFINE
-enable parameter also allows the library to provide default specialization that
-work for any object that models the 90 degree polygon concepts.</font></p><p>
-<font face="Courier New">template &lt;typename T, typename enable = gtl_yes&gt;<br />
+ <p> To register a user defined type as a model of <font
+ face="Times New Roman">polygon </font>concept, specialize the
+geometry concept meta-function for that type.&nbsp; In the example
+below CPolygon is registered as a model of polygon&nbsp; concept.</p>
+ <p> <font face="Courier New">template &lt;&gt;<br />
+struct geometry_concept&lt;CPolygon&gt; { typedef polygon_concept type;
+};</font></p>
+ <p> <font face="Times New Roman">The semantic of a polygon is
+that it can provide iterators over the points that represent its
+vertices.&nbsp; It is acceptable to have the last edge explict with the
+first and last point equal to each other or implied by this segement
+that would connect the first and last point.&nbsp; A mutable polygon
+must also be able to set its geometry based on an interator range over
+such points.&nbsp; A std::vector&lt;point_data&lt;int&gt; &gt; or
+std::list&lt;point_data&lt;int&gt; &gt; could be made models of
+polygon_concept by simply providing access to their iterators through
+traits.&nbsp; Library functions that create polygon objects require
+that those objects provide a default constructor.</font></p>
+ <p> <font face="Times New Roman">Below is shown the default
+polygon traits.&nbsp; Specialization of these traits is required for
+types that don't conform to the default behavior.&nbsp; Note that these
+same traits are also used by several other polygon concepts through
+SFINE enable template parameter.&nbsp; The SFINE enable parameter also
+allows the library to provide default specialization that work for any
+object that models the 90 degree polygon concepts.</font></p>
+ <p><font face="Courier New">template &lt;typename T, typename
+enable = gtl_yes&gt;<br />
 struct polygon_traits {};<br />
-<br />
+ <br />
 template &lt;typename T&gt;<br />
 struct polygon_traits&lt;T, <br />
 &nbsp; typename gtl_or_4&lt;<br />
-&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename geometry_concept&lt;T&gt;::type,
-polygon_concept&gt;::type,<br />
-&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename geometry_concept&lt;T&gt;::type,
-polygon_concept&gt;::type,<br />
-&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename geometry_concept&lt;T&gt;::type,
-polygon_with_holes_concept&gt;::type,<br />
-&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename geometry_concept&lt;T&gt;::type,
-polygon_with_holes_concept&gt;::type<br />
+&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename
+geometry_concept&lt;T&gt;::type, polygon_concept&gt;::type,<br />
+&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename
+geometry_concept&lt;T&gt;::type, polygon_concept&gt;::type,<br />
+&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename
+geometry_concept&lt;T&gt;::type, polygon_with_holes_concept&gt;::type,<br />
+&nbsp;&nbsp;&nbsp; typename gtl_same_type&lt;typename
+geometry_concept&lt;T&gt;::type, polygon_with_holes_concept&gt;::type<br />
 &nbsp; &gt;::type&gt; {<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::coordinate_type coordinate_type;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::iterator_type iterator_type;<br />
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::coordinate_type
+coordinate_type;<br />
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::iterator_type
+iterator_type;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::point_type point_type;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_type begin_points(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_type begin_points(const
+T&amp; t) {<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.begin();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_type end_points(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_type end_points(const
+T&amp; t) {<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.end();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size(const T&amp;
+t) {<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.size();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline winding_direction winding(const T&amp; t) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return unknown_winding;<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline winding_direction winding(const
+T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+unknown_winding;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</font></p>
-<p><font face="Courier New">template &lt;typename T, typename enable = void&gt;<br />
+ <p><font face="Courier New">template &lt;typename T, typename
+enable = void&gt;<br />
 struct polygon_mutable_traits {<br />
 &nbsp;&nbsp;&nbsp;&nbsp; template &lt;typename iT&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_points(T&amp; t, iT input_begin, iT
-input_end) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.set(input_begin,
-input_end);<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_points(T&amp; t, iT
+input_begin, iT input_end) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+t.set(input_begin, input_end);<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</font></p>
-<p>Example code custom_polygon.cpp
-demonstrates mapping a
- user defined polygon class to the library polygon_concept</p>
-<p>An object that is a model of <font face="Courier New">
-polygon_concept</font> can be viewed as a model of any of its
-refinements if it is determined at runtime to conform to the restriction of
-those concepts.&nbsp; This concept casting is accomplished through the
-<font face="Courier New">view_as&lt;&gt;()</font> function.</p>
-<p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_90_concept&gt;(polygon_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_45_concept&gt;(polygon_object)</font></p>
-<p>The return value of <font face="Courier New">view_as&lt;&gt;()</font> can be
-passed into any interface that expects an object of the conceptual type
-specified in its template parameter. </p>
-<h2>Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon.&nbsp;
- Returns the begin iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon.&nbsp;
- Returns the end iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- iterator&gt;<br />
- void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon.&nbsp;&nbsp;
- Sets the polygon to the point data range [b,e) that corresponds to
- vertices of a manhattan polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- unsigned int <b>size</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Returns the number of edges in the
- polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
- <td>Copies data from right object that models polygon into left object
- that models polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename point_type&gt;<br />
- bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch=true)</font></td>
- <td>Given an object that models polygon and an object that models
- point, returns true
- if the polygon contains the point.&nbsp; If the consider_touch
- flag is true will return true if the point lies along the boundary of
- the polygon.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br />
- template &lt;typename T, typename point_type&gt;<br />
- void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
- <td>Sets object that models point to the center point of the bounding
- box of an object that models polygon.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename rectangle_type&gt;<br />
- bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
- <td>Sets object that models rectangle to the bounding box of an object
- that models polygon and returns true.&nbsp; Returns false and leaves
- bbox unchanged if polygon is empty.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- area_type <b>area</b>(const T&amp; polygon)</font></td>
- <td>Returns the area of an object
- that models polygon.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
- <td>Returns the winding direction of an object
- that models polygon, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.&nbsp;
- Complexity depends upon winding trait.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_distance <b>perimeter</b>(const T&amp; polygon)</font></td>
- <td>Returns the perimeter length of an object
- that models polygon.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename transform_type&gt;<br />
- T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
- <td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
- transforming its vertices.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales up coordinate of an object that models
- polygon by unsigned factor.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales down coordinates of an object that models
- polygon by unsigned factor.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, scaling_type&gt;<br />
- T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
- <td>Scales coordinates of an object that models polygon by floating
- point factor.&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference displacement)</font></td>
- <td>Adds displacement value to coordinate indicated by orientation_2d of
- vertices of an object that models polygon .&nbsp; Linear wrt. vertices.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename polygon_type, typename point_type&gt;<br />
- polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <p>Example code custom_polygon.cpp
+demonstrates mapping a user defined polygon class to the library
+polygon_concept</p>
+ <p>An object that is a model of <font face="Courier New">
+polygon_concept</font> can be viewed as a model of any of its
+refinements if it is determined at runtime to conform to the
+restriction of those concepts.&nbsp; This concept casting is
+accomplished through the
+ <font face="Courier New">view_as&lt;&gt;()</font> function.</p>
+ <p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_90_concept&gt;(polygon_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_45_concept&gt;(polygon_object)</font></p>
+ <p>The return value of <font face="Courier New">view_as&lt;&gt;()</font>
+can be passed into any interface that expects an object of the
+conceptual type specified in its template parameter. </p>
+ <h2>Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon.&nbsp; Returns the begin iterator over the range of points that
+correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon.&nbsp; Returns the end iterator over the range of points that
+correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename iterator&gt;<br />
+void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon.&nbsp;&nbsp; Sets the polygon to the point data range [b,e)
+that corresponds to vertices of a manhattan polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+unsigned int <b>size</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Returns the number of
+edges in the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
+ <td>Copies data from right object that models polygon into
+left object that models polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch=true)</font></td>
+ <td>Given an object that models polygon and an object that
+models point, returns true if the polygon contains the point.&nbsp; If
+the consider_touch flag is true will return true if the point lies
+along the boundary of the polygon.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">// get the center
+coordinate<br />
+template &lt;typename T, typename point_type&gt;<br />
+void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
+ <td>Sets object that models point to the center point of
+the bounding box of an object that models polygon.&nbsp; Linear wrt.
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename rectangle_type&gt;<br />
+bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
+ <td>Sets object that models rectangle to the bounding box
+of an object that models polygon and returns true.&nbsp; Returns false
+and leaves bbox unchanged if polygon is empty.&nbsp; Linear wrt.
+vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+area_type <b>area</b>(const T&amp; polygon)</font></td>
+ <td>Returns the area of an object that models
+polygon.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
+ <td>Returns the winding direction of an object that models
+polygon, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.&nbsp; Complexity
+depends upon winding trait.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_distance <b>perimeter</b>(const T&amp; polygon)</font></td>
+ <td>Returns the perimeter length of an object that models
+polygon.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename transform_type&gt;<br />
+T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
+ <td>Applies transform() on the vertices of polygon and sets
+the polygon to that described by the result of transforming its
+vertices.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales up coordinate of an object that models polygon
+by unsigned factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales down coordinates of an object that models
+polygon by unsigned factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, scaling_type&gt;<br />
+T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
+ <td>Scales coordinates of an object that models polygon by
+floating point factor.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference
+displacement)</font></td>
+ <td>Adds displacement value to coordinate indicated by
+orientation_2d of vertices of an object that models polygon .&nbsp;
+Linear wrt. vertices.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_type, typename point_type&gt;<br />
+polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const point_type&amp; point)</font></td>
- <td>Convolves coordinate values of point with vertices of an
- object that models polygon.&nbsp; Linear wrt. vertices.</td>
- </tr>
- </tbody></table>
- <h1>Polygon Data</h1>
-
-<p>
-</p><p>The library provides a model of polygon concept declared
-<font face="Courier New">
-template&lt;typename T&gt; polygon_data </font>where T is the coordinate type.</p>
-<p>This data type is used internally when a polygon is needed and is available
-to the library user who finds it convenient to use a library polygon data type
-instead of providing their own.&nbsp; The data type is implemented to be
-convenient to use with the library traits.</p>
-<p>Example code polygon_usage.cpp
-demonstrates using
- the library provided polygon data types and functions</p>
-<h2>Members</h2>
-<table id="table2" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
- <td><font face="Times New Roman">polygon_concept</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
- <td><font face="Times New Roman">T</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
- <td>Iterator over vertices point_data&lt;T&gt; vertices of polygon</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_data</b>()</font></td>
- <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_data</b>(const
- polygon_data&amp; that)</font></td>
- <td><font face="Times New Roman">Copy construct</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_data&amp; <b>operator=</b>(const
- polygon_data&amp; that)</font></td>
- <td>Assignment operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T2&gt;<b>&nbsp;
- <br /> </b>polygon_data&amp; <b>operator=</b>(const T2&amp; that) const</font></td>
- <td>Assign from an object that is a model of polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
- const</font></td>
- <td>Get the begin iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>end</b>()
- const</font></td>
- <td>Get the end iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">std::size_t <b>size</b>() const</font></td>
- <td>Get the number of elements in the sequence stored to the polygon,
- usually equal to the number of edges of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<b>&nbsp;
- <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
- <td>Sets the polygon to the iterator range of points.&nbsp; </td>
- </tr>
-</tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table3" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Convolves coordinate values of point with vertices of
+an object that models polygon.&nbsp; Linear wrt. vertices.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Polygon Data</h1>
+ <p> </p>
+ <p>The library provides a model of polygon concept declared
+ <font face="Courier New">template&lt;typename T&gt; polygon_data </font>where
+T is the coordinate type.</p>
+ <p>This data type is used internally when a polygon is needed and
+is available to the library user who finds it convenient to use a
+library polygon data type instead of providing their own.&nbsp; The
+data type is implemented to be convenient to use with the library
+traits.</p>
+ <p>Example code
polygon_usage.cpp
+demonstrates using the library provided polygon data types and functions</p>
+ <h2>Members</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
+ <td><font face="Times New Roman">polygon_concept</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
+ <td><font face="Times New Roman">T</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
+ <td>Iterator over vertices point_data&lt;T&gt; vertices of
+polygon</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_data</b>()</font></td>
+ <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_data</b>(const
+polygon_data&amp; that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_data&amp; <b>operator=</b>(const
+polygon_data&amp; that)</font></td>
+ <td>Assignment operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b>&nbsp; <br />
+ </b>polygon_data&amp; <b>operator=</b>(const T2&amp; that)
+const</font></td>
+ <td>Assign from an object that is a model of polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
+const</font></td>
+ <td>Get the begin iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>end</b>()
+const</font></td>
+ <td>Get the end iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">std::size_t <b>size</b>()
+const</font></td>
+ <td>Get the number of elements in the sequence stored to
+the polygon, usually equal to the number of edges of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<b>&nbsp; <br />
+ </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <td>Sets the polygon to the iterator range of points.&nbsp;
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table3" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_polygon_set_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_polygon_set_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_polygon_set_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,672 +1,732 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Polygon Set Concept</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Polygon Set Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Polygon Set Concept</h1>
-
-<p>
-</p><p>The polygon_set concept tag is <font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Polygon Set Concept</h1>
+ <p> </p>
+ <p>The polygon_set concept tag is <font face="Courier New">
 polygon_set_concept</font></p>
-<p>
-<font face="Times New Roman">The semantic of a polygon_set is zero or more
-geometry regions.&nbsp; A Polygon Set Concept may be defined with floating point
-coordinates, but a snap rounding distance of one integer unit will still be
-applied, furthermore, geometry outside the domain where one integer unit is
-sufficient to provide robustness may lead to undefined behavior in algorithms.&nbsp;
-It is recommended to use integer coordinates for robust operations.&nbsp; In the
-case that data represented contains only Manhattan geometry a runtime check will
-default to the Manhattan algorithm.&nbsp; The results of which are identical to
-what the general algorithm would do, but obtained more efficiently.&nbsp; In the
-case that the data represented contains only Manhattan and 45-degree geometry a
-runtime check will default to the faster 45-degree algorithm.&nbsp; The results
-of which may differ slight from what the general algorithm would do because
-non-integer intersections will be handled differently.</font></p><p>Users are recommended to use std::vector and std::list of user defined polygons
-or library provided polygon_set_data&lt;coordinate_type&gt; objects.&nbsp; Lists
-and vectors of models of polygon_concept or polygon_with_holes_concept are automatically models of polygon_set_concept.</p>
-<p>Example code custom_polygon_set.cpp
- demonstrates mapping a user defined class to the library polygon_set_concept</p>
-<p>An object that is a model of <font face="Courier New">
-polygon_set_concept</font> can be viewed as a model of <font face="Courier New">
+ <p> <font face="Times New Roman">The semantic of a polygon_set
+is zero or more geometry regions.&nbsp; A Polygon Set Concept may be
+defined with floating point coordinates, but a snap rounding distance
+of one integer unit will still be applied, furthermore, geometry
+outside the domain where one integer unit is sufficient to provide
+robustness may lead to undefined behavior in algorithms.&nbsp; It is
+recommended to use integer coordinates for robust operations.&nbsp; In
+the case that data represented contains only Manhattan geometry a
+runtime check will default to the Manhattan algorithm.&nbsp; The
+results of which are identical to what the general algorithm would do,
+but obtained more efficiently.&nbsp; In the case that the data
+represented contains only Manhattan and 45-degree geometry a runtime
+check will default to the faster 45-degree algorithm.&nbsp; The results
+of which may differ slight from what the general algorithm would do
+because non-integer intersections will be handled differently.</font></p>
+ <p>Users are recommended to use std::vector and std::list of user
+defined polygons or library provided
+polygon_set_data&lt;coordinate_type&gt; objects.&nbsp; Lists and
+vectors of models of polygon_concept or polygon_with_holes_concept are
+automatically models of polygon_set_concept.</p>
+ <p>Example code custom_polygon_set.cpp
+demonstrates mapping a user defined class to the library
+polygon_set_concept</p>
+ <p>An object that is a model of <font face="Courier New">
+polygon_set_concept</font> can be viewed as a model of <font
+ face="Courier New">
 polygon_90_set_concept</font> or <font face="Courier New">
-polygon_45_set_concept</font> if it is determined at runtime to conform to the
-restrictions of those concepts.&nbsp; This concept casting is accomplished
-through the <font face="Courier New">view_as&lt;&gt;()</font> function.</p>
-<p><font face="Courier New">view_as&lt;polygon_90_set_concept&gt;(polygon_set_object)<br />
+polygon_45_set_concept</font> if it is determined at runtime to conform
+to the restrictions of those concepts.&nbsp; This concept casting is
+accomplished through the <font face="Courier New">view_as&lt;&gt;()</font>
+function.</p>
+ <p><font face="Courier New">view_as&lt;polygon_90_set_concept&gt;(polygon_set_object)<br />
 view_as&lt;polygon_45_set_concept&gt;(polygon_set_object)</font></p>
-<p>The return value of <font face="Courier New">view_as&lt;&gt;()</font> can be passed
-into any interface that expects an object of the conceptual type specified in
-its template parameter.&nbsp; Polygon sets cannot be viewed as single polygons
-or rectangles since it generally cannot be known whether a polygon set contains
-only a single polygon without converting to polygons.</p>
-<h2>Operators</h2>
-<p>The return type of some operators is the <font face="Courier New">polygon_set_view</font>
-operator template type.&nbsp; This type is itself a model of the polygon 90 set
-concept, but furthermore can be used as an argument to the <font face="Courier New">polygon_set_data</font>
-constructor and assignment operator.&nbsp; The operator template exists to
-eliminate temp copies of intermediate results when Boolean operators are chained
-together.</p>
-<p>Operators are declared inside the namespace <font face="Courier New">boost::polygon::operators</font>.</p>
-<table id="table5" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_set_view <b>operator</b>|(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean OR operation (polygon set union).&nbsp; Accepts two objects
- that model polygon_set or one of its refinements.&nbsp; Returns an
- operator template that performs the operation on demand when chained or
- or nested in a library function call such as assign().&nbsp; Expected n
- log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_set_view <b>operator</b>+(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator|.&nbsp; The plus sign is also used for OR
- operations in Boolean logic expressions.&nbsp; Expected n log n runtime,
- worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_set_view <b>operator</b>&amp;(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean AND operation (polygon set intersection).&nbsp; Accepts two
- objects that model polygon_set or one of its refinements.&nbsp; Expected
- n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_set_view <b>operator</b>*(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator&amp;.&nbsp; The multiplication symbol is also used for
- AND operations in Boolean logic expressions.&nbsp; Expected n log n
- runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_set_view <b>operator</b>^(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean XOR operation (polygon set disjoint-union).&nbsp; Accepts
- two objects that model polygon_set or one of its refinements.&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- polygon_set_view <b>operator</b>-(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Boolean SUBTRACT operation (polygon set difference).&nbsp; Accepts
- two objects that model polygon_set or one of its refinements.&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>|=(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator|, but with self assignment, left operand must model
- polygon_set and not one of it's refinements.&nbsp; Expected n log n
- runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>+=(T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator+, but with self assignment, left operand must model
- polygon_set and not one of it's refinements.&nbsp; Expected n log n
- runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>&amp;=(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator&amp;, but with self assignment, left operand must model
- polygon_set and not one of it's refinements.&nbsp; Expected n log n
- runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>*=(T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator*, but with self assignment, left operand must model
- polygon_set and not one of it's refinements.&nbsp; Expected n log n
- runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>^=(const T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator^, but with self assignment, left operand must model
- polygon_set and not one of it's refinements.&nbsp; Expected n log n
- runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>-=(T1&amp; l, const T2&amp; r)</font></td>
- <td>Same as operator-, but with self assignment, left operand must model
- polygon_set and not one of it's refinements.&nbsp; Expected n log n
- runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1&gt;<br />
- T1 <b>operator</b>+(const T1&amp;, coordinate_type bloating)</font></td>
- <td>Performs resize operation, inflating by bloating ammount.&nbsp; If
- negative the result is a shrink instead of bloat.&nbsp; Note: returns
- result by value.&nbsp; Expected n log n runtime, worst case quadratic
- runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1 <b>operator</b>-(const T1&amp;, coordinate_type shrinking)</font></td>
- <td>Performs resize operation, deflating by bloating ammount.&nbsp; If
- negative the result is a bloat instead of shrink.&nbsp; Note: returns
- result by value.&nbsp; Expected n log n runtime, worst case quadratic
- runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>+=(const T1&amp;, coordinate_type bloating)</font></td>
- <td>Performs resize operation, inflating by bloating ammount.&nbsp; If
- negative the result is a shrink instead of bloat.&nbsp; Returns
- reference to modified argument.&nbsp; Expected n log n runtime, worst
- case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>operator</b>-=(const T1&amp;, coordinate_type shrinking)</font></td>
- <td>Performs resize operation, deflating by bloating ammount.&nbsp; If
- negative the result is a bloat instead of shrink.&nbsp; Returns
- reference to modified argument.&nbsp; Expected n log n runtime, worst
- case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- </tbody></table>
-<h2>Functions</h2>
-<table id="table6" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>assign</b>(T1&amp; lvalue, const T2&amp; rvalue)</font></td>
- <td>Eliminates overlaps in geometry and copies from an object that
- models polygon_set or any of its refinements into an object that
- models polygon_set.&nbsp; Expected n log n runtime, worst case quadratic
- runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>equivalence</b>(const T1&amp; lvalue, const T2&amp; rvalue) </font></td>
- <td>Returns true if an object that models polygon_set or one of its
- refinements covers the exact same geometric regions as another object
- that models polygon_set or one of its refinements.&nbsp; For example:
- two of polygon objects.&nbsp; Expected n log n runtime, worst case
- quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- output_container_type, typename T&gt;<br />
- void <b>get_trapezoids</b>(output_container_type&amp; output, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- const T&amp; polygon_set)</font></td>
- <td>Output container is expected to be a standard container.&nbsp;
- Slices geometry of an object that models polygon_set or one of its
- refinements into non overlapping trapezoids along a vertical slicing
- orientation and appends them to the
- output, which must have a value type that models polygon or polygon_with_holes.&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- output_container_type, typename T&gt;<br />
- void <b>get_trapezoids</b>(output_container_type&amp; output, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- const T&amp; polygon_set,<br />
+ <p>The return value of <font face="Courier New">view_as&lt;&gt;()</font>
+can be passed into any interface that expects an object of the
+conceptual type specified in its template parameter.&nbsp; Polygon sets
+cannot be viewed as single polygons or rectangles since it generally
+cannot be known whether a polygon set contains only a single polygon
+without converting to polygons.</p>
+ <h2>Operators</h2>
+ <p>The return type of some operators is the <font
+ face="Courier New">polygon_set_view</font> operator template
+type.&nbsp; This type is itself a model of the polygon 90 set concept,
+but furthermore can be used as an argument to the <font
+ face="Courier New">polygon_set_data</font> constructor and assignment
+operator.&nbsp; The operator template exists to eliminate temp copies
+of intermediate results when Boolean operators are chained together.</p>
+ <p>Operators are declared inside the namespace <font
+ face="Courier New">boost::polygon::operators</font>.</p>
+ <table id="table5" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_set_view <b>operator</b>|(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Boolean OR operation (polygon set union).&nbsp; Accepts
+two objects that model polygon_set or one of its refinements.&nbsp;
+Returns an operator template that performs the operation on demand when
+chained or or nested in a library function call such as assign().&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_set_view <b>operator</b>+(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator|.&nbsp; The plus sign is also used for
+OR operations in Boolean logic expressions.&nbsp; Expected n log n
+runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_set_view <b>operator</b>&amp;(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Boolean AND operation (polygon set intersection).&nbsp;
+Accepts two objects that model polygon_set or one of its
+refinements.&nbsp; Expected n log n runtime, worst case quadratic
+runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_set_view <b>operator</b>*(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator&amp;.&nbsp; The multiplication symbol
+is also used for AND operations in Boolean logic expressions.&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_set_view <b>operator</b>^(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Boolean XOR operation (polygon set
+disjoint-union).&nbsp; Accepts two objects that model polygon_set or
+one of its refinements.&nbsp; Expected n log n runtime, worst case
+quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+polygon_set_view <b>operator</b>-(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Boolean SUBTRACT operation (polygon set
+difference).&nbsp; Accepts two objects that model polygon_set or one of
+its refinements.&nbsp; Expected n log n runtime, worst case quadratic
+runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>|=(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator|, but with self assignment, left
+operand must model polygon_set and not one of it's refinements.&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>+=(T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator+, but with self assignment, left
+operand must model polygon_set and not one of it's refinements.&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>&amp;=(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator&amp;, but with self assignment, left
+operand must model polygon_set and not one of it's refinements.&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>*=(T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator*, but with self assignment, left
+operand must model polygon_set and not one of it's refinements.&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>^=(const T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator^, but with self assignment, left
+operand must model polygon_set and not one of it's refinements.&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>-=(T1&amp; l, const T2&amp; r)</font></td>
+ <td>Same as operator-, but with self assignment, left
+operand must model polygon_set and not one of it's refinements.&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1&gt;<br />
+T1 <b>operator</b>+(const T1&amp;, coordinate_type bloating)</font></td>
+ <td>Performs resize operation, inflating by bloating
+ammount.&nbsp; If negative the result is a shrink instead of
+bloat.&nbsp; Note: returns result by value.&nbsp; Expected n log n
+runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1 <b>operator</b>-(const T1&amp;, coordinate_type shrinking)</font></td>
+ <td>Performs resize operation, deflating by bloating
+ammount.&nbsp; If negative the result is a bloat instead of
+shrink.&nbsp; Note: returns result by value.&nbsp; Expected n log n
+runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>+=(const T1&amp;, coordinate_type bloating)</font></td>
+ <td>Performs resize operation, inflating by bloating
+ammount.&nbsp; If negative the result is a shrink instead of
+bloat.&nbsp; Returns reference to modified argument.&nbsp; Expected n
+log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>operator</b>-=(const T1&amp;, coordinate_type shrinking)</font></td>
+ <td>Performs resize operation, deflating by bloating
+ammount.&nbsp; If negative the result is a bloat instead of
+shrink.&nbsp; Returns reference to modified argument.&nbsp; Expected n
+log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h2>Functions</h2>
+ <table id="table6" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; lvalue, const T2&amp; rvalue)</font></td>
+ <td>Eliminates overlaps in geometry and copies from an
+object that models polygon_set or any of its refinements into an object
+that models polygon_set.&nbsp; Expected n log n runtime, worst case
+quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>equivalence</b>(const T1&amp; lvalue, const T2&amp; rvalue) </font></td>
+ <td>Returns true if an object that models polygon_set or
+one of its refinements covers the exact same geometric regions as
+another object that models polygon_set or one of its refinements.&nbsp;
+For example: two of polygon objects.&nbsp; Expected n log n runtime,
+worst case quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container_type, typename T&gt;<br />
+void <b>get_trapezoids</b>(output_container_type&amp; output, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const T&amp; polygon_set)</font></td>
+ <td>Output container is expected to be a standard
+container.&nbsp; Slices geometry of an object that models polygon_set
+or one of its refinements into non overlapping trapezoids along a
+vertical slicing orientation and appends them to the output, which must
+have a value type that models polygon or polygon_with_holes.&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container_type, typename T&gt;<br />
+void <b>get_trapezoids</b>(output_container_type&amp; output, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const T&amp; polygon_set,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 orientation_2d orient)</font></td>
- <td>Output container is expected to be a standard container.&nbsp;
- Slices geometry of an object that models polygon_set or one of its
- refinements into non overlapping trapezoids along a the specified slicing
- orientation and appends them to the
- output, which must have a value type that models polygon or polygon_with_holes.&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- polygon_set_type&gt;<br />
- void <b>clear</b>(polygon_set_type&amp; polygon_set)</font></td>
- <td>Makes the object empty of geometry.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- polygon_set_type&gt;<br />
- bool <b>empty</b>(const polygon_set_type&amp; polygon_set)</font></td>
- <td>Checks whether the object is empty of geometry.&nbsp; Polygons that
- are completely covered by holes will result in empty returning true.&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- rectangle_type&gt;<br />
- bool <b>extents</b>(rectangle_type&amp; extents_rectangle, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const
- T&amp; polygon_set)</font></td>
- <td>Computes bounding box of an object that models polygon_set and
- stores it in an object that models rectangle.&nbsp; If the polygon set
- is empty returns false.&nbsp; If there are holes outside of shells they
- do not contribute to the extents of the polygon set.&nbsp; Expected n
- log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- area_type <b>area</b>(const T&amp; polygon_set)</font></td>
- <td>Computes the area covered by geometry in an object that models
- polygon_set.&nbsp; Expected n log n runtime, worst case quadratic
- runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; polygon_set, unsigned_area_type bloating)</font></td>
- <td>Same as getting all the polygons, bloating them and putting them
- back.&nbsp; Expected n log n runtime, worst case quadratic runtime wrt.
- vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; polygon_set, unsigned_area_type shrinking)</font></td>
- <td>Same as getting all the polygons, shrinking them and overwriting
- the polygon set with the resulting regions.&nbsp; Expected n log n
- runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- coord_type&gt;<br />
- T&amp; <b>resize</b>(T&amp; polygon_set, coord_type resizing,<br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool corner_fill_arc = false, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- unsigned int num_circle_segments = 0)</font></td>
- <td>Same as bloat if resizing is positive, same as shrink if resizing is
- negative.&nbsp; Original topology at acute angle vertices is preserved
- by default, segmented circular arcs are inserted if corner_fill_arc is
- true.&nbsp; num_circle_segments specifies number of segments to
- introduce on a full circle when filling acute angle corners with
- circular arcs.&nbsp; Expected n log n runtime, worst case quadratic
- runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Output container is expected to be a standard
+container.&nbsp; Slices geometry of an object that models polygon_set
+or one of its refinements into non overlapping trapezoids along a the
+specified slicing orientation and appends them to the output, which
+must have a value type that models polygon or polygon_with_holes.&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_set_type&gt;<br />
+void <b>clear</b>(polygon_set_type&amp; polygon_set)</font></td>
+ <td>Makes the object empty of geometry.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_set_type&gt;<br />
+bool <b>empty</b>(const polygon_set_type&amp; polygon_set)</font></td>
+ <td>Checks whether the object is empty of geometry.&nbsp;
+Polygons that are completely covered by holes will result in empty
+returning true.&nbsp; Expected n log n runtime, worst case quadratic
+runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename rectangle_type&gt;<br />
+bool <b>extents</b>(rectangle_type&amp; extents_rectangle, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const T&amp; polygon_set)</font></td>
+ <td>Computes bounding box of an object that models
+polygon_set and stores it in an object that models rectangle.&nbsp; If
+the polygon set is empty returns false.&nbsp; If there are holes
+outside of shells they do not contribute to the extents of the polygon
+set.&nbsp; Expected n log n runtime, worst case quadratic runtime wrt.
+vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+area_type <b>area</b>(const T&amp; polygon_set)</font></td>
+ <td>Computes the area covered by geometry in an object that
+models polygon_set.&nbsp; Expected n log n runtime, worst case
+quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; polygon_set, unsigned_area_type bloating)</font></td>
+ <td>Same as getting all the polygons, bloating them and
+putting them back.&nbsp; Expected n log n runtime, worst case quadratic
+runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; polygon_set, unsigned_area_type shrinking)</font></td>
+ <td>Same as getting all the polygons, shrinking them and
+overwriting the polygon set with the resulting regions.&nbsp; Expected
+n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename coord_type&gt;<br />
+T&amp; <b>resize</b>(T&amp; polygon_set, coord_type resizing,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool
+corner_fill_arc = false, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int
+num_circle_segments = 0)</font></td>
+ <td>Same as bloat if resizing is positive, same as shrink
+if resizing is negative.&nbsp; Original topology at acute angle
+vertices is preserved by default, segmented circular arcs are inserted
+if corner_fill_arc is true.&nbsp; num_circle_segments specifies number
+of segments to introduce on a full circle when filling acute angle
+corners with circular arcs.&nbsp; Expected n log n runtime, worst case
+quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>scale_up</b>(T&amp; polygon_set, unsigned_area_type factor)</font></td>
- <td>Scales geometry up by unsigned factor.&nbsp; Expected n log n
- runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+ <td>Scales geometry up by unsigned factor.&nbsp; Expected n
+log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>scale_down</b>(T&amp; polygon_set, unsigned_area_type factor)</font></td>
- <td>Scales geometry down by unsigned factor.&nbsp; Expected n log n
- runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename transformation_type&gt;<br />
+ <td>Scales geometry down by unsigned factor.&nbsp; Expected
+n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename transformation_type&gt;<br />
 T&amp; <b>transform</b>(T&amp; polygon_set,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const
-transformation_type&amp; transformation)</font></td>
- <td>Applies transformation.transform() on all vertices.&nbsp; Expected n
- log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const transformation_type&amp; transformation)</font></td>
+ <td>Applies transformation.transform() on all
+vertices.&nbsp; Expected n log n runtime, worst case quadratic runtime
+wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
 T&amp; <b>keep</b>(T&amp; polygon_set, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type min_area,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type max_area,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type min_width,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type max_width,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type min_height,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type max_height)</font></td>
- <td>Retains only regions that satisfy the min/max criteria in the
- argument list.&nbsp; Note: useful for visualization to cull too small
- polygons.&nbsp; Expected n log n runtime, worst case quadratic runtime
- wrt. vertices + intersections.</td>
- </tr>
- </tbody></table>
- <h1>Polygon Set Data Object</h1>
-
-<p>
-</p><p>The polygon set data type encapsulates the internal data format that
-serves as the input to the sweep-line algorithm that implements polygon-clipping
-Boolean operations.&nbsp; It also internally keeps track of whether that data
-has been sorted or scanned and maintains the invariant that when its flags
-indicate that the data is sorted or scanned the data has not been changed to
-violate that assumption.&nbsp; Using the Polygon Set Data type directly can
-be more efficient than using lists and vectors of polygons in the functions
-above because of the invariants it can enforce which provide the opportunity to
-maintain the data is sorted form rather than going all the way out to polygons
-then resorting those vertices for a subsequent operation.</p>
-<p>The declaration of Polygon Set Data is the following:</p>
-<p><font face="Courier New">template &lt;typename T&gt;<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+min_height,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
+max_height)</font></td>
+ <td>Retains only regions that satisfy the min/max criteria
+in the argument list.&nbsp; Note: useful for visualization to cull too
+small polygons.&nbsp; Expected n log n runtime, worst case quadratic
+runtime wrt. vertices + intersections.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Polygon Set Data Object</h1>
+ <p> </p>
+ <p>The polygon set data type encapsulates the internal data
+format that serves as the input to the sweep-line algorithm that
+implements polygon-clipping Boolean operations.&nbsp; It also
+internally keeps track of whether that data has been sorted or scanned
+and maintains the invariant that when its flags indicate that the data
+is sorted or scanned the data has not been changed to violate that
+assumption.&nbsp; Using the Polygon Set Data type directly can be more
+efficient than using lists and vectors of polygons in the functions
+above because of the invariants it can enforce which provide the
+opportunity to maintain the data is sorted form rather than going all
+the way out to polygons then resorting those vertices for a subsequent
+operation.</p>
+ <p>The declaration of Polygon Set Data is the following:</p>
+ <p><font face="Courier New">template &lt;typename T&gt;<br />
 class polygon_set_data;</font></p>
-<p>The class is parameterized on the coordinate data type.&nbsp; Algorithms that
-benefit from knowledge of the invariants enforced by the class are implemented
-as member functions to provide them access to information about those
-invariants.&nbsp; </p>
-<p>Example code polygon_set_usage.cpp
-demonstrates using
- the library provided polygon set data types and functions</p>
-<h2>Member Functions</h2>
-<table id="table7" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New"><b>polygon_set_data</b>()</font></td>
- <td>Default constructor. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<br />
- <b>polygon_set_data</b>(iT input_begin, iT
- input_end)</font></td>
- <td>Construct with scanning orientation from an iterator range of
- insertable objects.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
- <b>polygon_set_data</b>(const polygon_set_data&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">template &lt;typename l, typename r, typename op&gt;<br />
-<b>polygon_set_data</b>(const polygon_set_view&lt;l,r,op&gt;&amp;
-t)</font></td>
- <td>Copy construct from a Boolean operator template.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">polygon_set_data&amp; <br /><b>operator=</b>(const polygon_set_data&amp; that)</font></td>
- <td>Assignment from another polygon set, may change scanning
- orientation.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">template &lt;typename l, typename r, typename op&gt;<br />
-polygon_set_data&amp; <br /><b>operator=</b>(const polygon_set_view&lt;l, r,
+ <p>The class is parameterized on the coordinate data type.&nbsp;
+Algorithms that benefit from knowledge of the invariants enforced by
+the class are implemented as member functions to provide them access to
+information about those invariants.&nbsp; </p>
+ <p>Example code polygon_set_usage.cpp
+demonstrates using the library provided polygon set data types and
+functions</p>
+ <h2>Member Functions</h2>
+ <table id="table7" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_set_data</b>()</font></td>
+ <td>Default constructor. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<br />
+ <b>polygon_set_data</b>(iT input_begin, iT input_end)</font></td>
+ <td>Construct with scanning orientation from an iterator
+range of insertable objects.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"> <b>polygon_set_data</b>(const
+polygon_set_data&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename l, typename r, typename op&gt;<br />
+ <b>polygon_set_data</b>(const
+polygon_set_view&lt;l,r,op&gt;&amp; t)</font></td>
+ <td>Copy construct from a Boolean operator template.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_set_data&amp;
+ <br />
+ <b>operator=</b>(const polygon_set_data&amp; that)</font></td>
+ <td>Assignment from another polygon set, may change
+scanning orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename l, typename r, typename op&gt;<br />
+polygon_set_data&amp; <br />
+ <b>operator=</b>(const polygon_set_view&lt;l, r,
 op&gt;&amp; that)</font></td>
- <td>Assignment from a Boolean operator template.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename geometry_object&gt;<br />
+ <td>Assignment from a Boolean operator template.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename geometry_object&gt;<br />
 polygon_set_data&amp; <b>operator=</b>(const geometry_object&amp; geo)</font></td>
- <td>Assignment from an insertable object.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Assignment from an insertable object.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename iT&gt;<br />
 void <b>insert</b>(iT input_begin, iT input_end)</font></td>
- <td>Insert objects of an iterator range.&nbsp; Linear wrt vertices
- inserted.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Insert objects of an iterator range.&nbsp; Linear wrt
+vertices inserted.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 void <b>insert</b>(const polygon_set_data&amp; polygon_set)</font></td>
- <td>Insert a polygon set.&nbsp; Linear wrt vertices inserted.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Insert a polygon set.&nbsp; Linear wrt vertices
+inserted.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename geometry_type&gt;<br />
-void <b>insert</b>(const geometry_type&amp; geometry_object, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool is_hole
-= false)</font></td>
- <td>Insert a geometry object, if is_hole is true then the inserted
- region is subtractive rather than additive.&nbsp; Linear wrt vertices
- inserted.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename output_container&gt;<br />
+void <b>insert</b>(const geometry_type&amp; geometry_object, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool
+is_hole = false)</font></td>
+ <td>Insert a geometry object, if is_hole is true then the
+inserted region is subtractive rather than additive.&nbsp; Linear wrt
+vertices inserted.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container&gt;<br />
 void <b>get</b>(output_container&amp; output) const</font></td>
- <td>Expects a standard container of polygons objects.&nbsp; Will scan
- and eliminate overlaps.&nbsp; Converts polygon set geometry to objects
- of the polygon type and appends them to the container.&nbsp; Polygons
- will be output with counterclockwise winding, hole polygons will be
- output with clockwise winding.&nbsp; The last vertex of an output
- polygon is the duplicate of the first, and the number of points is equal
- to the number of edges plus 1.&nbsp; If required by the output data
- type, polygons will have holes fractured out to the outer boundary along
- the positive y direction and off grid intersections on the outer
- boundary introduced by this fracture will be truncated downward.&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename output_container&gt;<br />
+ <td>Expects a standard container of polygons objects.&nbsp;
+Will scan and eliminate overlaps.&nbsp; Converts polygon set geometry
+to objects of the polygon type and appends them to the container.&nbsp;
+Polygons will be output with counterclockwise winding, hole polygons
+will be output with clockwise winding.&nbsp; The last vertex of an
+output polygon is the duplicate of the first, and the number of points
+is equal to the number of edges plus 1.&nbsp; If required by the output
+data type, polygons will have holes fractured out to the outer boundary
+along the positive y direction and off grid intersections on the outer
+boundary introduced by this fracture will be truncated downward.&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename output_container&gt;<br />
 void <b>get_trapezoids</b>(output_container&amp; output) const</font></td>
- <td>Expects a standard container of polygon objects.&nbsp; Will scan
- and eliminate overlaps.&nbsp; Slices polygon set geometry to trapezoids
- vertically and appends them to the container.&nbsp; Expected n log n
- runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <td>Expects a standard container of polygon objects.&nbsp;
+Will scan and eliminate overlaps.&nbsp; Slices polygon set geometry to
+trapezoids vertically and appends them to the container.&nbsp; Expected
+n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename output_container&gt;<br />
-void <b>get_trapezoids</b>(output_container&amp; output, <br />&nbsp; orientation_2d
-slicing_orientation) const </font>
- </td>
- <td>Expects a standard container of polygon objects.&nbsp; Will scan
- and eliminate overlaps.&nbsp; Slices polygon set geometry to trapezoids
- along the given orientation and appends them to the container.&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+void <b>get_trapezoids</b>(output_container&amp; output, <br />
+&nbsp; orientation_2d slicing_orientation) const </font> </td>
+ <td>Expects a standard container of polygon objects.&nbsp;
+Will scan and eliminate overlaps.&nbsp; Slices polygon set geometry to
+trapezoids along the given orientation and appends them to the
+container.&nbsp; Expected n log n runtime, worst case quadratic runtime
+wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 bool <b>operator==</b>(const polygon_set_data&amp; p) const</font></td>
- <td>Once scanned the data representation of geometry within a polygon
- set is in a mathematically canonical form.&nbsp; Comparison between two
- sets is therefore a linear time operation once they are in the scanned
- state. Will scan and eliminate overlaps in both polygon sets.&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.&nbsp; </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-bool <b>operator!=</b>(const polygon_set_data&amp; p) const</font></td>
- <td>Inverse logic of equivalence operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">void <b>clear</b>()</font></td>
- <td>Make the polygon set empty.&nbsp; Note: does not de-allocate memory.&nbsp;
- Use shrink to fit idiom and assign default constructed polygon set to
- de-allocate.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">bool <b>empty</b>() const </font>
- </td>
- <td>Check whether the polygon set contains no geometry.&nbsp; Will scan
- and eliminate overlaps because subtractive regions might make the
- polygon set empty.&nbsp; Expected n log n runtime, worst case quadratic
- runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">void <b>clean</b>() const</font></td>
- <td>Scan and eliminate overlaps.&nbsp; Expected n log n runtime, worst
- case quadratic runtime wrt. vertices + intersections the first time,
- constant time subsequently.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename input_iterator_type&gt;<br />
-void <b>set</b>(input_iterator_type input_begin, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input_iterator_type input_end) </font>
- </td>
- <td>Overwrite geometry in polygon set with insertable objects in the
- iterator range. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename rectangle_type&gt;<br />
+ <td>Once scanned the data representation of geometry within
+a polygon set is in a mathematically canonical form.&nbsp; Comparison
+between two sets is therefore a linear time operation once they are in
+the scanned state. Will scan and eliminate overlaps in both polygon
+sets.&nbsp; Expected n log n runtime, worst case quadratic runtime wrt.
+vertices + intersections.&nbsp; </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool <b>operator!=</b>(const
+polygon_set_data&amp; p) const</font></td>
+ <td>Inverse logic of equivalence operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>clear</b>()</font></td>
+ <td>Make the polygon set empty.&nbsp; Note: does not
+de-allocate memory.&nbsp; Use shrink to fit idiom and assign default
+constructed polygon set to de-allocate.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">bool <b>empty</b>()
+const </font> </td>
+ <td>Check whether the polygon set contains no
+geometry.&nbsp; Will scan and eliminate overlaps because subtractive
+regions might make the polygon set empty.&nbsp; Expected n log n
+runtime, worst case quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <b>clean</b>()
+const</font></td>
+ <td>Scan and eliminate overlaps.&nbsp; Expected n log n
+runtime, worst case quadratic runtime wrt. vertices + intersections the
+first time, constant time subsequently.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename input_iterator_type&gt;<br />
+void <b>set</b>(input_iterator_type input_begin, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input_iterator_type
+input_end) </font> </td>
+ <td>Overwrite geometry in polygon set with insertable
+objects in the iterator range. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type&gt;<br />
 bool <b>extents</b>(rectangle_type&amp; extents_rectangle) const</font></td>
- <td>Given an object that models rectangle, scans and eliminates overlaps
- in the polygon set because subtractive regions may alter its extents
- then computes the bounding box and assigns it to extents_rectangle.&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections the first time, linear subsequently.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
+ <td>Given an object that models rectangle, scans and
+eliminates overlaps in the polygon set because subtractive regions may
+alter its extents then computes the bounding box and assigns it to
+extents_rectangle.&nbsp; Expected n log n runtime, worst case quadratic
+runtime wrt. vertices + intersections the first time, linear
+subsequently.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_set_data&amp;<br />
+ <b>resize</b>(coord_type resizing,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool corner_fill_arc = false, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int num_circle_segments =
+0)</font></td>
+ <td>Inflates if resizing is positive, deflates if resizing
+is negative.&nbsp; Original topology at acute angle vertices is
+preserved by default, segmented circular arcs are inserted if
+corner_fill_arc is true.&nbsp; num_circle_segments specifies number of
+segments to introduce on a full circle when filling acute angle corners
+with circular arcs.&nbsp; Specifying zero for num_circle_segments
+results in only a single segment being inserted at acute corners.&nbsp;
+Expected n log n runtime, worst case quadratic runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename transformation_type&gt;<br />
+polygon_set_data&amp; <br />
+ <b>transform</b>(const transformation_type&amp;
+transformation) </font> </td>
+ <td>Applies transformation.transform() on vertices stored
+within the polygon set.&nbsp; Expected n log n runtime, worst case
+quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_set_data&amp;
+ <b>scale_up</b>(unsigned_area_type factor)</font></td>
+ <td>Scales vertices stored within the polygon set up by
+factor.&nbsp; Expected n log n runtime, worst case quadratic runtime
+wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_set_data&amp;
+ <b>scale_down</b>(unsigned_area_type factor)</font>&nbsp;</td>
+ <td>Scales vertices stored within the polygon set down by
+factor.&nbsp; Expected n log n runtime, worst case quadratic runtime
+wrt. vertices + intersections.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename scaling_type&gt;<br />
 polygon_set_data&amp;<br />
-<b>resize</b>(coord_type resizing,<br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool corner_fill_arc = false, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- unsigned int num_circle_segments = 0)</font></td>
- <td>Inflates if resizing is positive, deflates if resizing is
- negative.&nbsp; Original topology at acute angle vertices is preserved
- by default, segmented circular arcs are inserted if corner_fill_arc is
- true.&nbsp; num_circle_segments specifies number of segments to
- introduce on a full circle when filling acute angle corners with
- circular arcs.&nbsp; Specifying zero for num_circle_segments results in
- only a single segment being inserted at acute corners.&nbsp; Expected n
- log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename transformation_type&gt;<br />
-polygon_set_data&amp; <br /><b>transform</b>(const transformation_type&amp; transformation) </font>
- </td>
- <td>Applies transformation.transform() on vertices stored within the
- polygon set.&nbsp; Expected n log n runtime, worst case quadratic
- runtime wrt. vertices + intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-polygon_set_data&amp; <b>scale_up</b>(unsigned_area_type factor)</font></td>
- <td>Scales vertices stored within the polygon set up by factor.&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">polygon_set_data&amp; <b>scale_down</b>(unsigned_area_type
-factor)</font>&nbsp;</td>
- <td>Scales vertices stored within the polygon set down by factor.&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">
-template &lt;typename scaling_type&gt;<br />
-polygon_set_data&amp;<br /> <b>scale</b>(const scaling_type&amp;
- f)</font></td>
- <td>Scales vertices stored within the polygon set by applying f.scale().&nbsp;
- Expected n log n runtime, worst case quadratic runtime wrt. vertices +
- intersections.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table8" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <b>scale</b>(const scaling_type&amp; f)</font></td>
+ <td>Scales vertices stored within the polygon set by
+applying f.scale().&nbsp; Expected n log n runtime, worst case
+quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table8" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_polygon_with_holes_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_polygon_with_holes_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_polygon_with_holes_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,411 +1,462 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Polygon With Holes Concept</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Polygon With Holes Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li>Polygon With Holes Concept</li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Polygon With Holes Concept</h1>
-
-<p>
-</p><p>The polygon_with_holes concept tag is <font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Polygon With Holes Concept</h1>
+ <p> </p>
+ <p>The polygon_with_holes concept tag is <font face="Courier New">
 polygon_with_holes_concept</font></p>
-<p>
-To register a user defined type as a model of
-<font face="Times New Roman">polygon_with_holes </font>concept, specialize the
-geometry concept meta-function for that type.&nbsp; In the example below
-CPolygonWithHoles is registered as a model of polygon<font face="Times New Roman">_with_holes&nbsp;</font> concept.</p><p>
-<font face="Courier New">template &lt;&gt;<br />
-struct geometry_concept&lt;CPolygonWithHoles&gt; { typedef polygon_with_holes_concept type; };</font></p><p>
-<font face="Times New Roman">The semantic of a polygon_with_holes is a polygon
-that it can provide iterators over holes that are also polygon.&nbsp; A mutable
-polygon_with_holes must also be able to set its geometry based on an interator
-range over polygon holes.&nbsp; There is no convention of winding of holes
-enforced within the library. </font></p><p>
-<font face="Times New Roman">Below is shown the default polygon with holes
-traits.&nbsp; Specialization of these traits is required for types that don't
-conform to the default behavior.&nbsp; Note, these traits are used by all
-polygon with holes concepts.</font></p><p><font face="Courier New">template &lt;typename
-T, typename enable = void&gt;<br />
+ <p> To register a user defined type as a model of <font
+ face="Times New Roman">polygon_with_holes </font>concept, specialize
+the geometry concept meta-function for that type.&nbsp; In the example
+below CPolygonWithHoles is registered as a model of polygon<font
+ face="Times New Roman">_with_holes&nbsp;</font> concept.</p>
+ <p> <font face="Courier New">template &lt;&gt;<br />
+struct geometry_concept&lt;CPolygonWithHoles&gt; { typedef
+polygon_with_holes_concept type; };</font></p>
+ <p> <font face="Times New Roman">The semantic of a
+polygon_with_holes is a polygon that it can provide iterators over
+holes that are also polygon.&nbsp; A mutable polygon_with_holes must
+also be able to set its geometry based on an interator range over
+polygon holes.&nbsp; There is no convention of winding of holes
+enforced within the library. </font></p>
+ <p> <font face="Times New Roman">Below is shown the default
+polygon with holes traits.&nbsp; Specialization of these traits is
+required for types that don't conform to the default behavior.&nbsp;
+Note, these traits are used by all polygon with holes concepts.</font></p>
+ <p><font face="Courier New">template &lt;typename T, typename
+enable = void&gt;<br />
 struct polygon_with_holes_traits {<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::iterator_holes_type
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::iterator_holes_type
 iterator_holes_type;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::hole_type hole_type;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type begin_holes(const T&amp;
-t) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.begin_holes();<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type
+begin_holes(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+t.begin_holes();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type end_holes(const T&amp; t)
-{<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.end_holes();<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline iterator_holes_type
+end_holes(const T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+t.end_holes();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size_holes(const T&amp; t) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t.size_holes();<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline unsigned int size_holes(const
+T&amp; t) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+t.size_holes();<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</font></p>
-<p><font face="Courier New">template &lt;typename T, typename enable = void&gt;<br />
+ <p><font face="Courier New">template &lt;typename T, typename
+enable = void&gt;<br />
 struct polygon_with_holes_mutable_traits {<br />
 &nbsp;&nbsp;&nbsp;&nbsp; template &lt;typename iT&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_holes(T&amp; t, iT inputBegin, iT
-inputEnd) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.set_holes(inputBegin,
-inputEnd);<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline T&amp; set_holes(T&amp; t, iT
+inputBegin, iT inputEnd) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+t.set_holes(inputBegin, inputEnd);<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return t;<br />
 &nbsp;&nbsp;&nbsp;&nbsp; }<br />
 };</font></p>
-<p>An object that is a model of <font face="Courier New">
-polygon_with_holes_concept</font> can be viewed as a model of any of its
-refinements if it is determined at runtime to conform to the restriction of
-those concepts.&nbsp; This concept casting is accomplished through the
-<font face="Courier New">view_as&lt;&gt;()</font> function.</p>
-<p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_with_holes_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_90_concept&gt;(polygon_with_holes_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_90_with_holes_concept&gt;(polygon_with_holes_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_45_concept&gt;(polygon_with_holes_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_45_with_holes_concept&gt;(polygon_with_holes_object)</font><br />
-<font face="Courier New">view_as&lt;polygon_concept&gt;(polygon_with_holes_object)</font></p>
-<p>The return value of <font face="Courier New">view_as&lt;&gt;()</font> can be
-passed into any interface that expects an object of the conceptual type
-specified in its template parameter. </p>
-<h2>Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_with_holes.&nbsp;
- Returns the begin iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_with_holes.&nbsp;
- Returns the end iterator over the range of points that correspond to
- vertices of the polygon.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- hole_iterator_type <b>begin_holes</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_with_holes.&nbsp;
- Returns the begin iterator over the range of coordinates that correspond
- to horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- hole_iterator_type <b>end_holes</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_with_holes.&nbsp;
- Returns the end iterator over the range of coordinates that correspond
- to horizontal and vertical edges.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- iterator&gt;<br />
- void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_with_holes.&nbsp;&nbsp;
- Sets the polygon to the point data range [b,e) that corresponds to
- vertices of a polygon.&nbsp; </font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- iterator&gt;<br />
- void <b>set_holes</b>(T&amp; polygon, iterator b, iterator e)</font></td>
- <td><font face="Times New Roman">Expects a model of polygon_with_holes.&nbsp;&nbsp;
- Sets the polygon holes to the hole data range [b,e)</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- unsigned int <b>size</b>(const T&amp; polygon)</font></td>
- <td><font face="Times New Roman">Returns the number of edges in the
- outer shell of the polygon_with_holes.&nbsp; Does not include sizes of
- the holes.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
- <td>Copies data from right object that models polygon_with_holes or one
- of its refinements into left object
- that models polygon_with_holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename point_type&gt;<br />
- bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch=true)</font></td>
- <td>Given an object that models polygon_with_holes and an object that models
- point, returns true
- if the polygon shell contains the point and one of its holes does not
- contain the point.&nbsp; If the consider_touch
- flag is true will return true if the point lies along the boundary of
- the polygon or one of its holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br />
- template &lt;typename T, typename point_type&gt;<br />
- void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
- <td>Sets object that models point to the center point of the bounding
- box of an object that models polygon_with_holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename rectangle_type&gt;<br />
- bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
- <td>Sets object that models rectangle to the bounding box of an object
- that models polygon_with_holes and returns true.&nbsp; Returns false and
- leaves bbox unchanged if polygon is empty.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- manhattan_area_type <b>area</b>(const T&amp; polygon)</font></td>
- <td>Returns the area of an object
- that models polygon_with_holes including subtracting the area of its
- holes from the area of the outer shell polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
- <td>Returns the winding direction of an object
- that models polygon_with_holes, LOW == CLOCKWISE, HIGH =
- COUNTERCLOCKWISE.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_difference <b>perimeter</b>(const T&amp; polygon)</font></td>
- <td>Returns the perimeter length of an object
- that models polygon, including the perimeters of the holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename transform_type&gt;<br />
- T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
- <td>Applies transform() on the vertices of polygon and sets the polygon to that described by the result of
- transforming its vertices.&nbsp; Also applies transform() on the holes
- of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales up outer shell and holes of an object that models
- polygon by unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
- <td>Scales down outer shell and holes of an object that models
- polygon by unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, scaling_type&gt;<br />
- T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
- <td>Scales outer shell and holes of an object that models polygon by
- floating point factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference displacement)</font></td>
- <td>Adds displacement value to coordinate indicated by orientation_2d of
- vertices of an object that models polygon .</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename polygon_type, typename point_type&gt;<br />
- polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <p>An object that is a model of <font face="Courier New">
+polygon_with_holes_concept</font> can be viewed as a model of any of
+its refinements if it is determined at runtime to conform to the
+restriction of those concepts.&nbsp; This concept casting is
+accomplished through the
+ <font face="Courier New">view_as&lt;&gt;()</font> function.</p>
+ <p><font face="Courier New">view_as&lt;rectangle_concept&gt;(polygon_with_holes_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_90_concept&gt;(polygon_with_holes_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_90_with_holes_concept&gt;(polygon_with_holes_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_45_concept&gt;(polygon_with_holes_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_45_with_holes_concept&gt;(polygon_with_holes_object)</font><br />
+ <font face="Courier New">view_as&lt;polygon_concept&gt;(polygon_with_holes_object)</font></p>
+ <p>The return value of <font face="Courier New">view_as&lt;&gt;()</font>
+can be passed into any interface that expects an object of the
+conceptual type specified in its template parameter. </p>
+ <h2>Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>begin_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_with_holes.&nbsp; Returns the begin iterator over the range of
+points that correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_iterator_type <b>end_points</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_with_holes.&nbsp; Returns the end iterator over the range of
+points that correspond to vertices of the polygon.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+hole_iterator_type <b>begin_holes</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_with_holes.&nbsp; Returns the begin iterator over the range of
+coordinates that correspond to horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+hole_iterator_type <b>end_holes</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_with_holes.&nbsp; Returns the end iterator over the range of
+coordinates that correspond to horizontal and vertical edges.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename iterator&gt;<br />
+void <b>set_points</b>(T&amp; polygon, iterator b, iterator e)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_with_holes.&nbsp;&nbsp; Sets the polygon to the point data
+range [b,e) that corresponds to vertices of a polygon.&nbsp; </font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename iterator&gt;<br />
+void <b>set_holes</b>(T&amp; polygon, iterator b, iterator e)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+polygon_with_holes.&nbsp;&nbsp; Sets the polygon holes to the hole data
+range [b,e)</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+unsigned int <b>size</b>(const T&amp; polygon)</font></td>
+ <td><font face="Times New Roman">Returns the number of
+edges in the outer shell of the polygon_with_holes.&nbsp; Does not
+include sizes of the holes.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
+ <td>Copies data from right object that models
+polygon_with_holes or one of its refinements into left object that
+models polygon_with_holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch=true)</font></td>
+ <td>Given an object that models polygon_with_holes and an
+object that models point, returns true if the polygon shell contains
+the point and one of its holes does not contain the point.&nbsp; If the
+consider_touch flag is true will return true if the point lies along
+the boundary of the polygon or one of its holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">// get the center
+coordinate<br />
+template &lt;typename T, typename point_type&gt;<br />
+void <b>center</b>(point_type&amp; p, const T&amp; polygon)</font></td>
+ <td>Sets object that models point to the center point of
+the bounding box of an object that models polygon_with_holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename rectangle_type&gt;<br />
+bool <b>extents</b>(rectangle_type&amp; bbox, const T&amp; polygon)</font></td>
+ <td>Sets object that models rectangle to the bounding box
+of an object that models polygon_with_holes and returns true.&nbsp;
+Returns false and leaves bbox unchanged if polygon is empty.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+manhattan_area_type <b>area</b>(const T&amp; polygon)</font></td>
+ <td>Returns the area of an object that models
+polygon_with_holes including subtracting the area of its holes from the
+area of the outer shell polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+direction_1d <b>winding</b>(const T&amp; polygon)</font></td>
+ <td>Returns the winding direction of an object that models
+polygon_with_holes, LOW == CLOCKWISE, HIGH = COUNTERCLOCKWISE.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_difference <b>perimeter</b>(const T&amp; polygon)</font></td>
+ <td>Returns the perimeter length of an object that models
+polygon, including the perimeters of the holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename transform_type&gt;<br />
+T&amp; <b>transform</b>(T&amp; polygon, const transform_type&amp;)</font></td>
+ <td>Applies transform() on the vertices of polygon and sets
+the polygon to that described by the result of transforming its
+vertices.&nbsp; Also applies transform() on the holes of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_up</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales up outer shell and holes of an object that
+models polygon by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>scale_down</b>(T&amp; polygon, unsigned_area_type factor)</font></td>
+ <td>Scales down outer shell and holes of an object that
+models polygon by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, scaling_type&gt;<br />
+T&amp; <b>scale</b>(T&amp; rectangle, double scaling) </font></td>
+ <td>Scales outer shell and holes of an object that models
+polygon by floating point factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>move</b>(T&amp; polygon, orientation_2d,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference
+displacement)</font></td>
+ <td>Adds displacement value to coordinate indicated by
+orientation_2d of vertices of an object that models polygon .</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename polygon_type, typename point_type&gt;<br />
+polygon_type&amp; <b>convolve</b>(polygon_type&amp; polygon,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const point_type&amp; point)</font></td>
- <td>Convolves coordinate values of point with the outer shell and holes of an
- object that models polygon_with_holes.</td>
- </tr>
- </tbody></table>
- <h1>Polygon With Holes Data</h1>
-
-<p>
-</p><p>The library provides a model of polygon with holes concept declared
-<font face="Courier New">
-template&lt;typename T&gt; polygon_with_holes_data </font>where T is the
-coordinate type.</p>
-<p>This data type is used internally when a polygon with holes is
-needed and is available to the library user who finds it convenient to use a
-library polygon data type instead of providing their own.&nbsp; The data type is
-implemented to be convenient to use with the library traits.</p>
-<h2>Members</h2>
-<table id="table2" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
- <td><font face="Times New Roman">polygon_with_holes_concept</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
- <td><font face="Times New Roman">T</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
- <td>Iterator over vertices point_data&lt;T&gt; vertices of polygon</td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">iterator_holes_type</font></b></td>
- <td><font face="Times New Roman">Iterator over hole polygons of type
- polygon_data&lt;T&gt;.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_with_holes_data</b>()</font></td>
- <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>polygon_with_holes_data</b>(const
- polygon_with_holes_data&amp; that)</font></td>
- <td><font face="Times New Roman">Copy construct</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">polygon_with_holes_data&amp; <b>
- <br />operator=</b>(const polygon_with_holes_data&amp; that)</font></td>
- <td>Assignment operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T2&gt;<b> </b>
- polygon_with_holes_data&amp;<b>&nbsp;
- <br /> operator=</b>(const T2&amp; that) const</font></td>
- <td>Assign from an object that is a model of polygon with holes.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
- const</font></td>
- <td>Get the begin iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_type <b>end</b>()
- const</font></td>
- <td>Get the end iterator over vertices of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_hole_type <b>begin_holes</b>()
- const</font></td>
- <td>Get the begin compact iterator over non-redundant coordinates of the
- polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">iterator_hole_type <b>end_holes</b>()
- const</font></td>
- <td>Get the end compact iterator over non-redundant coordinates of the
- polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">std::size_t <b>size</b>() const</font></td>
- <td>Get the number of elements in the sequence stored to the polygon,
- usually equal to the number of edges of the polygon.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">std::size_t <b>size_holes</b>() const</font></td>
- <td>Get the number of holes in the polygon</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<b>&nbsp;
- <br /> </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
- <td>Sets the polygon to the iterator range of points. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename iT&gt;<b>&nbsp;
- <br /> </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
- <td>Sets the polygon holes the iterator range of hole polygons.&nbsp; These
- polygons in the input range may be either polygon_data or
- polygon_with_holes_data or any type that provides begin and end member
- functions to iterate over point_data&lt;T&gt;.</td>
- </tr>
-</tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table3" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Convolves coordinate values of point with the outer
+shell and holes of an object that models polygon_with_holes.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Polygon With Holes Data</h1>
+ <p> </p>
+ <p>The library provides a model of polygon with holes concept
+declared
+ <font face="Courier New">template&lt;typename T&gt;
+polygon_with_holes_data </font>where T is the coordinate type.</p>
+ <p>This data type is used internally when a polygon with holes is
+needed and is available to the library user who finds it convenient to
+use a library polygon data type instead of providing their own.&nbsp;
+The data type is implemented to be convenient to use with the library
+traits.</p>
+ <h2>Members</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
+ <td><font face="Times New Roman">polygon_with_holes_concept</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
+ <td><font face="Times New Roman">T</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">iterator_type</font></b></td>
+ <td>Iterator over vertices point_data&lt;T&gt; vertices of
+polygon</td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">iterator_holes_type</font></b></td>
+ <td><font face="Times New Roman">Iterator over hole
+polygons of type polygon_data&lt;T&gt;.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_with_holes_data</b>()</font></td>
+ <td><font face="Times New Roman">Default constructs the </font>polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>polygon_with_holes_data</b>(const
+polygon_with_holes_data&amp; that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">polygon_with_holes_data&amp;
+ <b> <br />
+operator=</b>(const polygon_with_holes_data&amp; that)</font></td>
+ <td>Assignment operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b> </b> polygon_with_holes_data&amp;<b>&nbsp; <br />
+operator=</b>(const T2&amp; that) const</font></td>
+ <td>Assign from an object that is a model of polygon with
+holes.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>begin</b>()
+const</font></td>
+ <td>Get the begin iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_type <b>end</b>()
+const</font></td>
+ <td>Get the end iterator over vertices of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_hole_type
+ <b>begin_holes</b>() const</font></td>
+ <td>Get the begin compact iterator over non-redundant
+coordinates of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">iterator_hole_type
+ <b>end_holes</b>() const</font></td>
+ <td>Get the end compact iterator over non-redundant
+coordinates of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">std::size_t <b>size</b>()
+const</font></td>
+ <td>Get the number of elements in the sequence stored to
+the polygon, usually equal to the number of edges of the polygon.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">std::size_t <b>size_holes</b>()
+const</font></td>
+ <td>Get the number of holes in the polygon</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<b>&nbsp; <br />
+ </b>void <b>set</b>(iT begin_points, iT end_points)</font></td>
+ <td>Sets the polygon to the iterator range of points. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename iT&gt;<b>&nbsp; <br />
+ </b>void <b>set_holes</b>(iT begin_holes, iT end_choless)</font></td>
+ <td>Sets the polygon holes the iterator range of hole
+polygons.&nbsp; These polygons in the input range may be either
+polygon_data or polygon_with_holes_data or any type that provides begin
+and end member functions to iterate over point_data&lt;T&gt;.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table3" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_property_merge.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_property_merge.htm (original)
+++ branches/release/libs/polygon/doc/gtl_property_merge.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,163 +1,186 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Property Merge</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Property Merge</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Property Merge</h1>
-
-<p>
-</p><p>The following is the declaration of the property merge algorithm.</p><p>
-<font face="Courier New">template &lt;typename coordinate_type, typename
-property_type&gt;<br />
-class property_merge;</font></p><p>The property algorithm computes the n-layer
-map overlay of input polygon sets.&nbsp; Each input geometry is inserted along
-with a property value.&nbsp; The property type can be anything suitable for use
-as an element of a std::set.&nbsp; Multiple geometry objects can be separately
-inserted with the same property value.&nbsp; To store the result of this
-operation a fairly complex container is required.&nbsp; Resulting geometries are
-associated with unique subsets of property values of the input geometry.&nbsp;
-Two suitable containers for storing the result of a property merge operation
-are:</p><p><font face="Courier New">std::map&lt;std::set&lt;property_type&gt;, polygon_set_data&lt;coordinate_type&gt;
-&gt;<br />
-std::map&lt;std::vector&lt;property_type&gt;, polygon_set_data&lt;coordinate_type&gt; &gt;</font></p><p>
-Example code property_merge_usage.cpp
- demonstrates using the n-layer map-overlay algorithm on polygon data.</p><h2>Member Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">property_merge</font></b><font face="Courier New">()</font></td>
- <td>Default constructor. </td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">property_merge</font></b><font face="Courier New">(const
- property_merge&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">void <br /><b>insert</b>(const polygon_set_data&lt;coordinate_type&gt;&amp; ps,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-const property_type&amp; property)</font></td>
- <td>I<font face="Times New Roman">nsert a polygon set with an associated
- property.</font>&nbsp; Linear wrt vertices inserted.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Property Merge</h1>
+ <p> </p>
+ <p>The following is the declaration of the property merge
+algorithm.</p>
+ <p><font face="Courier New">template &lt;typename
+coordinate_type, typename property_type&gt;<br />
+class property_merge;</font></p>
+ <p>The property algorithm computes the n-layer map overlay of
+input polygon sets.&nbsp; Each input geometry is inserted along with a
+property value.&nbsp; The property type can be anything suitable for
+use as an element of a std::set.&nbsp; Multiple geometry objects can be
+separately inserted with the same property value.&nbsp; To store the
+result of this operation a fairly complex container is required.&nbsp;
+Resulting geometries are associated with unique subsets of property
+values of the input geometry.&nbsp; Two suitable containers for storing
+the result of a property merge operation are:</p>
+ <p><font face="Courier New">std::map&lt;std::set&lt;property_type&gt;,
+polygon_set_data&lt;coordinate_type&gt; &gt;<br />
+std::map&lt;std::vector&lt;property_type&gt;,
+polygon_set_data&lt;coordinate_type&gt; &gt;</font></p>
+ <p>Example code property_merge_usage.cpp
+demonstrates using the n-layer map-overlay algorithm on polygon data.</p>
+ <h2>Member Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">property_merge</font></b><font
+ face="Courier New">()</font></td>
+ <td>Default constructor. </td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">property_merge</font></b><font
+ face="Courier New">(const property_merge&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <br />
+ <b>insert</b>(const
+polygon_set_data&lt;coordinate_type&gt;&amp; ps,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const property_type&amp; property)</font></td>
+ <td>I<font face="Times New Roman">nsert a polygon set with
+an associated property.</font>&nbsp; Linear wrt vertices inserted.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;class GeoObjT&gt;<br />
-void <b>insert</b>(const GeoObjT&amp; geoObj,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-const property_type&amp; property)</font></td>
- <td>Insert a geometry object that is a refinement of polygon set with an
- associated property.&nbsp; Linear wrt vertices inserted.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+void <b>insert</b>(const GeoObjT&amp; geoObj,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const property_type&amp; property)</font></td>
+ <td>Insert a geometry object that is a refinement of
+polygon set with an associated property.&nbsp; Linear wrt vertices
+inserted.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename result_type&gt;<br />
 void <b>merge</b>(result_type&amp; result)</font></td>
- <td>Accepts a container object that conforms to the expectations defined
- above.&nbsp; Performs property merge and populates the container
- object.&nbsp; Expected n log n runtime, worst case quadratic runtime wrt.
- vertices + intersections.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Accepts a container object that conforms to the
+expectations defined above.&nbsp; Performs property merge and populates
+the container object.&nbsp; Expected n log n runtime, worst case
+quadratic runtime wrt. vertices + intersections.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_property_merge_45.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_property_merge_45.htm (original)
+++ branches/release/libs/polygon/doc/gtl_property_merge_45.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,162 +1,186 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Property Merge 90</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Property Merge 90</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Property Merge 45</h1>
-
-<p>
-</p><p>The following is the declaration of the property merge algorithm.</p><p>
-<font face="Courier New">template &lt;typename coordinate_type, typename
-property_type&gt;<br />
-class property_merge_45;</font></p><p>The property algorithm computes the n-layer
-map overlay of input polygon sets.&nbsp; Each input geometry is inserted along
-with a property value.&nbsp; The property type can be anything suitable for use
-as an element of a std::set.&nbsp; Multiple geometry objects can be separately
-inserted with the same property value.&nbsp; To store the result of this
-operation a fairly complex container is required.&nbsp; Resulting geometries are
-associated with unique subsets of property values of the input geometry.&nbsp;
-Two suitable containers for storing the result of a property merge operation
-are:</p><p><font face="Courier New">std::map&lt;std::set&lt;property_type&gt;, polygon_45_set_data&lt;coordinate_type&gt;
-&gt;<br />
-std::map&lt;std::vector&lt;property_type&gt;, polygon_45_set_data&lt;coordinate_type&gt; &gt;</font></p><p>
-Example code property_merge_usage.cpp
- demonstrates using the n-layer map-overlay algorithm on polygon 90 data.</p><h2>Member Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">property_merge_45</font></b><font face="Courier New">()</font></td>
- <td>Default constructor. </td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">property_merge_45</font></b><font face="Courier New">(const
- property_merge_45&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">void <br /><b>insert</b>(const polygon_45_set_data&lt;coordinate_type&gt;&amp; ps,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-const property_type&amp; property)</font></td>
- <td>I<font face="Times New Roman">nsert a polygon set with an associated
- property.</font>&nbsp; Linear wrt vertices inserted.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Property Merge 45</h1>
+ <p> </p>
+ <p>The following is the declaration of the property merge
+algorithm.</p>
+ <p><font face="Courier New">template &lt;typename
+coordinate_type, typename property_type&gt;<br />
+class property_merge_45;</font></p>
+ <p>The property algorithm computes the n-layer map overlay of
+input polygon sets.&nbsp; Each input geometry is inserted along with a
+property value.&nbsp; The property type can be anything suitable for
+use as an element of a std::set.&nbsp; Multiple geometry objects can be
+separately inserted with the same property value.&nbsp; To store the
+result of this operation a fairly complex container is required.&nbsp;
+Resulting geometries are associated with unique subsets of property
+values of the input geometry.&nbsp; Two suitable containers for storing
+the result of a property merge operation are:</p>
+ <p><font face="Courier New">std::map&lt;std::set&lt;property_type&gt;,
+polygon_45_set_data&lt;coordinate_type&gt; &gt;<br />
+std::map&lt;std::vector&lt;property_type&gt;,
+polygon_45_set_data&lt;coordinate_type&gt; &gt;</font></p>
+ <p>Example code property_merge_usage.cpp
+demonstrates using the n-layer map-overlay algorithm on polygon 90 data.</p>
+ <h2>Member Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">property_merge_45</font></b><font
+ face="Courier New">()</font></td>
+ <td>Default constructor. </td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">property_merge_45</font></b><font
+ face="Courier New">(const property_merge_45&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <br />
+ <b>insert</b>(const
+polygon_45_set_data&lt;coordinate_type&gt;&amp; ps,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const property_type&amp; property)</font></td>
+ <td>I<font face="Times New Roman">nsert a polygon set with
+an associated property.</font>&nbsp; Linear wrt vertices inserted.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;class GeoObjT&gt;<br />
-void <b>insert</b>(const GeoObjT&amp; geoObj,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-const property_type&amp; property)</font></td>
- <td>Insert a geometry object that is a refinement of polygon 45 set with
- an associated property.&nbsp; Linear wrt vertices inserted.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+void <b>insert</b>(const GeoObjT&amp; geoObj,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const property_type&amp; property)</font></td>
+ <td>Insert a geometry object that is a refinement of
+polygon 45 set with an associated property.&nbsp; Linear wrt vertices
+inserted.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename result_type&gt;<br />
 void <b>merge</b>(result_type&amp; result)</font></td>
- <td>Accepts a container object that conforms to the expectations defined
- above.&nbsp; Performs property merge and populates the container
- object.&nbsp; O(n log n) runtime wrt. vertices + intersections.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Accepts a container object that conforms to the
+expectations defined above.&nbsp; Performs property merge and populates
+the container object.&nbsp; O(n log n) runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_property_merge_90.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_property_merge_90.htm (original)
+++ branches/release/libs/polygon/doc/gtl_property_merge_90.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,162 +1,186 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Property Merge 90</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Property Merge 90</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
         <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
         <li>Performance Analysis</li>
         <li>Layout Versus Schematic Tutorial</li>
         <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-</ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Property Merge 90</h1>
-
-<p>
-</p><p>The following is the declaration of the property merge algorithm.</p><p>
-<font face="Courier New">template &lt;typename coordinate_type, typename
-property_type&gt;<br />
-class property_merge_90;</font></p><p>The property algorithm computes the n-layer
-map overlay of input polygon sets.&nbsp; Each input geometry is inserted along
-with a property value.&nbsp; The property type can be anything suitable for use
-as an element of a std::set.&nbsp; Multiple geometry objects can be separately
-inserted with the same property value.&nbsp; To store the result of this
-operation a fairly complex container is required.&nbsp; Resulting geometries are
-associated with unique subsets of property values of the input geometry.&nbsp;
-Two suitable containers for storing the result of a property merge operation
-are:</p><p><font face="Courier New">std::map&lt;std::set&lt;property_type&gt;, polygon_90_set_data&lt;coordinate_type&gt;
-&gt;<br />
-std::map&lt;std::vector&lt;property_type&gt;, polygon_90_set_data&lt;coordinate_type&gt; &gt;</font></p><p>
-Example code property_merge_usage.cpp
- demonstrates using the n-layer map-overlay algorithm on polygon 90 data.</p><h2>Member Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">property_merge_90</font></b><font face="Courier New">()</font></td>
- <td>Default constructor. </td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">property_merge_90</font></b><font face="Courier New">(const
- property_merge_90&amp; that)</font></td>
- <td>Copy construct.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">void <br /><b>insert</b>(const polygon_90_set_data&lt;coordinate_type&gt;&amp; ps,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-const property_type&amp; property)</font></td>
- <td>I<font face="Times New Roman">nsert a polygon set with an associated
- property.</font>&nbsp; Linear wrt vertices inserted.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Property Merge 90</h1>
+ <p> </p>
+ <p>The following is the declaration of the property merge
+algorithm.</p>
+ <p><font face="Courier New">template &lt;typename
+coordinate_type, typename property_type&gt;<br />
+class property_merge_90;</font></p>
+ <p>The property algorithm computes the n-layer map overlay of
+input polygon sets.&nbsp; Each input geometry is inserted along with a
+property value.&nbsp; The property type can be anything suitable for
+use as an element of a std::set.&nbsp; Multiple geometry objects can be
+separately inserted with the same property value.&nbsp; To store the
+result of this operation a fairly complex container is required.&nbsp;
+Resulting geometries are associated with unique subsets of property
+values of the input geometry.&nbsp; Two suitable containers for storing
+the result of a property merge operation are:</p>
+ <p><font face="Courier New">std::map&lt;std::set&lt;property_type&gt;,
+polygon_90_set_data&lt;coordinate_type&gt; &gt;<br />
+std::map&lt;std::vector&lt;property_type&gt;,
+polygon_90_set_data&lt;coordinate_type&gt; &gt;</font></p>
+ <p>Example code property_merge_usage.cpp
+demonstrates using the n-layer map-overlay algorithm on polygon 90 data.</p>
+ <h2>Member Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">property_merge_90</font></b><font
+ face="Courier New">()</font></td>
+ <td>Default constructor. </td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">property_merge_90</font></b><font
+ face="Courier New">(const property_merge_90&amp; that)</font></td>
+ <td>Copy construct.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">void <br />
+ <b>insert</b>(const
+polygon_90_set_data&lt;coordinate_type&gt;&amp; ps,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const property_type&amp; property)</font></td>
+ <td>I<font face="Times New Roman">nsert a polygon set with
+an associated property.</font>&nbsp; Linear wrt vertices inserted.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;class GeoObjT&gt;<br />
-void <b>insert</b>(const GeoObjT&amp; geoObj,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-const property_type&amp; property)</font></td>
- <td>Insert a geometry object that is a refinement of polygon 90 set with
- an associated property.&nbsp; Linear wrt vertices inserted.</td>
- </tr>
- <tr>
- <td width="586">
-<font face="Courier New">
+void <b>insert</b>(const GeoObjT&amp; geoObj,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const property_type&amp; property)</font></td>
+ <td>Insert a geometry object that is a refinement of
+polygon 90 set with an associated property.&nbsp; Linear wrt vertices
+inserted.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">
 template &lt;typename result_type&gt;<br />
 void <b>merge</b>(result_type&amp; result)</font></td>
- <td>Accepts a container object that conforms to the expectations defined
- above.&nbsp; Performs property merge and populates the container
- object.&nbsp; O(n log n) runtime wrt. vertices + intersections.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+ <td>Accepts a container object that conforms to the
+expectations defined above.&nbsp; Performs property merge and populates
+the container object.&nbsp; O(n log n) runtime wrt. vertices +
+intersections.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_rectangle_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_rectangle_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_rectangle_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,775 +1,859 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Rectangle Concept</title>
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Rectangle Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
         <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
-
- </ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>Rectangle Concept</h1>
-
-<p>
-</p><p>The rectangle concept tag is <font face="Courier New">
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>Rectangle Concept</h1>
+ <p> </p>
+ <p>The rectangle concept tag is <font face="Courier New">
 rectangle_concept</font></p>
-<p>
-To register a user defined type as a model of
-<font face="Times New Roman">rectangle </font>concept, specialize the
-geometry concept meta-function for that type.&nbsp; In the example below CRectangle is registered as a model of
-rectangle&nbsp; concept.</p><p>
-<font face="Courier New">template &lt;&gt;<br />
-struct geometry_concept&lt;CRectangle&gt; { typedef rectangle_concept type; };</font></p><p>
-<font face="Times New Roman">The semantic of a rectangle is that it has an x and
-a y interval and these intervals conform to the semantic of an interval
-including its invariant.&nbsp; This invariant on the intervals of a rectangle is enforced by the generic library functions that
-operate on rectangles, and is not expected of the data type itself or the concept
-mapping of that data type to the rectangle concept through its traits.&nbsp; In
-this way a boost::tuple&lt;int, int, int, int&gt; or boost::array&lt;int, 4&gt;
-could be made models of rectangle by simply providing indirect access to their
-elements through traits.</font></p><p>
-<font face="Times New Roman">Below is shown the default rectangle traits.&nbsp;
-Specialization of these traits is required for types that don't conform to the
-default behavior.&nbsp; The interested reader will note SFINAE is used on the
-traits to allow only an object that provides a member type definition of
-interval_type to work with the default read only traits.&nbsp; This becomes
-necessary when refinements of concepts are used and it is undesirable to attempt
-to match default traits to non-rectangle types at compile time.&nbsp;
-Specializing rectangle_traits can be done easily by simply providing gtl_yes as
-the enable parameter.</font></p><p>
-<font face="Courier New">template &lt;typename T, typename enable = gtl_yes&gt;<br />
-struct rectangle_traits {};</font></p><p>
-<font face="Courier New">template &lt;typename T&gt;<br />
+ <p> To register a user defined type as a model of <font
+ face="Times New Roman">rectangle </font>concept, specialize the
+geometry concept meta-function for that type.&nbsp; In the example
+below CRectangle is registered as a model of rectangle&nbsp; concept.</p>
+ <p> <font face="Courier New">template &lt;&gt;<br />
+struct geometry_concept&lt;CRectangle&gt; { typedef rectangle_concept
+type; };</font></p>
+ <p> <font face="Times New Roman">The semantic of a rectangle is
+that it has an x and a y interval and these intervals conform to the
+semantic of an interval including its invariant.&nbsp; This invariant
+on the intervals of a rectangle is enforced by the generic library
+functions that operate on rectangles, and is not expected of the data
+type itself or the concept mapping of that data type to the rectangle
+concept through its traits.&nbsp; In this way a boost::tuple&lt;int,
+int, int, int&gt; or boost::array&lt;int, 4&gt; could be made models of
+rectangle by simply providing indirect access to their elements through
+traits.</font></p>
+ <p> <font face="Times New Roman">Below is shown the default
+rectangle traits.&nbsp; Specialization of these traits is required for
+types that don't conform to the default behavior.&nbsp; The interested
+reader will note SFINAE is used on the traits to allow only an object
+that provides a member type definition of interval_type to work with
+the default read only traits.&nbsp; This becomes necessary when
+refinements of concepts are used and it is undesirable to attempt to
+match default traits to non-rectangle types at compile time.&nbsp;
+Specializing rectangle_traits can be done easily by simply providing
+gtl_yes as the enable parameter.</font></p>
+ <p> <font face="Courier New">template &lt;typename T, typename
+enable = gtl_yes&gt;<br />
+struct rectangle_traits {};</font></p>
+ <p> <font face="Courier New">template &lt;typename T&gt;<br />
 struct rectangle_traits&lt;T, gtl_no&gt; {};<br />
-<br />
+ <br />
 template &lt;typename T&gt;<br />
-struct rectangle_traits&lt;T, typename gtl_same_type&lt;typename T::interval_type,
-typename T::interval_type&gt;::type&gt; {<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::coordinate_type coordinate_type;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::interval_type interval_type;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline interval_type get(const T&amp; rectangle,
-orientation_2d orient) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+struct rectangle_traits&lt;T, typename gtl_same_type&lt;typename
+T::interval_type, typename T::interval_type&gt;::type&gt; {<br />
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::coordinate_type
+coordinate_type;<br />
+&nbsp;&nbsp;&nbsp;&nbsp; typedef typename T::interval_type
+interval_type;<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline interval_type get(const T&amp;
+rectangle, orientation_2d orient) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
 rectangle.get(orient); }<br />
 };<br />
-<br />
+ <br />
 template &lt;typename T&gt;<br />
 struct rectangle_mutable_traits {<br />
 &nbsp;&nbsp;&nbsp;&nbsp; template &lt;typename T2&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline void set(T&amp; rectangle, orientation_2d
-orient, const T2&amp; interval) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rectangle.set(orient,
-interval); }<br />
+&nbsp;&nbsp;&nbsp;&nbsp; static inline void set(T&amp; rectangle,
+orientation_2d orient, const T2&amp; interval) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+rectangle.set(orient, interval); }<br />
 &nbsp;&nbsp;&nbsp;&nbsp; template &lt;typename T2, typename T3&gt;<br />
-&nbsp;&nbsp;&nbsp;&nbsp; static inline T construct(const T2&amp; interval_horizontal,
-const T3&amp; interval_vertical) {<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+&nbsp;&nbsp;&nbsp;&nbsp; static inline T construct(const T2&amp;
+interval_horizontal, const T3&amp; interval_vertical) {<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
 T(interval_horizontal, interval_vertical); }<br />
-};</font></p><h2>Functions</h2>
-<table id="table1" border="1" width="100%">
- <tbody><tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- interval_type <b>get</b>(const T&amp; rectangle, orientation_2d)</font></td>
- <td><font face="Times New Roman">Expects a model of rectangle.&nbsp;
- Returns the x interval or y interval of the rectangle, depending on the
- orientation_2d value.</font><font face="Courier New"><br />
+};</font></p>
+ <h2>Functions</h2>
+ <table id="table1" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+interval_type <b>get</b>(const T&amp; rectangle, orientation_2d)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+rectangle.&nbsp; Returns the x interval or y interval of the rectangle,
+depending on the orientation_2d value.</font><font face="Courier New"><br />
 &nbsp;</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- coordinate_type&gt;<br />
- void <b>set</b>(T&amp; rectangle, orientation_2d, coordinate_type)</font></td>
- <td><font face="Times New Roman">Expects a model of rectangle.&nbsp;&nbsp;
- Sets the x interval or y interval of the rectangle to the
- coordinate, depending on the orientation_2d value.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- interval_type <b>get</b>(const T&amp; rectangle, orientation_2d,
- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; direction_1d)</font></td>
- <td><font face="Times New Roman">Expects
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename coordinate_type&gt;<br />
+void <b>set</b>(T&amp; rectangle, orientation_2d, coordinate_type)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+rectangle.&nbsp;&nbsp; Sets the x interval or y interval of the
+rectangle to the coordinate, depending on the orientation_2d value.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+interval_type <b>get</b>(const T&amp; rectangle, orientation_2d, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+direction_1d)</font></td>
+ <td><font face="Times New Roman">Expects
 a model of rectangle.&nbsp; Returns the coordinate specificed by the
 direction_1d value of the x interval or y interval of the rectangle,
 depending on the orientation_2d value.</font><font face="Courier New"><br />
 &nbsp;</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- coordinate_type&gt;<br />
- void <b>set</b>(T&amp; rectangle, orientation_2d, direction_1d, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_type)</font></td>
- <td><font face="Times New Roman">Expects a model of rectangle.&nbsp;&nbsp;
- Sets the coordinate specified by the direction_1d value of the x interval or y interval of the rectangle to the
- coordinate, depending on the orientation_2d value.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- T2&gt;<br />
- T <b>construct</b>(const T2&amp; h, const T2&amp; v)</font></td>
- <td>Construct an object that is a model of rectangle given x interval
- and y intervals.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- T2&gt;<br />
- T <b>construct</b>(coordinate_type xl, coordinate_type yl, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_type
- xh, coordinate_type yh)</font></td>
- <td>Construct an object that is a model of rectangle given four coordinate values.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
- <td>Copies data from right object that models rectangle into left object
- that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- T2&gt;<br />
- bool <b>equivalence</b>(const T&amp; rectangle1, </font>
- <br /><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const T2&amp; rectangle2)</font></td>
- <td>Given two objects that model rectangle, compares and returns true if
- their x and y intervals are respectively equivalent.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename point_type&gt;<br />
- bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch=true)</font></td>
- <td>Given an object that models rectangle and an object that models
- point, returns true
- if the rectangle contains the point.&nbsp; If the consider_touch
- flag is true will return true if the point lies along the boundary of
- the rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>contains</b>(const T1&amp; a, const T2&amp; b, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch = true) </font></td>
- <td>Returns true if model of rectangle a contains both intervals of
- model of rectangle b.&nbsp; If the consider_touch flag is true will
- consider rectangle b contained even if it touches the boundary of a.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- interval_type <b>horizontal</b>(const T&amp; rectangle)</font></td>
- <td>Returns the x interval of an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- interval_type <b>vertical</b>(const T&amp; rectangle)</font></td>
- <td>Returns the y interval of an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_type <b>xl</b>(const T&amp; rectangle)</font></td>
- <td>Returns the west coordinate of an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_type <b>xh</b>(const T&amp; rectangle)</font></td>
- <td>Returns the east coordinate of an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_type <b>yl</b>(const T&amp; rectangle)</font></td>
- <td>Returns the south coordinate of an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_type <b>yh</b>(const T&amp; rectangle)</font></td>
- <td>Returns the north coordinate of an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_type <b>ll</b>(const T&amp; rectangle)</font></td>
- <td>Returns the lower left corner point of an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_type <b>lr</b>(const T&amp; rectangle)</font></td>
- <td>Returns the lower right corner point of an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_type <b>ul</b>(const T&amp; rectangle)</font></td>
- <td>Returns the upper left corner point of an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- point_type <b>ur</b>(const T&amp; rectangle)</font></td>
- <td>Returns the upper right corner point of an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">// get the center coordinate<br />
- template &lt;typename T, typename point_type&gt;<br />
- void <b>center</b>(point_type&amp; p, const T&amp; rectangle)</font></td>
- <td>Sets object that models point to the center point of an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename interval_type&gt;<br />
- void <b>horizontal</b>(T&amp; rectangle, const interval_type&amp; i)</font></td>
- <td>Sets the x interval of the object that models rectangle to be equal
- to the value of an object that models interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename interval_type&gt;<br />
- void <b>vertical</b>(T&amp; rectangle, const interval_type&amp; i )</font></td>
- <td>Sets the y interval of the object that models rectangle to be equal
- to the value of an object that models interval.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- rectangle_type&gt;<br />
- void <b>xl</b>(rectangle_type&amp; rectangle, coordinate_type )</font></td>
- <td>Sets the west coordinate of the object that models rectangle to be equal
- to the coordinate value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- rectangle_type&gt;<br />
- void <b>xh</b>(rectangle_type&amp; rectangle, coordinate_type )</font></td>
- <td>Sets the east coordinate of the object that models rectangle to be equal
- to the coordinate value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- rectangle_type&gt;<br />
- void <b>yl</b>(rectangle_type&amp; rectangle, coordinate_type )</font></td>
- <td>Sets the south coordinate of the object that models rectangle to be equal
- to the coordinate value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- rectangle_type&gt;<br />
- void <b>yh</b>(rectangle_type&amp; rectangle, coordinate_type )</font></td>
- <td>Sets the north coordinate of the object that models rectangle to be equal
- to the coordinate value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename T1, typename T2&gt;<br />
- T&amp; <b>set_points</b>(T&amp; rectangle, const T1&amp; p1, const T2&amp; p2)</font></td>
- <td>Sets the rectangle to the rectangle fully described by the points p1
- and p2.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_difference <b>delta</b>(const T&amp; rectangle,
- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename coordinate_type&gt;<br />
+void <b>set</b>(T&amp; rectangle, orientation_2d, direction_1d, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_type)</font></td>
+ <td><font face="Times New Roman">Expects a model of
+rectangle.&nbsp;&nbsp; Sets the coordinate specified by the
+direction_1d value of the x interval or y interval of the rectangle to
+the coordinate, depending on the orientation_2d value.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename T2&gt;<br />
+T <b>construct</b>(const T2&amp; h, const T2&amp; v)</font></td>
+ <td>Construct an object that is a model of rectangle given
+x interval and y intervals.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename T2&gt;<br />
+T <b>construct</b>(coordinate_type xl, coordinate_type yl, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+coordinate_type xh, coordinate_type yh)</font></td>
+ <td>Construct an object that is a model of rectangle given
+four coordinate values.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>assign</b>(T1&amp; left, const T2&amp; right)</font></td>
+ <td>Copies data from right object that models rectangle
+into left object that models rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename T2&gt;<br />
+bool <b>equivalence</b>(const T&amp; rectangle1, </font> <br />
+ <font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const T2&amp; rectangle2)</font></td>
+ <td>Given two objects that model rectangle, compares and
+returns true if their x and y intervals are respectively equivalent.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+bool <b>contains</b>(const T&amp;, const point_type&amp; point, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch=true)</font></td>
+ <td>Given an object that models rectangle and an object
+that models point, returns true if the rectangle contains the
+point.&nbsp; If the consider_touch flag is true will return true if the
+point lies along the boundary of the rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>contains</b>(const T1&amp; a, const T2&amp; b, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch = true) </font></td>
+ <td>Returns true if model of rectangle a contains both
+intervals of model of rectangle b.&nbsp; If the consider_touch flag is
+true will consider rectangle b contained even if it touches the
+boundary of a.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+interval_type <b>horizontal</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the x interval of an object that models
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+interval_type <b>vertical</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the y interval of an object that models
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_type <b>xl</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the west coordinate of an object that models
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_type <b>xh</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the east coordinate of an object that models
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_type <b>yl</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the south coordinate of an object that models
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_type <b>yh</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the north coordinate of an object that models
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_type <b>ll</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the lower left corner point of an object that
+models rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_type <b>lr</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the lower right corner point of an object that
+models rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_type <b>ul</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the upper left corner point of an object that
+models rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+point_type <b>ur</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the upper right corner point of an object that
+models rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">// get the center
+coordinate<br />
+template &lt;typename T, typename point_type&gt;<br />
+void <b>center</b>(point_type&amp; p, const T&amp; rectangle)</font></td>
+ <td>Sets object that models point to the center point of an
+object that models rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename interval_type&gt;<br />
+void <b>horizontal</b>(T&amp; rectangle, const interval_type&amp; i)</font></td>
+ <td>Sets the x interval of the object that models rectangle
+to be equal to the value of an object that models interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename interval_type&gt;<br />
+void <b>vertical</b>(T&amp; rectangle, const interval_type&amp; i )</font></td>
+ <td>Sets the y interval of the object that models rectangle
+to be equal to the value of an object that models interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type&gt;<br />
+void <b>xl</b>(rectangle_type&amp; rectangle, coordinate_type )</font></td>
+ <td>Sets the west coordinate of the object that models
+rectangle to be equal to the coordinate value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type&gt;<br />
+void <b>xh</b>(rectangle_type&amp; rectangle, coordinate_type )</font></td>
+ <td>Sets the east coordinate of the object that models
+rectangle to be equal to the coordinate value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type&gt;<br />
+void <b>yl</b>(rectangle_type&amp; rectangle, coordinate_type )</font></td>
+ <td>Sets the south coordinate of the object that models
+rectangle to be equal to the coordinate value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type&gt;<br />
+void <b>yh</b>(rectangle_type&amp; rectangle, coordinate_type )</font></td>
+ <td>Sets the north coordinate of the object that models
+rectangle to be equal to the coordinate value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename T1, typename T2&gt;<br />
+T&amp; <b>set_points</b>(T&amp; rectangle, const T1&amp; p1, const
+T2&amp; p2)</font></td>
+ <td>Sets the rectangle to the rectangle fully described by
+the points p1 and p2.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_difference <b>delta</b>(const T&amp; rectangle, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 orientation_2d)</font></td>
- <td>Returns the delta of the interval specified by orientation_2d of an object
- that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- manhattan_area_type <b>area</b>(const T&amp; rectangle)</font></td>
- <td>Returns the area of an object
- that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_difference <b>half_perimeter</b>(const T&amp; rectangle)</font></td>
- <td>Returns the length plus width of an object
- that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- coordinate_difference <b>perimeter</b>(const T&amp; rectangle)</font></td>
- <td>Returns the perimeter length of an object
- that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- orientation_2d <b>quess_orientation</b>(const T&amp; rectangle)</font></td>
- <td>Returns the orientation in which the rectangle has a longer delta.&nbsp;
- Returns HORIZONTAL if the rectangle is a square.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- rectangle_type&gt;<br />
- rectangle_type&amp; <b>transform</b>(rectangle_type&amp; rectangle,<br />
+ <td>Returns the delta of the interval specified by
+orientation_2d of an object that models rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+manhattan_area_type <b>area</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the area of an object that models rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_difference <b>half_perimeter</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the length plus width of an object that models
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+coordinate_difference <b>perimeter</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the perimeter length of an object that models
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+orientation_2d <b>quess_orientation</b>(const T&amp; rectangle)</font></td>
+ <td>Returns the orientation in which the rectangle has a
+longer delta.&nbsp; Returns HORIZONTAL if the rectangle is a square.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type&gt;<br />
+rectangle_type&amp; <b>transform</b>(rectangle_type&amp; rectangle,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 coordinate_type axis = 0)</font></td>
- <td>Applies transform() on the two points that fully describe the
- rectangle and sets the rectangle to that described by the result of
- transforming those points.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- rectangle_type&gt;<br />
- rectangle_type&amp; <b>scale_up</b>(rectangle_type&amp; rectangle, <br />
+ <td>Applies transform() on the two points that fully
+describe the rectangle and sets the rectangle to that described by the
+result of transforming those points.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type&gt;<br />
+rectangle_type&amp; <b>scale_up</b>(rectangle_type&amp; rectangle, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type factor)</font></td>
- <td>Scales up x interval and y interval&nbsp; of an object that models
- rectangle by unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- rectangle_type&gt;<br />
- rectangle_type&amp; <b>scale_down</b>(rectangle_type&amp; rectangle, <br />
+ <td>Scales up x interval and y interval&nbsp; of an object
+that models rectangle by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type&gt;<br />
+rectangle_type&amp; <b>scale_down</b>(rectangle_type&amp; rectangle, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 unsigned_area_type factor)</font></td>
- <td>Scales down x interval and y interval&nbsp; of an object that models
- rectangle by unsigned factor.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- rectangle_type, scaling_type&gt;<br />
- rectangle_type&amp; <b>scale</b>(rectangle_type&amp; rectangle,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- const scaling_type&amp; scaling) </font></td>
- <td>Applies scale() on the two points that fully describe the rectangle
- and sets the rectangle to that described by the result of transforming
- those points.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>move</b>(T&amp; rectangle, orientation_2d,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference displacement)</font></td>
- <td>Adds displacement value to interval indicated by orientation_2d of an
- object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- rectangle_type, typename point_type&gt;<br />
- rectangle_type&amp; <b>convolve</b>(rectangle_type&amp; rectangle,<br />
+ <td>Scales down x interval and y interval&nbsp; of an
+object that models rectangle by unsigned factor.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type, scaling_type&gt;<br />
+rectangle_type&amp; <b>scale</b>(rectangle_type&amp; rectangle,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const scaling_type&amp; scaling) </font></td>
+ <td>Applies scale() on the two points that fully describe
+the rectangle and sets the rectangle to that described by the result of
+transforming those points.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>move</b>(T&amp; rectangle, orientation_2d,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_difference
+displacement)</font></td>
+ <td>Adds displacement value to interval indicated by
+orientation_2d of an object that models rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type, typename point_type&gt;<br />
+rectangle_type&amp; <b>convolve</b>(rectangle_type&amp; rectangle,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const point_type&amp; point)</font></td>
- <td>Convolves coordinate values of point with x interval and y interval&nbsp; of an
- object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename
- rectangle_type, typename point_type&gt;<br />
- rectangle_type&amp; <b>deconvolve</b>(rectangle_type&amp; rectangle,<br />
+ <td>Convolves coordinate values of point with x interval
+and y interval&nbsp; of an object that models rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename rectangle_type, typename point_type&gt;<br />
+rectangle_type&amp; <b>deconvolve</b>(rectangle_type&amp; rectangle,<br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const point_type&amp; point)</font></td>
- <td>Deconvolves coordinate values of point withx interval and y interval&nbsp; of
- an object that models rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>convolve</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Convolves x interval&nbsp; of b with x interval&nbsp; of a and
- convolves y
- interval&nbsp; of b with y interval&nbsp; of a.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>deconvolve</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Deconvolves x interval&nbsp; of b with x interval&nbsp; of a and
- deconvolves y interval&nbsp; of b with y interval&nbsp; of a. </td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>reflected_convolve</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Reflected convolves y interval&nbsp; of b with x interval&nbsp; of a and
- reflected convolves x
- interval&nbsp; of b with y interval&nbsp; of a.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T1&amp; <b>reflected_deconvolve</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Reflected deconvolves y interval&nbsp; of b with x interval&nbsp; of a and
- reflected deconvolves x interval&nbsp; of b with y interval&nbsp; of a.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename point_type&gt;<br />
- coordinate_difference <b>euclidean_distance</b>(const T&amp;,<br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const point_type&amp; point,
- orienation_2d)</font></td>
- <td>Returns the distance from an object that models rectangle to an
- object that models point along the given orientation.&nbsp; Returns zero
- if the point is contained within the rectangle along that orientation.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1,
- typename T2&gt;<br />
- coordinate_difference <b>euclidean_distance</b>(const T1&amp; a,<br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const T2&amp; b, orienation_2d)</font></td>
- <td>Returns the distance from an object that models rectangle to an
- object that models rectangle along the given orientation.&nbsp; Returns
- zero if the intervals of the rectangles overlap along that orientation.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename point_type&gt;<br />
- coordinate_difference <b>square_euclidean_distance</b>(const T&amp;,<br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const point_type&amp; point)</font></td>
- <td>Returns the square of the Euclidean distance between a point and a
- rectangle.&nbsp; Returns zero if the point is contained within the
- rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1,
- typename T2&gt;<br />
- coordinate_difference <b>square_euclidean_distance</b><br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (const T1&amp; a, const T2&amp; b)</font></td>
- <td>Returns the square of the Euclidean distance between rectangles a
- and b.&nbsp; Returns zero if the rectangles intersect.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename point_type&gt;<br />
- coordinate_difference <b>manhattan_distance</b>(const T&amp;,<br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const point_type&amp; point)</font></td>
- <td>Returns the Manhattan distance between a point and a rectangle.&nbsp;
- Returns zero if the point is contained within the rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1,
- typename T2&gt;<br />
- coordinate_difference <b>manhattan_distance</b>(const T1&amp; a, <br />
+ <td>Deconvolves coordinate values of point withx interval
+and y interval&nbsp; of an object that models rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>convolve</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Convolves x interval&nbsp; of b with x interval&nbsp;
+of a and convolves y interval&nbsp; of b with y interval&nbsp; of a.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>deconvolve</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Deconvolves x interval&nbsp; of b with x interval&nbsp;
+of a and deconvolves y interval&nbsp; of b with y interval&nbsp; of a. </td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>reflected_convolve</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Reflected convolves y interval&nbsp; of b with x
+interval&nbsp; of a and reflected convolves x interval&nbsp; of b with
+y interval&nbsp; of a.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T1&amp; <b>reflected_deconvolve</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Reflected deconvolves y interval&nbsp; of b with x
+interval&nbsp; of a and reflected deconvolves x interval&nbsp; of b
+with y interval&nbsp; of a.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+coordinate_difference <b>euclidean_distance</b>(const T&amp;,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const point_type&amp; point,
+orienation_2d)</font></td>
+ <td>Returns the distance from an object that models
+rectangle to an object that models point along the given
+orientation.&nbsp; Returns zero if the point is contained within the
+rectangle along that orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+coordinate_difference <b>euclidean_distance</b>(const T1&amp; a,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const T2&amp; b, orienation_2d)</font></td>
+ <td>Returns the distance from an object that models
+rectangle to an object that models rectangle along the given
+orientation.&nbsp; Returns zero if the intervals of the rectangles
+overlap along that orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+coordinate_difference <b>square_euclidean_distance</b>(const T&amp;,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const point_type&amp; point)</font></td>
+ <td>Returns the square of the Euclidean distance between a
+point and a rectangle.&nbsp; Returns zero if the point is contained
+within the rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+coordinate_difference <b>square_euclidean_distance</b><br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (const T1&amp; a, const T2&amp; b)</font></td>
+ <td>Returns the square of the Euclidean distance between
+rectangles a and b.&nbsp; Returns zero if the rectangles intersect.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+coordinate_difference <b>manhattan_distance</b>(const T&amp;,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const point_type&amp; point)</font></td>
+ <td>Returns the Manhattan distance between a point and a
+rectangle.&nbsp; Returns zero if the point is contained within the
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+coordinate_difference <b>manhattan_distance</b>(const T1&amp; a, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const T2&amp; b)</font></td>
- <td>Returns the Manhattan distance between rectangles a and b.&nbsp;
- Returns zero if the rectangles intersect.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T,
- typename point_type&gt;<br />
- coordinate_distance <b>euclidean_distance</b>(const T&amp;,<br />
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const point_type&amp; point)</font></td>
- <td>Returns the Euclidean distance between a point and a rectangle.&nbsp;
- Returns zero if the point is contained within the rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1,
- typename T2&gt;<br />
- coordinate_distance <b>euclidean_distance</b>(const T1&amp; a, <br />
+ <td>Returns the Manhattan distance between rectangles a and
+b.&nbsp; Returns zero if the rectangles intersect.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+coordinate_distance <b>euclidean_distance</b>(const T&amp;,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const point_type&amp; point)</font></td>
+ <td>Returns the Euclidean distance between a point and a
+rectangle.&nbsp; Returns zero if the point is contained within the
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+coordinate_distance <b>euclidean_distance</b>(const T1&amp; a, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const T2&amp; b)</font></td>
- <td>Returns the Euclidean distance between rectangles a and b.&nbsp;
- Returns zero if the rectangles intersect.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>intersects</b>(const T1&amp; a, const T2&amp; b, <br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch = true)</font></td>
- <td>Returns true if two objects that model rectangle overlap.&nbsp; If
- the consider_touch flag is true touching at the sides or corners is
- considered overlap.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>boundaries_intersect</b>(const T1&amp; a, const T2&amp; b, <br />
+ <td>Returns the Euclidean distance between rectangles a and
+b.&nbsp; Returns zero if the rectangles intersect.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>intersects</b>(const T1&amp; a, const T2&amp; b, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch = true)</font></td>
+ <td>Returns true if two objects that model rectangle
+overlap.&nbsp; If the consider_touch flag is true touching at the sides
+or corners is considered overlap.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>boundaries_intersect</b>(const T1&amp; a, const T2&amp; b, <br />
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 bool consider_touch = true)</font></td>
- <td>Returns true is two objects that model rectangle partially overlap
- such that one there is an intersection between the edges of the two
- rectangles&nbsp; If the consider_touch flag is true a coordinate is
- considered contained even if the two rectangles touch only along a side
- or corner.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>abuts</b>(const T1&amp; a, const T2&amp; b,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; direction_2d dir)
- </font></td>
- <td>Returns true if rectangle b abuts but down not overlap rectangle a
- on the side of rectangle a specified by dir.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>abuts</b>(const T1&amp; a, const T2&amp; b,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; orientation_2d)
- </font></td>
- <td>Returns true if rectangle b abuts but down not overlap rectangle a
- on either side of rectangle a specified by the orientation_2d.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>abuts</b>(const T1&amp; a, const T2&amp; b)</font></td>
- <td>Returns true if rectangle b abuts but down not overlap rectangle a
- on any side.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>intersect</b>(T1&amp; a, const T2&amp; b, orientation_2d<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch = true) </font></td>
- <td>Sets rectangle a to the intersection of rectangle a and interval b
- along the orientation_2d
- and returns true.&nbsp; If the does not intersect the interval, the
- rectangle is unchanged and the function returns false.&nbsp; If the flag consider_touch is true
- intervals that abut are considered to intersect.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>intersect</b>(T1&amp; a, const T2&amp; b,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- bool consider_touch = true) </font></td>
- <td>Sets rectangle a to the intersection of rectangle a and rectangle b
- and return true.&nbsp; If the two rectangles do not intersect rectangle
- a is unchanged and the function returns false.&nbsp; If the flag
- consider_touch is true rectangles that abut are considered to intersect.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- T&amp; <b>generalized_intersect</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>Same as intersect, but if they do not intersect set a to the
- rectangle between a and b by applying generalized_intersect() on the
- intervals of the rectangles.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; rectangle, coordinate_type)</font></td>
- <td>Bloats x and y intervals of rectangle by coordinate value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; rectangle, direction_2d, coordinate_type)</font></td>
- <td>Bloats side of rectangle specified by direction_2d by coordinate
- value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>bloat</b>(T&amp; rectangle, orientation_2d, coordinate_type)</font></td>
- <td>Bloats interval of rectangle specified by orientation_2d by
- coordinate value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; rectangle, coordinate_type)</font></td>
- <td>Shrinks x and y intervals of rectangle by coordinate value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; rectangle, direction_2d, coordinate_type)</font></td>
- <td>Shrinks side of rectangle specified by direction_2d by coordinate
- value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T&gt;<br />
- T&amp; <b>shrink</b>(T&amp; rectangle, orientation_2d, coordinate_type)</font></td>
- <td>Shrinks interval of rectangle specified by orientation_2d by
- coordinate value.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<br />
- bool <b>encompass</b>(T1&amp; a, const T2&amp; b)</font></td>
- <td>The x and y intervals of a are set to encompass the x and y
- intervals of b respectively.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- point_type&gt;<br />
- bool <b>encompass</b>(T&amp; rectangle, const point_type&amp; point)</font></td>
- <td>The x and y intervals of rectangle are set to encompass the x and y
- coordinates of point respectively.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- interval_type&gt;<br />
- bool <b>encompass</b>(T&amp; rectangle, const interval_type&amp; i,
- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; orientation_2d)</font></td>
- <td>The interval of rectangle specified by orientation_2d is set to encompass the
- interval i.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T, typename
- point_type&gt;<br />
- bool <b>get_corner</b>(point_type&amp; point, const T&amp; rectangle,&nbsp;
- <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- direction_2d, direction_1d)</font></td>
- <td>Sets point to the corner of the rectangle you reach if you look at
- its side specified by direction_2d from within the rectangle and turn in
- the direction_1d direction (low == left, high = right).&nbsp; Always
- returns true.</td>
- </tr>
-</tbody></table>
- <h1>Rectangle Data</h1>
-
-<p>
-</p><p>The library provides a model of rectangle concept declared
-<font face="Courier New">
-template&lt;typename T&gt; rectangle_data </font>where T is the coordinate type.</p>
-<p>This data type is used internally when a rectangle is needed and is available
-to the library user who finds it convenient to use a library rectangle data type
-instead of providing their own.&nbsp; The data type is implemented to be
-convenient to use with the library traits.</p>
-<h2>Members</h2>
-<table id="table2" border="1" width="100%">
- <tbody><tr>
- <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
- <td><font face="Times New Roman">rectangle_concept</font></td>
- </tr>
- <tr>
- <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
- <td><font face="Times New Roman">T</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>interval_type</b></font></td>
- <td><font face="Times New Roman">interval_data&lt;T&gt;</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>rectangle_data</b>(T xl, T
- yl, T xh, T yh)</font></td>
- <td><font face="Times New Roman">Constructs a rectangle with four
- coordinates.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T1, typename
- T2&gt;<b><br />
- rectangle_data</b>(const T1&amp; horizontal_interval,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- const T2&amp; vertical_interval)</font></td>
- <td><font face="Times New Roman">Constructs a rectangle with two objects
- that model interval.</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New"><b>rectangle_data</b>(const
- rectangle_data&amp; that)</font></td>
- <td><font face="Times New Roman">Copy construct</font></td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">rectangle_data&amp; <b>operator=</b>(const
- rectangle_data&amp; that)</font></td>
- <td>Assignment operator.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T2&gt;<b>
- <br /> </b>rectangle_data&amp; <b>
- operator=</b>(const T2&amp; that) const</font></td>
- <td>Assign from an object that is a model of rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T2&gt;<b>
- <br /> </b>bool<b>
- operator==</b>(const T2&amp; that) const</font></td>
- <td>Compare equality to an object that is a model of rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T2&gt;<b>
- <br /> </b>bool<b>
- operator!=</b>(const T2&amp; that) const</font></td>
- <td>Compare inequality to an object that is a model of rectangle.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">interval_data&lt;T&gt; <b>get</b>(orientation_2d
- orient) const</font></td>
- <td>Get the interval in the given orientation.</td>
- </tr>
- <tr>
- <td width="586"><font face="Courier New">template &lt;typename T2&gt;<br />
- void <b>set</b>(orientation_2d orient, const T2&amp; value)</font></td>
- <td>Sets the interval in the given orientation to the value of an object
- that models interval.</td>
- </tr>
- </tbody></table>
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<table class="docinfo" id="table8" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
+ <td>Returns true is two objects that model rectangle
+partially overlap such that one there is an intersection between the
+edges of the two rectangles&nbsp; If the consider_touch flag is true a
+coordinate is considered contained even if the two rectangles touch
+only along a side or corner.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>abuts</b>(const T1&amp; a, const T2&amp; b,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+direction_2d dir) </font></td>
+ <td>Returns true if rectangle b abuts but down not overlap
+rectangle a on the side of rectangle a specified by dir.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>abuts</b>(const T1&amp; a, const T2&amp; b,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+orientation_2d) </font></td>
+ <td>Returns true if rectangle b abuts but down not overlap
+rectangle a on either side of rectangle a specified by the
+orientation_2d.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>abuts</b>(const T1&amp; a, const T2&amp; b)</font></td>
+ <td>Returns true if rectangle b abuts but down not overlap
+rectangle a on any side.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>intersect</b>(T1&amp; a, const T2&amp; b, orientation_2d<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch = true) </font></td>
+ <td>Sets rectangle a to the intersection of rectangle a and
+interval b along the orientation_2d and returns true.&nbsp; If the does
+not intersect the interval, the rectangle is unchanged and the function
+returns false.&nbsp; If the flag consider_touch is true intervals that
+abut are considered to intersect.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>intersect</b>(T1&amp; a, const T2&amp; b,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch = true) </font></td>
+ <td>Sets rectangle a to the intersection of rectangle a and
+rectangle b and return true.&nbsp; If the two rectangles do not
+intersect rectangle a is unchanged and the function returns
+false.&nbsp; If the flag consider_touch is true rectangles that abut
+are considered to intersect.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+T&amp; <b>generalized_intersect</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>Same as intersect, but if they do not intersect set a
+to the rectangle between a and b by applying generalized_intersect() on
+the intervals of the rectangles.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; rectangle, coordinate_type)</font></td>
+ <td>Bloats x and y intervals of rectangle by coordinate
+value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; rectangle, direction_2d, coordinate_type)</font></td>
+ <td>Bloats side of rectangle specified by direction_2d by
+coordinate value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>bloat</b>(T&amp; rectangle, orientation_2d, coordinate_type)</font></td>
+ <td>Bloats interval of rectangle specified by
+orientation_2d by coordinate value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; rectangle, coordinate_type)</font></td>
+ <td>Shrinks x and y intervals of rectangle by coordinate
+value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; rectangle, direction_2d, coordinate_type)</font></td>
+ <td>Shrinks side of rectangle specified by direction_2d by
+coordinate value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T&gt;<br />
+T&amp; <b>shrink</b>(T&amp; rectangle, orientation_2d, coordinate_type)</font></td>
+ <td>Shrinks interval of rectangle specified by
+orientation_2d by coordinate value.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<br />
+bool <b>encompass</b>(T1&amp; a, const T2&amp; b)</font></td>
+ <td>The x and y intervals of a are set to encompass the x
+and y intervals of b respectively.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+bool <b>encompass</b>(T&amp; rectangle, const point_type&amp; point)</font></td>
+ <td>The x and y intervals of rectangle are set to encompass
+the x and y coordinates of point respectively.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename interval_type&gt;<br />
+bool <b>encompass</b>(T&amp; rectangle, const interval_type&amp; i, <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+orientation_2d)</font></td>
+ <td>The interval of rectangle specified by orientation_2d
+is set to encompass the interval i.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T, typename point_type&gt;<br />
+bool <b>get_corner</b>(point_type&amp; point, const T&amp;
+rectangle,&nbsp; <br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+direction_2d, direction_1d)</font></td>
+ <td>Sets point to the corner of the rectangle you reach if
+you look at its side specified by direction_2d from within the
+rectangle and turn in the direction_1d direction (low == left, high =
+right).&nbsp; Always returns true.</td>
+ </tr>
+ </tbody>
+ </table>
+ <h1>Rectangle Data</h1>
+ <p> </p>
+ <p>The library provides a model of rectangle concept declared
+ <font face="Courier New">template&lt;typename T&gt;
+rectangle_data </font>where T is the coordinate type.</p>
+ <p>This data type is used internally when a rectangle is needed
+and is available to the library user who finds it convenient to use a
+library rectangle data type instead of providing their own.&nbsp; The
+data type is implemented to be convenient to use with the library
+traits.</p>
+ <h2>Members</h2>
+ <table id="table2" border="1" width="100%">
+ <tbody>
+ <tr>
+ <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
+ <td><font face="Times New Roman">rectangle_concept</font></td>
+ </tr>
+ <tr>
+ <td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
+ <td><font face="Times New Roman">T</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>interval_type</b></font></td>
+ <td><font face="Times New Roman">interval_data&lt;T&gt;</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>rectangle_data</b>(T
+xl, T yl, T xh, T yh)</font></td>
+ <td><font face="Times New Roman">Constructs a rectangle
+with four coordinates.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T1, typename T2&gt;<b><br />
+rectangle_data</b>(const T1&amp; horizontal_interval,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const T2&amp; vertical_interval)</font></td>
+ <td><font face="Times New Roman">Constructs a rectangle
+with two objects that model interval.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>rectangle_data</b>(const
+rectangle_data&amp; that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">rectangle_data&amp;
+ <b>operator=</b>(const rectangle_data&amp; that)</font></td>
+ <td>Assignment operator.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b> <br />
+ </b>rectangle_data&amp; <b> operator=</b>(const T2&amp;
+that) const</font></td>
+ <td>Assign from an object that is a model of rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b> <br />
+ </b>bool<b> operator==</b>(const T2&amp; that) const</font></td>
+ <td>Compare equality to an object that is a model of
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<b> <br />
+ </b>bool<b> operator!=</b>(const T2&amp; that) const</font></td>
+ <td>Compare inequality to an object that is a model of
+rectangle.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">interval_data&lt;T&gt;
+ <b>get</b>(orientation_2d orient) const</font></td>
+ <td>Get the interval in the given orientation.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template
+&lt;typename T2&gt;<br />
+void <b>set</b>(orientation_2d orient, const T2&amp; value)</font></td>
+ <td>Sets the interval in the given orientation to the value
+of an object that models interval.</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
     <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table>
-</body></html>
\ No newline at end of file
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table8" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="
http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/gtl_segment_concept.htm
==============================================================================
--- branches/release/libs/polygon/doc/gtl_segment_concept.htm (original)
+++ branches/release/libs/polygon/doc/gtl_segment_concept.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,35 +1,28 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en"><head><!--
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
+<head>
+<!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Segment Concept</title>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body>
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
-
+-->
+ <title>Boost Polygon Library: Segment Concept</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
   <tbody>
     <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;"> </a> </div>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
       <div style="margin: 5px;">
       <h3 class="navbar">Contents</h3>
       <ul>
@@ -70,12 +63,7 @@
         <li>Voronoi Benchmark<br />
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
- </a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
+ <li>Voronoi Diagram</li>
       </ul>
       <h3 class="navbar">Other Resources</h3>
       <ul>
@@ -91,9 +79,14 @@
       </ul>
       </div>
       <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
       </td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --><br />
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%"><!-- End Header --><br />
       <p> </p>
       <h1>Segment Concept</h1>
       <p> </p>
@@ -102,13 +95,15 @@
 concept, specialize the geometry concept meta-function for that
 type.&nbsp; In the example below CSegment is registered as a model of
 the segment concept.</p>
- <p> <font face="Courier New">template &lt;&gt;<br />
-struct geometry_concept&lt;</font>CSegment<font face="Courier New">&gt;
-{ typedef segment_concept type; };</font></p>
+ <p style="font-family: Courier New,Courier,monospace;"> template
+&lt;&gt;<br />
+struct geometry_concept&lt;CSegment&gt;
+{ typedef segment_concept type; };</p>
       <p> The semantic of a segment is
 that it has a low and high point.&nbsp; A
 std::pair&lt;Point, Point&gt;,
-boost::tuple&lt;Point, Point&gt; or boost::array&lt;Point, 2&gt; could all be made models of
+boost::tuple&lt;Point, Point&gt; or boost::array&lt;Point, 2&gt; could
+all be made models of
 segment by simply providing indirect access to their elements through
 traits, however, these objects cannot be made a model of both segment
 and rectangle in the same compilation unit, for obvious reason that
@@ -118,90 +113,155 @@
       <p> Below is shown the default
 segment traits. Specialization of these traits is required for
 types that don't conform to the default behavior.</p>
-
-
- <p><span style="font-family: Courier New,Courier,monospace;"><span style="font-family: Courier New,Courier,monospace;">template &lt;typename Segment&gt;</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">struct segment_traits {</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; typedef typename Segment::coordinate_type coordinate_type;</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; typedef typename Segment::point_type point_type;</span><br style="font-family: Courier New,Courier,monospace;" />
+ <p><span style="font-family: Courier New,Courier,monospace;"><span
+ style="font-family: Courier New,Courier,monospace;">template
+&lt;typename Segment&gt;</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">struct
+segment_traits {</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+typedef typename Segment::coordinate_type coordinate_type;</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+typedef typename Segment::point_type point_type;</span><br
+ style="font-family: Courier New,Courier,monospace;" />
       <br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; static inline point_type get(const Segment&amp; segment, direction_1d dir) {</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp; return segment.get(dir);</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; }</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+static inline point_type get(const Segment&amp; segment, direction_1d
+dir) {</span><br style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp;
+return segment.get(dir);</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp; }</span><br
+ style="font-family: Courier New,Courier,monospace;" />
       <span style="font-family: Courier New,Courier,monospace;">};</span><br />
- <br /><span style="font-family: Courier New,Courier,monospace;">template &lt;typename Segment&gt;<br />
+ <br />
+ <span style="font-family: Courier New,Courier,monospace;">template
+&lt;typename Segment&gt;<br />
 struct segment_mutable_traits {<br />
-&nbsp; typedef typename segment_traits&lt;Segment&gt;::point_type point_type;<br />
-<br />
-&nbsp; static inline void set(Segment&amp; segment, direction_1d dir, const point_type&amp; point) {<br />
+&nbsp; </span></span><span
+ style="font-family: Courier New,Courier,monospace;"><span
+ style="font-family: Courier New,Courier,monospace;">typedef typename
+segment_traits&lt;Segment&gt;::coordinate_type </span></span><span
+ style="font-family: Courier New,Courier,monospace;"><span
+ style="font-family: Courier New,Courier,monospace;">coordinate_type;</span></span><br />
+ <span style="font-family: Courier New,Courier,monospace;"><span
+ style="font-family: Courier New,Courier,monospace;">&nbsp; typedef
+typename segment_traits&lt;Segment&gt;::point_type point_type;<br />
+ <br />
+&nbsp; static inline void set(Segment&amp; segment, direction_1d dir,
+const point_type&amp; point) {<br />
 &nbsp;&nbsp;&nbsp; segment.set(dir, p);<br />
 &nbsp; }<br />
       <br />
-&nbsp; static inline Segment construct(const point_type&amp; low, const point_type&amp; high) {<br />
+&nbsp; static inline Segment construct(const point_type&amp; low, const
+point_type&amp; high) {<br />
 &nbsp;&nbsp;&nbsp; return Segment(low, high);<br />
 &nbsp; }<br />
-};</span></span></p><h2>Functions</h2>
+};</span></span></p>
+ <h2>Functions</h2>
       <table style="width: 100%;" id="table1" border="1">
         <tbody>
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;typename Segment&gt;<br />point_type <b>get</b>(const Segment&amp; segment, direction_1d dir)</font></td>
- <td>Returns the low or high endpoint of an object that models segment, depending on
+&lt;typename Segment&gt;<br />
+point_type <b>get</b>(const Segment&amp; segment, direction_1d dir)</font></td>
+ <td>Returns the low or high endpoint of an object that
+models segment, depending on
 the direction_1d value.<font face="Courier New">&nbsp;</font></td>
           </tr>
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;typename </font><font face="Courier New">Segment</font><font face="Courier New">, typename Point&gt;<br />
-void <b>set</b>(</font><font face="Courier New">Segment</font><font face="Courier New">&amp; segment, direction_1d dir,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const Point&amp; </font><span style="font-family: Courier New;">point</span><font face="Courier New">)</font></td>
+&lt;typename </font><font face="Courier New">Segment</font><font
+ face="Courier New">, typename Point&gt;<br />
+void <b>set</b>(</font><font face="Courier New">Segment</font><font
+ face="Courier New">&amp; segment, direction_1d dir,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const Point&amp; </font><span
+ style="font-family: Courier New;">point</span><font face="Courier New">)</font></td>
             <td>Sets
 the low or high endpoint of an object that models segment to an object
 that models point, depending on the direction_1d value.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New">template &lt;typename Segment, typename Point1, typename Point2&gt;<br />
+ <td width="586"><font face="Courier New">template
+&lt;typename Segment, typename Point1, typename Point2&gt;<br />
 Segment<b> construct</b>(const Point1&amp; low, const Point2&amp; high)</font></td>
- <td>Constructs an object that is a model of segment given the two objects that are models of point.</td>
+ <td>Constructs an object that is a model of segment given
+the two objects that are models of point.</td>
           </tr>
           <tr>
- <td><font face="Courier New">template &lt;typename Segment1, typename </font><font face="Courier New">Segment2</font><font face="Courier New">&gt;<br /></font><font face="Courier New">Segment1</font><font face="Courier New"> <span style="font-weight: bold;">copy_construct</span>(const </font><font face="Courier New">Segment2</font><font face="Courier New">&amp; segment)</font></td>
- <td style="text-align: left;">Copy constructs an object that models segment given another segment.</td>
+ <td><font face="Courier New">template &lt;typename
+Segment1, typename </font><font face="Courier New">Segment2</font><font
+ face="Courier New">&gt;<br />
+ </font><font face="Courier New">Segment1</font><font
+ face="Courier New"> <span style="font-weight: bold;">copy_construct</span>(const
+ </font><font face="Courier New">Segment2</font><font
+ face="Courier New">&amp; segment)</font></td>
+ <td style="text-align: left;">Copy constructs an object
+that models segment given another segment.</td>
           </tr>
-<tr>
+ <tr>
             <td width="586"><font face="Courier New">template
-&lt;typename </font><font face="Courier New">Segment1</font><font face="Courier New">, typename </font><font face="Courier New">Segment2&gt;</font><br />
- <font face="Courier New">Segment1</font><font face="Courier New">&amp; <b>assign</b>(</font><font face="Courier New">Segment1</font><font face="Courier New">&amp; segment1,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const </font><font face="Courier New">Segment2</font><font face="Courier New">&amp; segment2)</font></td>
- <td>Copies data from the second object that models segment into
+&lt;typename </font><font face="Courier New">Segment1</font><font
+ face="Courier New">, typename </font><font face="Courier New">Segment2&gt;</font><br />
+ <font face="Courier New">Segment1</font><font
+ face="Courier New">&amp; <b>assign</b>(</font><font face="Courier New">Segment1</font><font
+ face="Courier New">&amp; segment1,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const </font><font face="Courier New">Segment2</font><font
+ face="Courier New">&amp; segment2)</font></td>
+ <td>Copies data from the second object that models segment
+into
 the first object that models segment.</td>
           </tr>
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;typename </font><font face="Courier New">Segment1</font><font face="Courier New">, typename </font><font face="Courier New">Segment1</font><font face="Courier New">&gt;<br />
-bool <b>equivalence</b>(const </font><font face="Courier New">Segment1</font><font face="Courier New">&amp; segment1,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const </font><font face="Courier New">Segment1</font><font face="Courier New">&amp; segment2)</font></td>
+&lt;typename </font><font face="Courier New">Segment1</font><font
+ face="Courier New">, typename </font><font face="Courier New">Segment1</font><font
+ face="Courier New">&gt;<br />
+bool <b>equivalence</b>(const </font><font face="Courier New">Segment1</font><font
+ face="Courier New">&amp; segment1,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const </font><font face="Courier New">Segment1</font><font
+ face="Courier New">&amp; segment2)</font></td>
             <td>Given two objects that model segment, compares and
 returns true if their low and high values are respectively equal.</td>
           </tr>
           <tr>
- <td><span style="font-family: Courier New,Courier,monospace;">template &lt;typename Segment, typename Point&gt;</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">int <b>orientation</b></span><span style="font-family: Courier New,Courier,monospace;">(const </span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span style="font-family: Courier New,Courier,monospace;">&amp; segment,</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const Point&amp; point)</span><br />
+ <td><span
+ style="font-family: Courier New,Courier,monospace;">template
+&lt;typename Segment, typename Point&gt;</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">int
+ <b>orientation</b></span><span
+ style="font-family: Courier New,Courier,monospace;">(const </span><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><span
+ style="font-family: Courier New,Courier,monospace;">&amp; segment,</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const Point&amp; point)</span><br />
             </td>
             <td>Implements
 a robust orientation test of two objects that model segment and point.
 Returns 0, if the point is collinear to the segment.<br />
 Returns 1, if the point lies to the left of the segment.<br />
 Returns -1, if the point lies to the right of the segment.<br />
-
             </td>
           </tr>
           <tr>
- <td><span style="font-family: Courier New,Courier,monospace;">template &lt;typename Segment1, typename Segment2&gt;</span><br style="font-family: Courier New,Courier,monospace;" />
-
- <span style="font-family: Courier New,Courier,monospace;">int <b>orientation</b></span><span style="font-family: Courier New,Courier,monospace;">(const </span><span style="font-family: Courier New,Courier,monospace;">Segment1</span><span style="font-family: Courier New,Courier,monospace;">&amp; segment1,</span><br style="font-family: Courier New,Courier,monospace;" />
-
- <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const Segment2&amp; segment2)</span></td>
+ <td><span
+ style="font-family: Courier New,Courier,monospace;">template
+&lt;typename Segment1, typename Segment2&gt;</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">int
+ <b>orientation</b></span><span
+ style="font-family: Courier New,Courier,monospace;">(const </span><span
+ style="font-family: Courier New,Courier,monospace;">Segment1</span><span
+ style="font-family: Courier New,Courier,monospace;">&amp; segment1,</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const Segment2&amp; segment2)</span></td>
             <td>Implements a robust orientation test of two objects
 that model segment. Note: segments are treated as math.
 vectors.<br />
@@ -210,174 +270,295 @@
 Returns -1, if the second segment is CW oriented to the first segment.<br />
             </td>
           </tr>
-<tr>
- <td><span style="font-family: Courier New,Courier,monospace;">template &lt;typename </span><font face="Courier New">Segment, typename Point</font><span style="font-family: Courier New,Courier,monospace;">&gt;</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">bool </span><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">contains</span><span style="font-family: Courier New,Courier,monospace;">(const </span><font face="Courier New">Segment</font><span style="font-family: Courier New,Courier,monospace;">&amp; segment,</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp; const Point&amp; value,</span><span style="font-family: Courier New,Courier,monospace;"> bool consider_touch)</span><br />
- </td>
- <td>Returns true if an object that models segment contains an object that models point, else false.<br />
- </td>
- </tr>
- <tr>
- <td><span style="font-family: Courier New,Courier,monospace;">template &lt;typename Segment1, typename Segment2&gt;</span><br style="font-family: Courier New,Courier,monospace;" />
-
- <span style="font-family: Courier New,Courier,monospace;">bool </span><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">contains</span><span style="font-family: Courier New,Courier,monospace;">(const </span><span style="font-family: Courier New,Courier,monospace;">Segment1</span><span style="font-family: Courier New,Courier,monospace;">&amp; segment1,</span><br style="font-family: Courier New,Courier,monospace;" />
-
- <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp; const </span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span style="font-family: Courier New,Courier,monospace;">2&amp; segment2,</span> <span style="font-family: Courier New,Courier,monospace;">bool consider_touch)</span></td>
- <td>Returns true if the first object contains the second one, else false. Both objects model segment.<br />
- </td>
- </tr>
- <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>&gt;<br />
-point_type <span style="font-weight: bold;">low</span>(const <span style="font-family: Courier New,Courier,monospace;">Segment</span>&amp; segment)<br />
- </td>
- <td>Returns the low endpoint of an object that models segment.<br />
- </td>
- </tr>
- <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>&gt;<br />
-point_type <span style="font-weight: bold;">high</span>(const <span style="font-family: Courier New,Courier,monospace;">Segment</span>&amp; segment)</td>
- <td>Returns the high endpoint of an object that models segment.<br />
- </td>
- </tr>
- <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>&gt;<br />
-point_type <span style="font-weight: bold;">center</span>(const <span style="font-family: Courier New,Courier,monospace;">Segment</span>&amp; segment)</td>
- <td>Returns the central point of an object that models segment.<br />
- </td>
- </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>, typename Point&gt;<br />void <span style="font-weight: bold;">low</span>(<span style="font-family: Courier New,Courier,monospace;">Segment</span>&amp; segment, const Point&amp; point)</td>
+ <td><span
+ style="font-family: Courier New,Courier,monospace;">template
+&lt;typename </span><font face="Courier New">Segment, typename Point</font><span
+ style="font-family: Courier New,Courier,monospace;">&gt;</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">bool
+ </span><span
+ style="font-weight: bold; font-family: Courier New,Courier,monospace;">contains</span><span
+ style="font-family: Courier New,Courier,monospace;">(const </span><font
+ face="Courier New">Segment</font><span
+ style="font-family: Courier New,Courier,monospace;">&amp; segment,</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp;
+const Point&amp; value,</span><span
+ style="font-family: Courier New,Courier,monospace;"> bool
+consider_touch)</span><br />
+ </td>
+ <td>Returns true if an object that models segment contains
+an object that models point, else false.<br />
+ </td>
+ </tr>
+ <tr>
+ <td><span
+ style="font-family: Courier New,Courier,monospace;">template
+&lt;typename Segment1, typename Segment2&gt;</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">bool
+ </span><span
+ style="font-weight: bold; font-family: Courier New,Courier,monospace;">contains</span><span
+ style="font-family: Courier New,Courier,monospace;">(const </span><span
+ style="font-family: Courier New,Courier,monospace;">Segment1</span><span
+ style="font-family: Courier New,Courier,monospace;">&amp; segment1,</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp;
+const </span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span
+ style="font-family: Courier New,Courier,monospace;">2&amp; segment2,</span>
+ <span style="font-family: Courier New,Courier,monospace;">bool
+consider_touch)</span></td>
+ <td>Returns true if the first object contains the second
+one, else false. Both objects model segment.<br />
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>&gt;<br />
+point_type <span style="font-weight: bold;">low</span>(const <span
+ style="font-family: Courier New,Courier,monospace;">Segment</span>&amp;
+segment)<br />
+ </td>
+ <td>Returns the low endpoint of an object that models
+segment.<br />
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>&gt;<br />
+point_type <span style="font-weight: bold;">high</span>(const <span
+ style="font-family: Courier New,Courier,monospace;">Segment</span>&amp;
+segment)</td>
+ <td>Returns the high endpoint of an object that models
+segment.<br />
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>&gt;<br />
+point_type <span style="font-weight: bold;">center</span>(const <span
+ style="font-family: Courier New,Courier,monospace;">Segment</span>&amp;
+segment)</td>
+ <td>Returns the central point of an object that models
+segment.<br />
+ </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>,
+typename Point&gt;<br />
+void <span style="font-weight: bold;">low</span>(<span
+ style="font-family: Courier New,Courier,monospace;">Segment</span>&amp;
+segment, const Point&amp; point)</td>
             <td>Sets the low endpoint of an object that models segment.<br />
             </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename <span style="font-family: Courier New,Courier,monospace;">Segment, typename Point</span>&gt;<br />
-void <span style="font-weight: bold;">high</span>(<span style="font-family: Courier New,Courier,monospace;">Segment</span>&amp; segment, const Point&amp; point)</td>
- <td>Sets the high endpoint of an object that models of segment.<br />
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename <span style="font-family: Courier New,Courier,monospace;">Segment,
+typename Point</span>&gt;<br />
+void <span style="font-weight: bold;">high</span>(<span
+ style="font-family: Courier New,Courier,monospace;">Segment</span>&amp;
+segment, const Point&amp; point)</td>
+ <td>Sets the high endpoint of an object that models of
+segment.<br />
             </td>
           </tr>
           <tr>
- <td><span style="font-family: Courier New,Courier,monospace;">template &lt;typename </span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span style="font-family: Courier New,Courier,monospace;">&gt;</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">distance_type <span style="font-weight: bold;">length</span>(const </span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span style="font-family: Courier New,Courier,monospace;">&amp; segment)</span><br />
+ <td><span
+ style="font-family: Courier New,Courier,monospace;">template
+&lt;typename </span><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><span
+ style="font-family: Courier New,Courier,monospace;">&gt;</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">distance_type
+ <span style="font-weight: bold;">length</span>(const </span><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><span
+ style="font-family: Courier New,Courier,monospace;">&amp; segment)</span><br />
             </td>
             <td>Returns length of an object that models segment.<br />
             </td>
           </tr>
-
-
-
-
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;typename </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&gt;<br /></font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; <b>scale_up</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; </font><font face="Courier New">segment</font><font face="Courier New">, <br />&nbsp;&nbsp;&nbsp; unsigned_area_type factor)</font></td>
- <td>Multiplies x and y coordinates of both endpoints of an object that models segment by unsigned factor.</td>
+&lt;typename </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&gt;<br />
+ </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; <b>scale_up</b>(</font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; </font><font face="Courier New">segment</font><font
+ face="Courier New">, <br />
+&nbsp;&nbsp;&nbsp; unsigned_area_type factor)</font></td>
+ <td>Multiplies x and y coordinates of both endpoints of an
+object that models segment by unsigned factor.</td>
           </tr>
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;typename </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&gt;<br />
- </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; <b>scale_down</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; </font><font face="Courier New">segment</font><font face="Courier New">, <br />
+&lt;typename </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&gt;<br />
+ </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; <b>scale_down</b>(</font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; </font><font face="Courier New">segment</font><font
+ face="Courier New">, <br />
 &nbsp;&nbsp;&nbsp; unsigned_area_type factor)</font></td>
- <td>Divides x and y coordinates of both endpoints of an object that models segment by unsigned factor.</td>
+ <td>Divides x and y coordinates of both endpoints of an
+object that models segment by unsigned factor.</td>
           </tr>
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;typename </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">, typename Scale&gt;<br />
- </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; <b>scale</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; </font><font face="Courier New">segment</font><font face="Courier New">, const Scale&amp; sc) </font></td>
+&lt;typename </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">, typename Scale&gt;<br />
+ </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; <b>scale</b>(</font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; </font><font face="Courier New">segment</font><font
+ face="Courier New">, const Scale&amp; sc) </font></td>
             <td>Calls
-the scale member function of the scaling type on the low and high endpoint of
+the scale member function of the scaling type on the low and high
+endpoint of
 an object that models segment and updates the segment with the
 scaled endpoints.</td>
           </tr>
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;typename </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">, typename Transform&gt;<br /></font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; <b>transform</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; segment, const </font><font face="Courier New">Transform</font><font face="Courier New">&amp; tr) </font></td>
+&lt;typename </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">, typename Transform&gt;<br />
+ </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; <b>transform</b>(</font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; segment, const </font><font
+ face="Courier New">Transform</font><font face="Courier New">&amp; tr) </font></td>
             <td>Calls the transform member function of transform type
-on the low and high endpoints of an object that models segment and updates the segment with the transformed endpoints.</td>
+on the low and high endpoints of an object that models segment and
+updates the segment with the transformed endpoints.</td>
           </tr>
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;typename </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&gt;<br />
- </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; <b>move</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; segment, orientation_2d<br />
+&lt;typename </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&gt;<br />
+ </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; <b>move</b>(</font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; segment, orientation_2d<br />
 &nbsp;&nbsp;&nbsp; coordinate_difference displacement)</font></td>
- <td>Adds displacement value to the x or y coordinates of both endpoints of an object
+ <td>Adds displacement value to the x or y coordinates of
+both endpoints of an object
 that models segment indicated by the orientation_2d.</td>
           </tr>
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;</font><span style="font-family: Courier New,Courier,monospace;">Segment, Point</span><font face="Courier New">&gt;<br />
- </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; <b>convolve</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; segment, const Point&amp; point)</font></td>
- <td>Convolves both endpoints of an object that models segment with an object that models a point.<br />
-</td>
+&lt;</font><span style="font-family: Courier New,Courier,monospace;">Segment,
+Point</span><font face="Courier New">&gt;<br />
+ </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; <b>convolve</b>(</font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; segment, const Point&amp; point)</font></td>
+ <td>Convolves both endpoints of an object that models
+segment with an object that models a point.<br />
+ </td>
           </tr>
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;</font><span style="font-family: Courier New,Courier,monospace;">Segment, Point</span><font face="Courier New">&gt;<br />
- </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; <b>deconvolve</b>(</font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; segment, const Point&amp; point)</font></td>
- <td>Deconvolves both endpoints of an object that models segment with an object that models a point. </td>
- </tr>
- <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename Segment1, typename Segment2&gt;<br />
-
-
-bool <span style="font-weight: bold;">abuts</span>(const Segment1&amp; segment1,<br />
-
-
+&lt;</font><span style="font-family: Courier New,Courier,monospace;">Segment,
+Point</span><font face="Courier New">&gt;<br />
+ </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; <b>deconvolve</b>(</font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; segment, const Point&amp; point)</font></td>
+ <td>Deconvolves both endpoints of an object that models
+segment with an object that models a point. </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename Segment1, typename Segment2&gt;<br />
+bool <span style="font-weight: bold;">abuts</span>(const Segment1&amp;
+segment1,<br />
 &nbsp;&nbsp;&nbsp; const Segment2&amp; segment2, direction_1d dir)</td>
- <td>Returns true if two objects that model segment abut, depending on the direction_1d value.</td>
- </tr>
- <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename Segment1, typename Segment2&gt;<br />
-
-bool <span style="font-weight: bold;">abuts</span>(const Segment1&amp; segment1,<br />
-
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const Segment2&amp; segment2)</td>
- <td>Returns true if two objects that model segment abut: either the first one to the second one or vice versa.</td>
+ <td>Returns true if two objects that model segment abut,
+depending on the direction_1d value.</td>
           </tr>
-
-
           <tr>
- <td><span style="font-family: Courier New,Courier,monospace;">template &lt;typename Segment1, typename Segment2&gt;</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">bool <span style="font-weight: bold;">intersects</span>(const Segment1&amp; segment1,</span><br style="font-family: Courier New,Courier,monospace;" />
- <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const Segment2&amp; segment2,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool consider_touch)</span><br />
- </td>
- <td>Returns true if two objects that model segment intersect, else false.<br />
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename Segment1, typename Segment2&gt;<br />
+bool <span style="font-weight: bold;">abuts</span>(const Segment1&amp;
+segment1,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const
+Segment2&amp; segment2)</td>
+ <td>Returns true if two objects that model segment abut:
+either the first one to the second one or vice versa.</td>
+ </tr>
+ <tr>
+ <td><span
+ style="font-family: Courier New,Courier,monospace;">template
+&lt;typename Segment1, typename Segment2&gt;</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">bool
+ <span style="font-weight: bold;">intersects</span>(const
+Segment1&amp; segment1,</span><br
+ style="font-family: Courier New,Courier,monospace;" />
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const Segment2&amp; segment2,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+bool consider_touch)</span><br />
+ </td>
+ <td>Returns true if two objects that model segment
+intersect, else false.<br />
             </td>
           </tr>
-
-
-<tr>
- <td style="font-family: Courier New,Courier,monospace;"><font face="Courier New">template
-&lt;typename </font><span style="font-family: Courier New,Courier,monospace;">Segment, typename Point</span><font face="Courier New">&gt;<br />distance_type <b>euclidean_distance</b>(<br />
-&nbsp;&nbsp;&nbsp; const </font><span style="font-family: Courier New,Courier,monospace;">Segment</span><font face="Courier New">&amp; segment, const Point&amp; point)</font>
- </td>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;"><font
+ face="Courier New">template
+&lt;typename </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment, typename
+Point</span><font face="Courier New">&gt;<br />
+distance_type <b>euclidean_distance</b>(<br />
+&nbsp;&nbsp;&nbsp; const </font><span
+ style="font-family: Courier New,Courier,monospace;">Segment</span><font
+ face="Courier New">&amp; segment, const Point&amp; point)</font> </td>
             <td>Returns distance from an object that models segment
-to an object that models point.
- </td>
+to an object that models point. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;"><font face="Courier New">template
-&lt;typename Segment1, typename </font><font face="Courier New">Segment2</font><font face="Courier New">&gt;<br />distance_type <b>euclidean_distance</b>(<br />
-&nbsp;&nbsp;&nbsp; const </font><font face="Courier New">Segment1</font><font face="Courier New">&amp; segment1, const </font><font face="Courier New">Segment2</font><font face="Courier New">&amp; segment2)</font>
- </td>
- <td>Returns distance between two objects that model segment.
- </td>
+ <td style="font-family: Courier New,Courier,monospace;"><font
+ face="Courier New">template
+&lt;typename Segment1, typename </font><font face="Courier New">Segment2</font><font
+ face="Courier New">&gt;<br />
+distance_type <b>euclidean_distance</b>(<br />
+&nbsp;&nbsp;&nbsp; const </font><font face="Courier New">Segment1</font><font
+ face="Courier New">&amp; segment1, const </font><font
+ face="Courier New">Segment2</font><font face="Courier New">&amp;
+segment2)</font> </td>
+ <td>Returns distance between two objects that model
+segment. </td>
           </tr>
-
-
-
-
         </tbody>
       </table>
       <h1>Segment Data</h1>
       <p> </p>
- <p>The library provides a model of the segment concept declared <font face="Courier New">template&lt;typename T&gt; segment_data</font>, where
+ <p>The library provides a model of the segment concept declared <font
+ face="Courier New">template&lt;typename T&gt; segment_data</font>,
+where
 T is the coordinate type.</p>
       <p>This data type is used internally when a segment is needed and
 is available to the library user, who finds it convenient to use a
-library segment data type instead of providing their own.&nbsp; The data
-type is implemented to be convenient to use with the library traits.</p><h2>Members</h2>
+library segment data type instead of providing their own.&nbsp; The
+data
+type is implemented to be convenient to use with the library traits.</p>
+ <h2>Members</h2>
       <table style="width: 100%;" id="table2" border="1">
         <tbody>
           <tr>
@@ -393,124 +574,152 @@
             <td>point_data&lt;T&gt;<br />
             </td>
           </tr>
-<tr>
+ <tr>
             <td width="586"><font face="Courier New"><b>segment_data</b>()</font></td>
             <td>Default constructor.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New"><b>segment_data</b>(const point_type&amp; low,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const point_type&amp; high)</font></td>
+ <td width="586"><font face="Courier New"><b>segment_data</b>(const
+point_type&amp; low,<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const point_type&amp; high)</font></td>
             <td>Constructs a segment from the given endpoints.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New"><b>segment_data</b>(const segment_data&amp; that)</font></td>
+ <td width="586"><font face="Courier New"><b>segment_data</b>(const
+segment_data&amp; that)</font></td>
             <td>Copy constructor.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New">segment_data&amp; <b>operator=</b>(const segment_data&amp; that)</font></td>
+ <td width="586"><font face="Courier New">segment_data&amp; <b>operator=</b>(const
+segment_data&amp; that)</font></td>
             <td>Assignment operator.</td>
           </tr>
           <tr>
             <td width="586"><font face="Courier New">template
 &lt;typename SegmentType&gt;<b><br />
- </b>segment_data&amp; <b>operator=</b>(const </font><font face="Courier New">SegmentType</font><font face="Courier New">&amp; that)
+ </b>segment_data&amp; <b>operator=</b>(const </font><font
+ face="Courier New">SegmentType</font><font face="Courier New">&amp;
+that)
 const</font></td>
             <td>Assign from an object that is a model of segment.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New">bool<b> operator==</b>(const segment_data&amp; that) const</font></td>
+ <td width="586"><font face="Courier New">bool<b> operator==</b>(const
+segment_data&amp; that) const</font></td>
             <td>Equality operator overload.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New"><b> </b>bool<b> operator!=</b>(const segment_data&amp; that) const</font></td>
+ <td width="586"><font face="Courier New"><b> </b>bool<b>
+operator!=</b>(const segment_data&amp; that) const</font></td>
             <td>Inequality operator overload.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New"><b> </b>bool<b> operator&lt;</b>(const segment_data&amp; that) const</font></td>
- <td>Less operator overload. Compares low endpoints then high endpoints to break ties.<br />
-</td>
+ <td width="586"><font face="Courier New"><b> </b>bool<b>
+operator&lt;</b>(const segment_data&amp; that) const</font></td>
+ <td>Less operator overload. Compares low endpoints then
+high endpoints to break ties.<br />
+ </td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New"><b> </b>bool<b> operator&lt;=</b>(const segment_data&amp; that) const</font></td>
- <td>Less or equal operator overload. Compares low endpoints then high endpoints to break ties.<br />
-</td>
+ <td width="586"><font face="Courier New"><b> </b>bool<b>
+operator&lt;=</b>(const segment_data&amp; that) const</font></td>
+ <td>Less or equal operator overload. Compares low endpoints
+then high endpoints to break ties.<br />
+ </td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New"><b> </b>bool<b> operator&gt;</b>(const segment_data&amp; that) const</font></td>
- <td>Greater operator overload. Compares low endpoints then high endpoints to break ties.<br />
-</td>
+ <td width="586"><font face="Courier New"><b> </b>bool<b>
+operator&gt;</b>(const segment_data&amp; that) const</font></td>
+ <td>Greater operator overload. Compares low endpoints then
+high endpoints to break ties.<br />
+ </td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New"><b> </b>bool<b> operator&gt;=</b>(const segment_data&amp; that) const</font></td>
- <td>Greater or equal operator overload. Compares low endpoints then high endpoints to break ties.<br />
-</td>
+ <td width="586"><font face="Courier New"><b> </b>bool<b>
+operator&gt;=</b>(const segment_data&amp; that) const</font></td>
+ <td>Greater or equal operator overload. Compares low
+endpoints then high endpoints to break ties.<br />
+ </td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New">point_type <b>get</b>(direction_1d dir) const</font></td>
- <td>Retrieves the low/high endpoint considering direction value.</td>
+ <td width="586"><font face="Courier New">point_type <b>get</b>(direction_1d
+dir) const</font></td>
+ <td>Retrieves the low/high endpoint considering direction
+value.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New">point_type <span style="font-weight: bold;">low</span>() const</font></td>
+ <td width="586"><font face="Courier New">point_type <span
+ style="font-weight: bold;">low</span>() const</font></td>
             <td>Retrieves the low endpoint.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New">point_type <span style="font-weight: bold;">high</span>() const</font></td>
+ <td width="586"><font face="Courier New">point_type <span
+ style="font-weight: bold;">high</span>() const</font></td>
             <td>Retrieves the high endpoint.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New">void <b>set</b></font><font face="Courier New">(direction_1d dir</font><font face="Courier New">, const point_type&amp; point)</font></td>
+ <td width="586"><font face="Courier New">void <b>set</b></font><font
+ face="Courier New">(direction_1d dir</font><font face="Courier New">,
+const point_type&amp; point)</font></td>
             <td>Sets the endpoint in the given direction.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New">segment_data&amp; <span style="font-weight: bold;">low</span>(const point_type&amp; point)</font></td>
+ <td width="586"><font face="Courier New">segment_data&amp; <span
+ style="font-weight: bold;">low</span>(const point_type&amp; point)</font></td>
             <td>Sets the low endpoint.</td>
           </tr>
           <tr>
- <td width="586"><font face="Courier New">segment_data&amp; <span style="font-weight: bold;">high(</span>const point_type&amp; point)</font></td>
+ <td width="586"><font face="Courier New">segment_data&amp; <span
+ style="font-weight: bold;">high(</span>const point_type&amp; point)</font></td>
             <td>Sets the high endpoint.</td>
           </tr>
         </tbody>
       </table>
-
       <h1>Segment Utils</h1>
       <p> </p>
- <p>The library provides several algorithms for the manipulation of
- sets of segment data. In particular, the generalize line segment
- intersection algorithm used for polygon set operations is exposed
- through several interfaces to allow it to be used with any
- collection or sequence of objects that model the <font face="Courier New">segment_concept</font>.
- </p><h2>Functions</h2>
+ <p>The library provides several algorithms for the manipulation
+of sets of segment data. In particular, the generalize line segment
+intersection algorithm used for polygon set operations is exposed
+through several interfaces to allow it to be used with any collection
+or sequence of objects that model the <font face="Courier New">segment_concept</font>.
+ </p>
+ <h2>Functions</h2>
       <table style="width: 100%;" id="table3" border="1">
         <tbody>
-
-
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;</font><font face="Courier New">typename SegmentContainer</font><font face="Courier New">,</font><font face="Courier New"><br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typename SegmentIterator</font><font face="Courier New">&gt;<b><br />
+&lt;</font><font face="Courier New">typename SegmentContainer</font><font
+ face="Courier New">,</font><font face="Courier New"><br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typename
+SegmentIterator</font><font face="Courier New">&gt;<b><br />
             </b>void <b>intersect_segments</b>(<br />
-&nbsp;&nbsp;&nbsp; </font><font face="Courier New">SegmentContainer* result,</font><br />
- <font face="Courier New">
-&nbsp;&nbsp;&nbsp; SegmentIterator first,<br />
-&nbsp;&nbsp;&nbsp; SegmentIterator last)
- </font></td>
+&nbsp;&nbsp;&nbsp; </font><font face="Courier New">SegmentContainer*
+result,</font><br />
+ <font face="Courier New">&nbsp;&nbsp;&nbsp; SegmentIterator
+first,<br />
+&nbsp;&nbsp;&nbsp; SegmentIterator last) </font></td>
             <td>Accumulates
 the result of splitting the segments in the iterator range at their
 intersection points into the result container. Preconditions: segment
-type used by all the input structures should model segment concept.Postconditions: no segments intersect except at their end
- points. Useful to satisfy the precondition of voronoi diagram
- construction.
- Expected n log n runtime, worst case quadratic runtime wrt. vertices + intersections.
- </td>
+type used by all the input structures should model segment
+concept.Postconditions: no segments intersect except at their end
+points. Useful to satisfy the precondition of voronoi diagram
+construction. Expected n log n runtime, worst case quadratic runtime
+wrt. vertices + intersections. </td>
           </tr>
           <tr>
             <td width="586"><font face="Courier New">template
-&lt;</font><font face="Courier New">typename Segment,</font><font face="Courier New"><br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font face="Courier New">typename SegmentIterator</font><font face="Courier New">&gt;<b><br />
+&lt;</font><font face="Courier New">typename Segment,</font><font
+ face="Courier New"><br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font
+ face="Courier New">typename SegmentIterator</font><font
+ face="Courier New">&gt;<b><br />
             </b>void <b>intersect_segments</b>(<br />
-&nbsp;&nbsp;&nbsp; </font><font face="Courier New">vector&lt;pair&lt;size_t, Segment&gt;* result,</font><br />
- <font face="Courier New">
-&nbsp;&nbsp;&nbsp; SegmentIterator first,<br />
+&nbsp;&nbsp;&nbsp; </font><font face="Courier New">vector&lt;pair&lt;size_t,
+Segment&gt;* result,</font><br />
+ <font face="Courier New">&nbsp;&nbsp;&nbsp; SegmentIterator
+first,<br />
 &nbsp;&nbsp;&nbsp; SegmentIterator last)</font></td>
             <td>Accumulates
 the result of splitting the segments in the iterator range at their
@@ -522,36 +731,36 @@
 inputs segments. Expected n log n runtime, worst case quadratic runtime
 wrt. vertices + intersections. </td>
           </tr>
-
           <tr>
             <td width="586"><font face="Courier New">template
 &lt;</font><font face="Courier New">typename Rectangle,<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font face="Courier New">typename </font><font face="Courier New">SegmentIterator</font><font face="Courier New">&gt;<b><br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font
+ face="Courier New">typename </font><font face="Courier New">SegmentIterator</font><font
+ face="Courier New">&gt;<b><br />
             </b>void <span style="font-weight: bold;">envelope_segments</span>(<br />
 &nbsp;&nbsp;&nbsp; </font><font face="Courier New">Rectangle* rect,</font><br />
- <font face="Courier New">
-&nbsp;&nbsp;&nbsp; </font><font face="Courier New">SegmentIterator first,<br />&nbsp; &nbsp; SegmentIterator last</font><font face="Courier New">)
- </font></td>
+ <font face="Courier New">&nbsp;&nbsp;&nbsp; </font><font
+ face="Courier New">SegmentIterator first,<br />
+&nbsp; &nbsp; SegmentIterator last</font><font face="Courier New">) </font></td>
             <td>Computes
 the bounding rectangle of the iterator range of line segments.
 Preconditions: segment type and rectangle type used by the input
 structures should model segment concept and rectangle concept
 respectively. Linear runtime. </td>
           </tr>
-
-
-
-
         </tbody>
       </table>
-
       </td>
     </tr>
     <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top"> &nbsp;</td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
       <table class="docinfo" id="table4" frame="void" rules="none">
- <colgroup> <col class="docinfo-name" /><col class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
           <tr>
             <th class="docinfo-name">Copyright:</th>
             <td>Copyright © Intel Corporation 2008-2010.</td>
@@ -559,7 +768,10 @@
           <tr class="field">
             <th class="docinfo-name">License:</th>
             <td class="field-body">Distributed under the Boost Software
-License, Version 1.0. (See accompanying file <tt class="literal"> <span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="http://www.boost.org/LICENSE_1_0.txt">
 http://www.boost.org/LICENSE_1_0.txt>)</td>
           </tr>
         </tbody>
@@ -568,6 +780,5 @@
     </tr>
   </tbody>
 </table>
-
-
-</body></html>
+</body>
+</html>

Added: branches/release/libs/polygon/doc/images/voronoi1.png
==============================================================================
Binary file. No diff available.

Modified: branches/release/libs/polygon/doc/index.htm
==============================================================================
--- branches/release/libs/polygon/doc/index.htm (original)
+++ branches/release/libs/polygon/doc/index.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,128 +1,132 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
 <!--
     Copyright 2009-2010 Intel Corporation
     license banner
---><title>Boost Polygon Library: Main Page</title>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body><table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0"><tbody><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center">
- <img src="images/boost.png" border="0" height="86" width="277" /><a title="www.boost.org home page" href="http://www.boost.org/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
+-->
+ <title>Boost Polygon Library: Main Page</title>
+ <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
+<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277" /><a
+ title="www.boost.org home page" href="http://www.boost.org/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ <div style="margin: 5px;">
+ <h3 class="navbar">Contents</h3>
+ <ul>
+ <li>Boost.Polygon Main Page</li>
+ <li>Design Overview</li>
+ <li>Isotropy</li>
+ <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
+ <li>Point Concept</li>
         <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li>Polygon 90 With Holes Concept</li>
- <li>Polygon 45 Concept</li>
- <li>Polygon 45 With Holes Concept</li>
- <li>Polygon Concept</li>
- <li>Polygon With Holes Concept</li>
- <li>Polygon 90 Set Concept</li>
- <li>Polygon 45 Set Concept</li>
- <li>Polygon Set Concept</li>
- <li>Connectivity Extraction 90</li>
- <li>Connectivity Extraction 45</li>
- <li>Connectivity Extraction</li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
+ <li>Rectangle Concept</li>
+ <li>Polygon 90 Concept</li>
+ <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
+With Holes Concept</a></li>
+ <li>Polygon 45 Concept</li>
+ <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
+With Holes Concept</a></li>
+ <li>Polygon Concept</li>
+ <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
+Holes Concept</a></li>
+ <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
+Concept</a></li>
+ <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
+Concept</a></li>
+ <li>Polygon Set Concept</li>
+ <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
+Extraction 90</a></li>
+ <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
+Extraction 45</a></li>
+ <li><a href="gtl_connectivity_extraction.htm">Connectivity
+Extraction</a></li>
+ <li>Property Merge 90</li>
+ <li>Property Merge 45</li>
+ <li>Property Merge</li>
         <li><a href="voronoi_main.htm">Voronoi Main Page<br />
-</a></li>
+ </a></li>
         <li>Voronoi Benchmark<br />
         </li>
-
- <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br />
-</a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br />
- </li>
-
-
-
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
- Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- <li>Voronoi Basic Tutorial</li>
- <li>Voronoi Advanced Tutorial</li>
- </ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center">
- <img src="images/intlogo.gif" border="0" height="51" width="127" /><a title="www.adobe.com home page" href="http://www.adobe.com/" tabindex="2" style="border: medium none ;">
- </a>
- </div>
-</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-<!-- End Header -->
-
-<br />
-<p>
-</p><h1>THE BOOST.POLYGON LIBRARY</h1>
-<p>The Boost.Polygon library provides algorithms focused on manipulating planar
-polygon geometry data.&nbsp; Specific algorithms provided are the polygon set
-operations (intersection, union, difference, disjoint-union) and related
-algorithms such as polygon connectivity graph extraction, offsetting and map-overlay.&nbsp;
-An example of the disjoint-union (XOR) of figure a and figure b is shown below
-in figure c.&nbsp;
-These so-called Boolean algorithms are of significant interest in GIS (Geospatial Information
-Systems), VLSI CAD as well all other fields of CAD, and many more application
-areas, and providing them is the primary focus of this library.&nbsp; The
-Boost.Polygon library is not intended to cover all of computational
-geometry in its scope, and provides a set of capabilities for working with
-coordinates, points, intervals and rectangles that are needed to support
-implementing and interacting with polygon data structures and algorithms.&nbsp; </p><img src="images/hand.png" border="0" height="277" width="837" /><p>
-One of the important features of the library is the implementation of
-the generic sweepline algorithm to construct Voronoi diagrams of points and linear segments in 2D (developed
+ <li>Voronoi Builder</li>
+ <li>Voronoi Diagram</li>
+ </ul>
+ <h3 class="navbar">Other Resources</h3>
+ <ul>
+ <li>GTL Boostcon 2009 Paper</li>
+ <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
+Presentation</a></li>
+ <li>Performance Analysis</li>
+ <li>Layout Versus Schematic Tutorial</li>
+ <li>Minkowski Sum Tutorial</li>
+ <li>Voronoi Basic Tutorial</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
+Tutorial</a></li>
+ </ul>
+ </div>
+ <h3 class="navbar">Polygon Sponsor</h3>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127" /><a
+ title="www.adobe.com home page" href="http://www.adobe.com/"
+ tabindex="2" style="border: medium none ;"> </a> </div>
+ </td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+<!-- End Header --><br />
+ <p>
+ </p>
+ <h1>THE BOOST.POLYGON LIBRARY</h1>
+ <p>The Boost.Polygon library provides algorithms focused on
+manipulating planar polygon geometry data.&nbsp; Specific algorithms
+provided are the polygon set operations (intersection, union,
+difference, disjoint-union) and related algorithms such as polygon
+connectivity graph extraction, offsetting and map-overlay.&nbsp; An
+example of the disjoint-union (XOR) of figure a and figure b is shown
+below in figure c.&nbsp; These so-called Boolean algorithms are of
+significant interest in GIS (Geospatial Information Systems), VLSI CAD
+as well all other fields of CAD, and many more application areas, and
+providing them is the primary focus of this library.&nbsp; The
+Boost.Polygon library is not intended to cover all of computational
+geometry in its scope, and provides a set of capabilities for working
+with coordinates, points, intervals and rectangles that are needed to
+support implementing and interacting with polygon data structures and
+algorithms.&nbsp; </p>
+ <img src="images/hand.png" border="0" height="277" width="837" />
+ <p>One of the important features of the library is the
+implementation of
+the generic sweepline algorithm to construct Voronoi diagrams of points
+and linear segments in 2D (developed
 as part of the GSoC 2010 program). Voronoi diagram data structure has
 applications in image segmentation, optical character recognition,
-nearest neighbor queries execution. It is closely related with the other
+nearest neighbor queries execution. It is closely related with the
+other
 computational geometry concepts: Delaunay triangulation, medial axis,
 straight skeleton, the largest empty circle. The Boost.Polygon library
 provides interface to construct Voronoi diagram of points figure a and
 line segments figure b (the last could be used to discretize any
-two-dimensional curve). Figure c contains the example of the medial axis of the
-non-convex polygon. The implementation outperforms most of the known
+two-dimensional curve). Figure c contains the example of the medial
+axis of the
+non-convex polygon. The implementation outperforms
+most of the known
 commercial and non-commercial libraries in both efficiency and
-numerical robustness aspects. You may find more details on the topic at the Voronoi main page.<br />
-
-</p>
-<p><img src="images/voronoi.png" border="0" height="300" width="900" /></p>
-<p>The coordinate data type is a template parameter of all data types
+numerical robustness aspects. You may find more details on the topic at
+the Voronoi main page.<br />
+ </p>
+ <p><img src="images/voronoi.png" border="0" height="300"
+ width="900" /></p>
+ <p>The coordinate data type is a template parameter of all data
+types
 and algorithms provided by the library, and is expected to be integral.
 Floating point coordinate data types are not supported by the
 algorithms implemented in the library due to the fact that the
@@ -131,161 +135,161 @@
 point representations.&nbsp;
 For additional detailed discussion of the library and its
 implementation including benchmark comparisons with other open source
-alternatives please see the paper and
-presentation from
-boostcon 2009 as well as a detailed
-analysis of the runtime complexity of
+alternatives please see the paper
+and
+ presentation from
+ boostcon 2009 as well
+as a detailed
+ analysis of the runtime complexity of
 the library's core algorithms. </p>
-<p>The design philosophy behind the polygon library was to create an API for
-invoking the library algorithms it provides on user geometry data types that is maximally
-intuitive, minimally error-prone and easy to integrate into pre-existing
-applications.&nbsp; C++-concepts based template meta-programming combined with
-generic operator overloading meets these design goals without sacrificing the
-runtime or memory efficiency of the underlying algorithms.&nbsp; The API is
-intended to demonstrate what could be achieved with ease by a C++-concepts based
-library interface, but is implemented based on current language features.&nbsp; This API makes
-the following code snippet that operates on non-library geometry types possible:</p>
-<p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00">
-
-</p:colorscheme><div v:shape="_x0000_s1026" class="O">
- <div style="text-align: justify;">
- <nobr>
- <span style="font-family: Courier New;">
- void foo(list&lt;CPolygon&gt;&amp; result, const list&lt;CPolygon&gt;&amp; a, </span></nobr><br />
- <span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- </span><nobr>
- <span style="font-family: Courier New;">
- const list&lt;CPolygon&gt;&amp;
- b, int deflateValue) { </span></nobr></div>
- <div style="text-align: justify;">
- <nobr>
-<span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp;
- CBoundingBox domainExtent; </span></nobr></div>
- <div style="text-align: justify;">
- <nobr>
- <span style="font-family: Courier New;">
- <span style="">&nbsp; </span>&nbsp;&nbsp; using namespace boost::polygon::operators; </span></nobr></div>
- <div style="text-align: justify;">
- <nobr>
- <span style="font-family: Courier New;">
- <span style="">&nbsp; </span>&nbsp;&nbsp;
- boost::polygon::extents(domainExtent, a); </span></nobr></div>
- <div style="text-align: justify;">
- <nobr>
- <span style="font-family: Courier New;">
- <span style="">&nbsp;&nbsp;&nbsp;&nbsp; </span>result += (b &amp;
- domainExtent) ^ (a - deflateValue); </span></nobr></div>
- <div style="text-align: justify;">
- <nobr>
- <span style="font-family: Courier New;">
- }</span></nobr></div>
-</div>
-<p>In the code snippet above the hypothetical polygon type CPolygon has been
-mapped to the library polygon concept and is used with library APIs to clip
-polygon list <i>b</i> against the bounding box of polygon list <i>a</i> and apply the
-disjoint-union of that with polygon list <i>a</i> deflated by some integer amount.&nbsp;
-The end result is accumulated into a list of polygons with a union operation.&nbsp;
-It is considerably more typing to describe this usage of the API than to code
-it, and the description is not much clearer than the code itself.&nbsp;
-A picture is worth a thousand words.</p>
-<p><img src="images/foo.PNG" border="0" height="371" width="432" /></p>
-<p>In Boost.Polygon operations such as those shown above are free
+ <p>The design philosophy behind the polygon library was to create
+an API for invoking the library algorithms it provides on user geometry
+data types that is maximally intuitive, minimally error-prone and easy
+to integrate into pre-existing applications.&nbsp; C++-concepts based
+template meta-programming combined with generic operator overloading
+meets these design goals without sacrificing the runtime or memory
+efficiency of the underlying algorithms.&nbsp; The API is intended to
+demonstrate what could be achieved with ease by a C++-concepts based
+library interface, but is implemented based on current language
+features.&nbsp; This API makes the following code snippet that operates
+on non-library geometry types possible:</p>
+ <p:colorscheme
+ colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00">
+ </p:colorscheme>
+ <div v:shape="_x0000_s1026" class="O">
+ <div style="text-align: justify;"> <nobr> <span
+ style="font-family: Courier New;"> void foo(list&lt;CPolygon&gt;&amp;
+result, const list&lt;CPolygon&gt;&amp; a, </span></nobr><br />
+ <span style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </span><nobr> <span style="font-family: Courier New;"> const
+list&lt;CPolygon&gt;&amp; b, int deflateValue) { </span></nobr></div>
+ <div style="text-align: justify;"> <nobr><span
+ style="font-family: Courier New;">&nbsp;&nbsp;&nbsp;&nbsp;
+CBoundingBox domainExtent; </span></nobr></div>
+ <div style="text-align: justify;"> <nobr> <span
+ style="font-family: Courier New;"> <span style="">&nbsp; </span>&nbsp;&nbsp;
+using namespace boost::polygon::operators; </span></nobr></div>
+ <div style="text-align: justify;"> <nobr> <span
+ style="font-family: Courier New;"> <span style="">&nbsp; </span>&nbsp;&nbsp;
+boost::polygon::extents(domainExtent, a); </span></nobr></div>
+ <div style="text-align: justify;"> <nobr> <span
+ style="font-family: Courier New;"> <span style="">&nbsp;&nbsp;&nbsp;&nbsp;
+ </span>result += (b &amp; domainExtent) ^ (a - deflateValue); </span></nobr></div>
+ <div style="text-align: justify;"> <nobr> <span
+ style="font-family: Courier New;"> }</span></nobr></div>
+ </div>
+ <p>In the code snippet above the hypothetical polygon type
+CPolygon has been mapped to the library polygon concept and is used
+with library APIs to clip polygon list <i>b</i> against the bounding
+box of polygon list <i>a</i> and apply the disjoint-union of that with
+polygon list <i>a</i> deflated by some integer amount.&nbsp; The end
+result is accumulated into a list of polygons with a union
+operation.&nbsp; It is considerably more typing to describe this usage
+of the API than to code it, and the description is not much clearer
+than the code itself.&nbsp; A picture is worth a thousand words.</p>
+ <p><img src="images/foo.PNG" border="0" height="371" width="432" /></p>
+ <p>In Boost.Polygon operations such as those shown above are free
 functions named for what they do, or are overloads of C++ operators
 that make it easy to infer from reading the code what to expect.&nbsp;
-Operators are contained in the namespace <font face="Courier New">boost::polygon::operators</font>
-so that they can be used outside the <font face="Courier New">boost::polygon</font>
-namespace without bringing in the entire <font face="Courier New">boost::polygon</font>
-namespace.&nbsp; Following the
-principle of least astonishment, the inferred behavior should generally match
-the actual behavior.&nbsp; Conventions such as argument ordering (output
-arguments come first) and consistently applying the same semantics across
-different functions (accumulate) reduces the learning curve for new users while reducing the
-need to memorize semantics and argument ordering of many different functions for
-advanced users.</p>
-<p>While the internal library code that implements this API is usually complex and
-cryptic due to heavy use of template meta-programming, the application of the library
-API in user code is usually simple and clear because it is free of any
-extraneous syntax.&nbsp; The one exception to this is the mapping of user types
-to library concepts, which necessitates that the user perform some simple
-template programming and understand some of the internals of how the library
-concept type system works.&nbsp; The examples below should aid the user in
-performing these programming tasks.</p>
-<ul>
-
-<li>Example files:
- <ul>
- <li>point_usage.cpp Using the
- library provided point data type and functions</li>
- <li>custom_point.cpp Mapping a
- user defined point class to the library point_concept</li>
- <li>polygon_usage.cpp Using
- the library provided polygon data types and functions</li>
- <li>custom_polygon.cpp Mapping a
- user defined polygon class to the library polygon_concept</li>
- <li>polygon_set_usage.cpp Using
- the library provided polygon set data types and functions</li>
- <li>custom_polygon_set.cpp
- Mapping a user defined class to the library polygon_set_concept</li>
- <li>connectivity_extraction_usage.cpp
- Using the connectivity extraction algorithm to build a connectivity
- graph on polygons</li>
-
- <li>property_merge_usage.cpp
- Using the n-layer map-overlay algorithm on polygon data</li>
-
- </ul>
-
-</li><li>Tutorials:
-<ul>
- <li>Layout Versus Schematic Learn how to
- apply Boost.Polygon capabilities to implement a simplified circuit
- extraction application</li>
- <li>Minkowski Sum Learn how to
- apply Boost.Polygon capabilities to implement Minkowski sum of polygon sets</li>
- <li>Voronoi Basic Tutorial Learn how
- to construct, traverse, visualize, associate data with Voronoi diagrams without digging into the library details.</li>
- <li>Voronoi Advanced Tutorial
- Learn how to configure the Voronoi builder and Voronoi diagram
- data structure with the user provided coordinate types. </li>
-</ul>
-
-</li></ul>
-
-
-<p>We would like to thank: Thomas Klimpel, Frank Mori Hess, Barend Gehrels,
-Andreas Fabri, Jeffrey Hellrung, Tim Keitt, Markus Werle, Paul A. Bristow,
-Robert Stewart, Mathias Gaunard, Michael Fawcett, Steven Watanabe, Joachim
-Faulhaber, John Bytheway, Sebastian Redl, Mika Heiskanen, John Phillips, Kai
-Benndorf, Hartmut Kaiser, Arash Partow, Maurizio Vitale, Brandon Kohn, David
-Abrahams, Gordon Woodhull, Daniel James, John Maddock, Tom Brinkman, Bo Persson,
-Mateusz Loskot, Christian Henning, Jean-Sebastien Stoezel, for providing
-feedback and or formal review of the library as part of the boost submission
-process and Fernando Cacciola for graciously serving as review manager.</p>
-
-
- </td></tr><tr>
-<td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- &nbsp;</td>
-<td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
-
-
-<table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup>
- <col class="docinfo-name" /><col class="docinfo-content" />
- </colgroup>
- <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Intel Corporation 2008-2010.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software License,
- Version 1.0. (See accompanying file <tt class="literal">
- <span class="pre">LICENSE_1_0.txt</span></tt> or copy at
- <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
- http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
-</tbody></table>
-
-</td></tr></tbody></table></body></html>
\ No newline at end of file
+Operators are contained in the namespace <font face="Courier New">boost::polygon::operators</font>
+so that they can be used outside the <font face="Courier New">boost::polygon</font>
+namespace without bringing in the entire <font face="Courier New">boost::polygon</font>
+namespace.&nbsp; Following the principle of least astonishment, the
+inferred behavior should generally match the actual behavior.&nbsp;
+Conventions such as argument ordering (output arguments come first) and
+consistently applying the same semantics across different functions
+(accumulate) reduces the learning curve for new users while reducing
+the need to memorize semantics and argument ordering of many different
+functions for advanced users.</p>
+ <p>While the internal library code that implements this API is
+usually complex and cryptic due to heavy use of template
+meta-programming, the application of the library API in user code is
+usually simple and clear because it is free of any extraneous
+syntax.&nbsp; The one exception to this is the mapping of user types to
+library concepts, which necessitates that the user perform some simple
+template programming and understand some of the internals of how the
+library concept type system works.&nbsp; The examples below should aid
+the user in performing these programming tasks.</p>
+ <ul>
+ <li>Example files:
+ <ul>
+ <li>
point_usage.cpp Using
+the library provided point data type and functions</li>
+ <li>custom_point.cpp
+Mapping a user defined point class to the library point_concept</li>
+ <li>polygon_usage.cpp
+Using the library provided polygon data types and functions</li>
+ <li>custom_polygon.cpp
+Mapping a user defined polygon class to the library polygon_concept</li>
+ <li>polygon_set_usage.cpp
+Using the library provided polygon set data types and functions</li>
+ <li>custom_polygon_set.cpp
+Mapping a user defined class to the library polygon_set_concept</li>
+ <li>connectivity_extraction_usage.cpp
+Using the connectivity extraction algorithm to build a connectivity
+graph on polygons</li>
+ <li>property_merge_usage.cpp
+Using the n-layer map-overlay algorithm on polygon data</li>
+ </ul>
+ </li>
+ <li>Tutorials:
+ <ul>
+ <li>Layout Versus Schematic
+Learn how to apply Boost.Polygon capabilities to implement a simplified
+circuit extraction application</li>
+ <li>Minkowski Sum
+Learn how to apply Boost.Polygon capabilities to implement Minkowski
+sum of polygon sets</li>
+ <li><a href="voronoi_basic_tutorial.htm">Voronoi Basic
+Tutorial</a> Learn how to construct, traverse, visualize, associate
+data with Voronoi diagrams without digging into the library details.</li>
+ <li><a href="voronoi_advanced_tutorial.htm">Voronoi
+Advanced Tutorial</a> Learn how to configure the Voronoi builder and
+Voronoi diagram data structure with the user provided coordinate types.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>We would like to thank: Thomas Klimpel, Frank Mori Hess,
+Barend Gehrels, Andreas Fabri, Jeffrey Hellrung, Tim Keitt, Markus
+Werle, Paul A. Bristow, Robert Stewart, Mathias Gaunard, Michael
+Fawcett, Steven Watanabe, Joachim Faulhaber, John Bytheway, Sebastian
+Redl, Mika Heiskanen, John Phillips, Kai Benndorf, Hartmut Kaiser,
+Arash Partow, Maurizio Vitale, Brandon Kohn, David Abrahams, Gordon
+Woodhull, Daniel James, John Maddock, Tom Brinkman, Bo Persson, Mateusz
+Loskot, Christian Henning, Jean-Sebastien Stoezel, for providing
+feedback and or formal review of the library as part of the boost
+submission process and Fernando Cacciola for graciously serving as
+review manager.</p>
+ </td>
+ </tr>
+ <tr>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top"> &nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
+ <table class="docinfo" id="table2" frame="void" rules="none">
+ <colgroup> <col class="docinfo-name" /><col
+ class="docinfo-content" /> </colgroup> <tbody valign="top">
+ <tr>
+ <th class="docinfo-name">Copyright:</th>
+ <td>Copyright © Intel Corporation 2008-2010.</td>
+ </tr>
+ <tr class="field">
+ <th class="docinfo-name">License:</th>
+ <td class="field-body">Distributed under the Boost Software
+License, Version 1.0. (See accompanying file <tt class="literal"> <span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="http://www.boost.org/LICENSE_1_0.txt">
+http://www.boost.org/LICENSE_1_0.txt>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/voronoi_benchmark.htm
==============================================================================
--- branches/release/libs/polygon/doc/voronoi_benchmark.htm (original)
+++ branches/release/libs/polygon/doc/voronoi_benchmark.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,25 +1,22 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
-
-
-
-
-
-
-
-
-
-
+<html>
+<head>
   <meta http-equiv="Content-Language" content="en-us">
-
-
- <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Benchmark</title></head><body>
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
-
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=windows-1252">
+ <title>Voronoi Benchmark</title>
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
   <tbody>
     <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="
http://www.boost.org/"> </a></div>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277"><a
+ title="www.boost.org home page" tabindex="2"
+ style="border: medium none ;" href="http://www.boost.org/"> </a></div>
       <div style="margin: 5px;">
       <h3 class="navbar">Contents</h3>
       <ul>
@@ -30,7 +27,6 @@
         <li>Interval Concept</li>
         <li>Point Concept</li>
         <li>Segment Concept</li>
-
         <li>Rectangle Concept</li>
         <li>Polygon 90 Concept</li>
         <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
@@ -60,12 +56,7 @@
         <li>Voronoi Benchmark<br>
         </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br>
- </a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br>
- </li>
-
+ <li>Voronoi Diagram</li>
       </ul>
       <h3 class="navbar">Other Resources</h3>
       <ul>
@@ -81,46 +72,61 @@
       </ul>
       </div>
       <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127"><a
+ title="www.adobe.com home page" tabindex="2"
+ style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
       </td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
-
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%"><!-- End Header --> <br>
       <h1>Voronoi Benchmark</h1>
-There are not many known Voronoi libraries that are capable to satisfy the
+There are not many known Voronoi libraries that are capable to satisfy
+the
 following set of conditions:<br>
       <ul>
         <li>could handle input data sets of points and segments<br>
-</li>
+ </li>
         <li>give exact warranties about the algorithm robustness and
 output topology<br>
         </li>
- <li>compute coordinates of the output geometries within the fixed relative precision<br>
-</li>
- </ul>Below is the list of libraries included in this benchmark sorted by the number of conditions each of them satisfies:<br>
+ <li>compute coordinates of the output geometries within the
+fixed relative precision<br>
+ </li>
+ </ul>
+Below is the list of libraries included in this benchmark sorted by the
+number of conditions each of them satisfies:<br>
       <ul>
- <li>Boost.Polygon Voronoi - satisfies all the conditions above, implements sweep-line algorithm.<br>
+ <li>Boost.Polygon Voronoi - satisfies all the conditions above,
+implements sweep-line algorithm.<br>
         </li>
- <li>CGAL - satisfies the first two conditions, implements incremental algorithm. CGAL is a well-known
+ <li>CGAL - satisfies the first two conditions, implements
+incremental algorithm. CGAL is a well-known
 library in the computational geometry area, especially for its
 robustness.<br>
-</li>
+ </li>
         <li>S-Hull
 - doesn't satisfy any of the above conditions. S-Hull is a non-robust
 implementation of the sweep-hull algorithm used to construct Delaunay
 triangulation of a set of points.<br>
         </li>
- </ul>At the moment this benchmark includes only two robust implementations:
+ </ul>
+At the moment this benchmark includes only two robust implementations:
 Boost.Polygon Voronoi and CGAL. Thus we are considering comparison of
 those two to be of the most interest. <br>
       <br>
-Other libraries (OpenVoronoi, Triangle) would be added to this benchmark
+Other libraries (OpenVoronoi,
+ Triangle)
+would be added to this benchmark
 incrementally (we are open for suggestions).<br>
       <h2>Important<br>
- </h2>While results of this benchmark show complete dominance of
+ </h2>
+While results of this benchmark show complete dominance of
 the Boost.Polygon Voronoi over the CGAL Delaunay Graph implementation,
 we would like to make it clear
 that both libraries use different approach to construct Voronoi
-diagram. Thus there are problems where the CGAL's incremental approach would
+diagram. Thus there are problems where the CGAL's incremental approach
+would
 be still more vital than the sweep-line algorithm (e.g. input sites are
 inserted as a live stream
 data).<br>
@@ -128,11 +134,15 @@
       </h2>
 The benchmark consists of the two parts:<br>
       <ul>
- <li>The first one constructs the Voronoi diagram of a set of random points (voronoi_benchmark_points.cpp)</li>
- <li>The second one constructs the Voronoi diagram of a set of random
+ <li>The first one constructs the Voronoi diagram of a set of
+random points (<a href="../benchmark/voronoi_benchmark_points.cpp"><span
+ style="text-decoration: underline;">voronoi_benchmark_points.cpp</span></a>)</li>
+ <li>The second one constructs the Voronoi diagram of a set of
+random
 segments (voronoi_benchmark_segments.cpp)</li>
       </ul>
-Below we list important benchmark details that should be considered while reviewing its results:<br>
+Below we list important benchmark details that should be considered
+while reviewing its results:<br>
       <ul>
         <li>We ensure that input data sets are the same for all
 libraries by initializing random generator with the same seed</li>
@@ -142,11 +152,13 @@
 properly, thus those are eliminated before the algorithm execution
 explicitly (Boost.Polygon Voronoi and CGAL do that&nbsp; implicitly) <br>
         </li>
-
- <li>There is no Voronoi diagram data structure in CGAL/S-Hull. That's why we use the segment Delaunay graph which is topologically
+ <li>There is no Voronoi diagram data structure in CGAL/S-Hull.
+That's why we use the segment Delaunay graph which is topologically
 dual to the Voronoi diagram</li>
- <li>CGAL's and S-Hull's output Delaunay triangulation doesn't contain information
-about coordinates of the Voronoi vertices. We didn't include time to compute Voronoi vertices and memory
+ <li>CGAL's and S-Hull's output Delaunay triangulation doesn't
+contain information
+about coordinates of the Voronoi vertices. We didn't include time to
+compute Voronoi vertices and memory
 storage required for those in this benchmark.<br>
         </li>
         <li>Both Boost.Polygon Voronoi and CGAL process each input
@@ -155,10 +167,7 @@
 time and memory usage for Voronoi of segments would be at
 least 3 times
 slower than for Voronoi of points</li>
-
-
       </ul>
-
 The benchmark was executed on the following two system configurations:<br>
       <br>
 Hardware: Intel i5-7600 2.8 GHz, 4GiB RAM.<br>
@@ -171,12 +180,16 @@
 patch.<br>
       <h2>Voronoi Benchmark Results</h2>
       <h3>Random Points Benchmark</h3>
- <table style="text-align: left; width: 100%; margin-left: auto; margin-right: auto;" border="1" cellpadding="2" cellspacing="2">
+ <table
+ style="text-align: left; width: 100%; margin-left: auto; margin-right: auto;"
+ border="1" cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td colspan="2" rowspan="1" style="vertical-align: top; text-align: center;">Test specification<br>
+ <td colspan="2" rowspan="1"
+ style="vertical-align: top; text-align: center;">Test specification<br>
             </td>
- <td colspan="6" rowspan="1" style="vertical-align: top; text-align: center;">Average construction
+ <td colspan="6" rowspan="1"
+ style="vertical-align: top; text-align: center;">Average construction
 time (in secs)<br>
             </td>
           </tr>
@@ -193,16 +206,18 @@
             <td style="vertical-align: top; text-align: center;">CGAL
 Win-32<br>
             </td>
- <td style="vertical-align: top; text-align: center;">S-Hull Win-32<br>
+ <td style="vertical-align: top; text-align: center;">S-Hull
+Win-32<br>
             </td>
-<td style="vertical-align: top; text-align: center;">Boost
+ <td style="vertical-align: top; text-align: center;">Boost
 Linux-64<br>
             </td>
             <td style="vertical-align: top; text-align: center;">CGAL
 Linux-64<br>
- </td><td style="vertical-align: top; text-align: center;">S-Hull Linux-64<br>
             </td>
-
+ <td style="vertical-align: top; text-align: center;">S-Hull
+Linux-64<br>
+ </td>
           </tr>
           <tr>
             <td style="vertical-align: top; text-align: right;">10<br>
@@ -215,12 +230,12 @@
             </td>
             <td style="vertical-align: top; text-align: right;">0.000043<br>
             </td>
-<td style="vertical-align: top; text-align: right;">0.000013<br>
+ <td style="vertical-align: top; text-align: right;">0.000013<br>
             </td>
             <td style="vertical-align: top; text-align: right;">0.000052<br>
- </td><td style="vertical-align: top; text-align: right;">0.000012<br>
             </td>
-
+ <td style="vertical-align: top; text-align: right;">0.000012<br>
+ </td>
           </tr>
           <tr>
             <td style="vertical-align: top; text-align: right;">100<br>
@@ -233,12 +248,12 @@
             </td>
             <td style="vertical-align: top; text-align: right;">0.000521<br>
             </td>
-<td style="vertical-align: top; text-align: right;">0.000192<br>
+ <td style="vertical-align: top; text-align: right;">0.000192<br>
             </td>
             <td style="vertical-align: top; text-align: right;">&nbsp;0.001150<br>
- </td><td style="vertical-align: top; text-align: right;">0.000139<br>
             </td>
-
+ <td style="vertical-align: top; text-align: right;">0.000139<br>
+ </td>
           </tr>
           <tr>
             <td style="vertical-align: top; text-align: right;">1000<br>
@@ -251,12 +266,12 @@
             </td>
             <td style="vertical-align: top; text-align: right;">0.007125<br>
             </td>
-<td style="vertical-align: top; text-align: right;">0.002130<br>
+ <td style="vertical-align: top; text-align: right;">0.002130<br>
             </td>
             <td style="vertical-align: top; text-align: right;">0.016680<br>
- </td><td style="vertical-align: top; text-align: right;">0.002010<br>
             </td>
-
+ <td style="vertical-align: top; text-align: right;">0.002010<br>
+ </td>
           </tr>
           <tr>
             <td style="vertical-align: top; text-align: right;">10000<br>
@@ -269,12 +284,12 @@
             </td>
             <td style="vertical-align: top; text-align: right;">0.091640<br>
             </td>
-<td style="vertical-align: top; text-align: right;">0.022900<br>
+ <td style="vertical-align: top; text-align: right;">0.022900<br>
             </td>
             <td style="vertical-align: top; text-align: right;">0.297900<br>
- </td><td style="vertical-align: top; text-align: right;">0.028300<br>
             </td>
-
+ <td style="vertical-align: top; text-align: right;">0.028300<br>
+ </td>
           </tr>
           <tr>
             <td style="vertical-align: top; text-align: right;">100000<br>
@@ -287,12 +302,12 @@
             </td>
             <td style="vertical-align: top; text-align: right;">1.218000<br>
             </td>
-<td style="vertical-align: top; text-align: right;">0.274000<br>
+ <td style="vertical-align: top; text-align: right;">0.274000<br>
             </td>
             <td style="vertical-align: top; text-align: right;">8.047000<br>
- </td><td style="vertical-align: top; text-align: right;">0.432000<br>
             </td>
-
+ <td style="vertical-align: top; text-align: right;">0.432000<br>
+ </td>
           </tr>
           <tr>
             <td style="vertical-align: top; text-align: right;">1000000<br>
@@ -305,45 +320,65 @@
             </td>
             <td style="vertical-align: top; text-align: right;">15.394000<br>
             </td>
-<td style="vertical-align: top; text-align: right;">3.290000<br>
+ <td style="vertical-align: top; text-align: right;">3.290000<br>
             </td>
             <td style="vertical-align: top; text-align: right;">315.740000<br>
- </td><td style="vertical-align: top; text-align: right;">6.350000<br>
             </td>
-
+ <td style="vertical-align: top; text-align: right;">6.350000<br>
+ </td>
           </tr>
         </tbody>
       </table>
       <br>
- <table style="text-align: left;" border="1" cellpadding="2" cellspacing="2">
+ <table style="text-align: left;" border="1" cellpadding="2"
+ cellspacing="2">
         <tbody>
           <tr>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_points_10.png"></td>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_points_100.png"></td>
- </tr>
- <tr>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_points_1000.png"></td>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_points_10000.png"></td>
- </tr>
- <tr>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_points_100000.png"></td>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_points_1000000.png"></td>
- </tr>
- <tr>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_points_memory.png"><br>
- </td>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_points_all.png"><br>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_points_10.png"></td>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_points_100.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_points_1000.png"></td>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_points_10000.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_points_100000.png"></td>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_points_1000000.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_points_memory.png"><br>
+ </td>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_points_all.png"><br>
             </td>
           </tr>
         </tbody>
       </table>
       <h3>Random Segments Benchmark</h3>
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td colspan="2" rowspan="1" style="vertical-align: top; text-align: center;">Test specification<br>
+ <td colspan="2" rowspan="1"
+ style="vertical-align: top; text-align: center;">Test specification<br>
             </td>
- <td colspan="4" rowspan="1" style="vertical-align: top; text-align: center;">Average construction
+ <td colspan="4" rowspan="1"
+ style="vertical-align: top; text-align: center;">Average construction
 time (in secs)</td>
           </tr>
           <tr>
@@ -453,24 +488,41 @@
         </tbody>
       </table>
       <br>
- <table style="text-align: left;" border="1" cellpadding="2" cellspacing="2">
+ <table style="text-align: left;" border="1" cellpadding="2"
+ cellspacing="2">
         <tbody>
           <tr>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_segments_10.png"></td>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_segments_100.png"></td>
- </tr>
- <tr>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_segments_1000.png"></td>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_segments_10000.png"></td>
- </tr>
- <tr>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_segments_100000.png"></td>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_segments_1000000.png"></td>
- </tr>
- <tr>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_segments_memory.png"><br>
- </td>
- <td style="vertical-align: top;"><img style="width: 500px; height: 300px;" alt="" src="images/benchmark_segments_all.png"><br>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_segments_10.png"></td>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_segments_100.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_segments_1000.png"></td>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_segments_10000.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_segments_100000.png"></td>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_segments_1000000.png"></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_segments_memory.png"><br>
+ </td>
+ <td style="vertical-align: top;"><img
+ style="width: 500px; height: 300px;" alt=""
+ src="images/benchmark_segments_all.png"><br>
             </td>
           </tr>
         </tbody>
@@ -486,8 +538,8 @@
 the Boost.Polygon Voronoi is faster than non-robust of
 S-Hull (except small input sets of around 100 points on Linux-64).<br>
         </li>
-
- <li>Logarithmic execution time shows that Boost.Polygon Voronoi and S-Hull
+ <li>Logarithmic execution time shows that Boost.Polygon Voronoi
+and S-Hull
 have clear N*log(N) complexity, while this doesn't seem to be true for
 CGAL (at least for large input data sets).<br>
         </li>
@@ -509,10 +561,14 @@
       </td>
     </tr>
     <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">&nbsp;</td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">&nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
       <table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
+ <colgroup> <col class="docinfo-name"><col
+ class="docinfo-content"> </colgroup> <tbody valign="top">
           <tr>
             <th class="docinfo-name">Copyright:</th>
             <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
@@ -520,7 +576,10 @@
           <tr class="field">
             <th class="docinfo-name">License:</th>
             <td class="field-body">Distributed under the Boost Software
-License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+License, Version 1.0. (See accompanying file <tt class="literal"><span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="http://www.boost.org/LICENSE_1_0.txt">
 http://www.boost.org/LICENSE_1_0.txt>)</td>
           </tr>
         </tbody>
@@ -529,6 +588,5 @@
     </tr>
   </tbody>
 </table>
-
-
-</body></html>
\ No newline at end of file
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/voronoi_builder.htm
==============================================================================
--- branches/release/libs/polygon/doc/voronoi_builder.htm (original)
+++ branches/release/libs/polygon/doc/voronoi_builder.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,28 +1,22 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
-
-
-
-
-
-
-
-
-
-
-
-
-
+<html>
+<head>
   <meta http-equiv="Content-Language" content="en-us">
-
-
- <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Builder</title></head><body>
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
-
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=windows-1252">
+ <title>Voronoi Builder</title>
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
   <tbody>
     <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="
http://www.boost.org/"> </a></div>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277"><a
+ title="www.boost.org home page" tabindex="2"
+ style="border: medium none ;" href="http://www.boost.org/"> </a></div>
       <div style="margin: 5px;">
       <h3 class="navbar">Contents</h3>
       <ul>
@@ -33,7 +27,6 @@
         <li>Interval Concept</li>
         <li>Point Concept</li>
         <li>Segment Concept</li>
-
         <li>Rectangle Concept</li>
         <li>Polygon 90 Concept</li>
         <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
@@ -58,17 +51,10 @@
         <li>Property Merge 90</li>
         <li>Property Merge 45</li>
         <li>Property Merge</li>
- <li><a href="voronoi_main.htm">Voronoi Main Page<br>
- </a></li>
- <li>Voronoi Benchmark<br>
- </li>
+ <li>Voronoi Main Page </li>
+ <li>Voronoi Benchmark </li>
         <li>Voronoi Builder</li>
- <li><a href="voronoi_diagram.htm">Voronoi Diagram<br>
- </a></li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br>
- </li>
-
+ <li>Voronoi Diagram</li>
       </ul>
       <h3 class="navbar">Other Resources</h3>
       <ul>
@@ -84,152 +70,154 @@
       </ul>
       </div>
       <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127"><a
+ title="www.adobe.com home page" tabindex="2"
+ style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
       </td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
- <h1>Voronoi Builder<br>
- </h1>
-
-Voronoi builder is the event generator structure. It implements the <a href="http://www.ams.org/samplings/feature-column/fcarc-voronoi">sweepline
-algorithm</a>
-that scans a 2D space and generates two types of events:
-site events and circle events (we won't go into details what those are
-exactly). Each event is reported to the output data structure builder.
-The structure shares Voronoi name as the events generated by it
-correspond to the Voronoi diagram edges and vertices, thus giving
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%"><!-- End Header --> <br>
+ <h1>Voronoi Builder </h1>
+The Voronoi builder is the event generator structure, that implements
+the <a href="http://en.wikipedia.org/wiki/Sweep_line_algorithm">sweepline
+algorithm</a>,
+scanning 2D space and spawning the two types of events: <a
+ href="http://www.ams.org/samplings/feature-column/fcarc-voronoi">site
+events and circle events</a>. Each event is reported to the output data
+structure builder.
+The structure shares Voronoi name, as the events generated by it
+provide
 enough information to construct the Voronoi diagram of a set of points
-and linear segments. The requirements for the input/output
-coordinate type of
-the builder geometries are not the same as for the rest of the
-Boost.Polygon library. The main differences are in the following:<br>
+and linear segments. The requirements for the coordinate type of
+the input/output geometries, configured through the coordinate type
+traits template argument, are the following:<br>
       <ul>
- <li>The input coordinate type is not required to be integral (while it
+ <li>The input coordinate type (for input points and enpoints of
+the input segments) is not required to be integral
+(while it
 still should be an integer type)</li>
         <li>The output coordinate type (for
 Voronoi vertices) is required to be IEEE-754 floating point type</li>
       </ul>
       <h2>Important</h2>
-
-
-We encourage users to use default static methods defined in the voronoi.hpp
-header to construct Voronoi diagram, however it's always possible to
+The users are encouraged to use the default static methods defined in
+the voronoi.hpp
+header for the Voronoi diagram construction. However it's also possible
+to
 use Voronoi builder explicitly, especially if the user wants to drop
-the external dependencies such as MPL (metaprogramming library). So the
-following include set woudn't depend on any heavy external headers (except STL and boost/cstdint.hpp), even
-Boost.Polygon itself:<br>
-
+the external dependencies such as MPL (metaprogramming library). The
+following include set doesn't depend on any external headers
+(except STL and boost/cstdint.hpp), even
+the Boost.Polygon library:<br>
       <br>
-
- <span style="font-family: Courier New,Courier,monospace;">#include &lt;voronoi_builder.hpp&gt;</span><br style="font-family: Courier New,Courier,monospace;">
-
- <span style="font-family: Courier New,Courier,monospace;">#include &lt;voronoi_diagram.hpp&gt;</span><span style="font-family: Courier New,Courier,monospace;"><br>
+ <span style="font-family: Courier New,Courier,monospace;">#include
+&lt;voronoi_builder.hpp&gt;</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">#include
+&lt;voronoi_diagram.hpp&gt;</span><br>
+ <h2>Declaration</h2>
+Header: boost/polygon/voronoi_builder.hpp<br>
       <br>
- </span>This
-also gives a way to build Voronoi construction API on top of the
-Voronoi builder data structure for the other Boost libraries.<br>
- <h2>Declaration<br>
- </h2>
-
-
-
-
- <font face="Courier New"> <span style="font-family: 'Courier New',Courier,monospace;">template
-&lt;typename T,</span><br style="font-family: 'Courier New',Courier,monospace;">
+ <font face="Courier New"> <span
+ style="font-family: 'Courier New',Courier,monospace;">template
+&lt;typename T,</span><br
+ style="font-family: 'Courier New',Courier,monospace;">
       <span style="font-family: 'Courier New',Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-typename CTT = detail::voronoi_ctype_traits&lt;T&gt;,</span><br style="font-family: 'Courier New',Courier,monospace;">
+typename CTT = detail::voronoi_ctype_traits&lt;T&gt;,</span><br
+ style="font-family: 'Courier New',Courier,monospace;">
       <span style="font-family: 'Courier New',Courier,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-typename VP = detail::voronoi_predicates&lt;CTT&gt; &gt;</span><br style="font-family: 'Courier New',Courier,monospace;">
+typename VP = detail::voronoi_predicates&lt;CTT&gt; &gt;</span><br
+ style="font-family: 'Courier New',Courier,monospace;">
       <span style="font-family: 'Courier New',Courier,monospace;">class
 voronoi_builder;</span><br>
       <br>
       <span style="font-family: 'Courier New',Courier,monospace;">T</span></font>
 - specifies the coordinate type of the input geometries (points and
 segments).<br>
-
- <font face="Courier New"> <span style="font-family: 'Courier New',Courier,monospace;">CTT</span></font>
-- defines input/output coordinate type traits used by Voronoi predicates (VP).<br>
-
- <font face="Courier New"> <span style="font-family: 'Courier New',Courier,monospace;">VP</span></font>
-- predicate kernel, that provides builder with robust and
+ <font face="Courier New"> <span
+ style="font-family: 'Courier New',Courier,monospace;">CTT</span></font>
+- defines the input/output coordinate type traits used by the Voronoi
+predicates (VP).<br>
+ <font face="Courier New"> <span
+ style="font-family: 'Courier New',Courier,monospace;">VP</span></font>
+- the predicate kernel, that contains robust and
 efficient predicates and functors.<br>
-
 The Voronoi builder data structure is ready to use from the box with
 32-bit signed integer input coordinate type. The user may extend the
 input coordinate range to the other integer types (e.g. 64-bit
-integer), however this will also require manual set up of the
-coordinate type traits. Default voronoi_predicates&lt;<font face="Courier New"><span style="font-family: 'Courier New',Courier,monospace;">CTT</span></font>&gt;
-structure provides correct and efficient predicates as soon as types defined by <font face="Courier New"> <span style="font-family: 'Courier New',Courier,monospace;">CTT</span></font>
-satisfy the requirements explained at the end of this page. In case those
-requirements are not satisfied for the user provided coordinate type traits,<font face="Courier New"><span style="font-family: 'Courier New',Courier,monospace;"></span></font>
-the proper predicates kernel
-implementation is required.<span style="font-family: Courier New,Courier,monospace;"></span><br>
-<h2>Member Functions</h2>
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+integer), however this will also require manual setup of the
+coordinate type traits. Default predicate kernel provides correct and
+efficient predicates as long as types
+defined by the coordinate type traits satisfy the requirements
+explained at the end of this page. In case
+those
+requirements are not satisfied,<font face="Courier New"><span
+ style="font-family: 'Courier New',Courier,monospace;"></span></font>
+the proper predicate kernel
+implementation is required.<span
+ style="font-family: Courier New,Courier,monospace;"></span><br>
+ <h2>Member Functions</h2>
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td style="font-family: 'Courier New',Courier,monospace;"><span style="font-weight: bold;">
-voronoi_builder</span>()</td>
+ <td style="font-family: 'Courier New',Courier,monospace;"><span
+ style="font-weight: bold;">voronoi_builder</span>()</td>
             <td width="693">Default
 constructor.</td>
           </tr>
           <tr>
- <td><span style="font-family: Courier New,Courier,monospace;">size_t <span style="font-weight: bold;">insert_point</span>(const int_type&amp; x,<br>
+ <td><span
+ style="font-family: Courier New,Courier,monospace;">size_t <span
+ style="font-weight: bold;">insert_point</span>(const int_type&amp; x,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-const int_type&amp; y)</span><br>
- </td>
+const int_type&amp; y)</span> </td>
             <td>Inserts a point object with
 the specified coordinates into the Voronoi builder.<br>
-Returns index number of the inserted site.<br>
-
- </td>
+Returns index of the inserted point. </td>
           </tr>
-
-
           <tr>
- <td><span style="font-family: Courier New,Courier,monospace;">size_t <span style="font-weight: bold;">insert_segment</span>(const int_type&amp; x1,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-const int_type&amp; y1,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <td><span
+ style="font-family: Courier New,Courier,monospace;">size_t <span
+ style="font-weight: bold;">insert_segment</span>(const int_type&amp;
+x1,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const int_type&amp; y1,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 const int_type&amp; x2,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-const int_type&amp; y2)</span><br>
- </td>
+const int_type&amp; y2)</span> </td>
             <td>Inserts a segment object
 with the specified coordinates into the Voronoi builder.<br>
-Returns index number of the inserted site.<br>
-
- </td>
+Returns index of the inserted segment. </td>
           </tr>
-
-
-
-
- <tr>
- <td style="font-family: 'Courier New',Courier,monospace;">
-template &lt;typename OUTPUT&gt;<br>
-void <span style="font-weight: bold;">construct</span>(OUTPUT* output)<br>
- </td>
- <td width="693">Runs sweepline
-algorithm over the set of the inserted geometries, outputs site and
-circle events to the OUTPUT data structure. It's responsibility of the
-output data structure to process them.<br>
+ <tr>
+ <td style="font-family: 'Courier New',Courier,monospace;">template
+&lt;typename OUTPUT&gt;<br>
+void <span style="font-weight: bold;">construct</span>(OUTPUT* output)
             </td>
+ <td width="693">Runs the sweepline
+algorithm over the set of inserted geometries and generates site and
+circle events to the OUTPUT data structure. It's the responsibility of
+the
+output data structure to process them. </td>
           </tr>
           <tr>
- <td style="font-family: 'Courier New',Courier,monospace;">
-void <span style="font-weight: bold;">clear</span>()<br>
- </td>
+ <td style="font-family: 'Courier New',Courier,monospace;">void
+ <span style="font-weight: bold;">clear</span>() </td>
             <td width="693">Clears the
-list of the inserted geometries. Sets index counter to zero.<br>
- </td>
+list of the inserted geometries. Sets the input geometry index to
+zero. </td>
           </tr>
         </tbody>
       </table>
       <h1>Voronoi Coordinate Type Traits</h1>
-
-
- <p>The library provides the default coordinate type traits specialization for the
+ <p>The library provides the default coordinate type traits
+specialization for the
 32-bit signed integer type:</p>
-
- <font style="font-family: 'Courier New',Courier,monospace;" face="Courier New">
+ <font style="font-family: 'Courier New',Courier,monospace;"
+ face="Courier New">
       <p>template &lt;typename T&gt;<br>
 struct voronoi_ctype_traits;<br>
       <br>
@@ -246,136 +234,135 @@
 &nbsp;&nbsp;&nbsp; typedef type_converter_fpt to_fpt_converter_type;<br>
 &nbsp;&nbsp;&nbsp; typedef type_converter_efpt to_efpt_converter_type;<br>
 };</p>
- </font>
- One
+ </font> One
 of the most important features of the library is that Voronoi builder
 output geometries are constructed within defined relative error (64
-machine epsilons). That means the more mantissa bits the user provided
-fpt_type has the better precision of the output geometries will be. In
+machine epsilons). That means, the more mantissa bits the user provided
+fpt_type has, the better precision of the output geometries will be. In
 order for the user defined traits to be consistent with the default
-Voronoi builder predicates user should define following set of
-coordinate types (the assumption is made that input geometries have
+Voronoi builder predicate kernel user should define the following set
+of traits (the assumption is made that input geometries have
 X-bit signed integer coordinate type):<br>
       <br>
-<table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td style="font-family: 'Courier New',Courier,monospace; font-weight: bold;">int_type<br>
+ <td
+ style="font-family: 'Courier New',Courier,monospace; font-weight: bold;">int_type
             </td>
             <td style="vertical-align: top;">At least X-bit signed
-integer type. <br>
- </td>
+integer type. </td>
           </tr>
           <tr>
- <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">
-int_x2_type<br>
+ <td
+ style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">int_x2_type
             </td>
             <td style="vertical-align: top;">At least 2X-bit signed
-integer type.<br>
- </td>
+integer type. </td>
           </tr>
           <tr>
- <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">
-uint_x2_type<br>
+ <td
+ style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">uint_x2_type
             </td>
             <td style="vertical-align: top;">At least 2X-bit unsigned
-integer type.<br>
- </td>
+integer type. </td>
           </tr>
           <tr>
- <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">
-big_int_type<br>
+ <td
+ style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">big_int_type
             </td>
             <td style="vertical-align: top;">At least 8X-bit signed
-integer type for voronoi of points.<br>
-At least 64X-bit signed integer type for voronoi of segments.<br>
- </td>
+integer type if input dataset contains only points.<br>
+At least 64X-bit signed integer type if input dataset contains
+segments. </td>
           </tr>
           <tr>
- <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">
-fpt_type<br>
+ <td
+ style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">fpt_type
             </td>
             <td style="vertical-align: top;">IEEE-754 floating point
 type, with mantissa at least (X+16) bits and exponent able to handle
-32X-bit unsigned integer type.<br>
- </td>
+32X-bit unsigned integer type. </td>
           </tr>
           <tr>
- <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">
-efpt_type<br>
+ <td
+ style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">efpt_type
             </td>
             <td style="vertical-align: top;">IEEE-754 floating point
 type, with mantissa at least (X+16) bits and exponent able to handle
-64X-bit unsigned integer type.<br>
- </td>
+64X-bit unsigned integer type. </td>
           </tr>
           <tr>
- <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">
-ulp_cmp_type<br>
+ <td
+ style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">ulp_cmp_type
             </td>
- <td style="vertical-align: top;">Ulp comparison structure
+ <td style="vertical-align: top;">Ulp comparison structure,
 that checks if two fpt_type values are within the given ulp range
-(relative error range).<br>
- </td>
+(relative error range). </td>
           </tr>
           <tr>
- <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">
-to_fpt_converter_type<br>
+ <td
+ style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">to_fpt_converter_type
             </td>
- <td style="vertical-align: top;">Type converter structure
+ <td style="vertical-align: top;">Type converter structure,
 that converts any of the integer types above plus efpt_type to the
-fpt_type using operator().<br>
- </td>
+fpt_type using operator(). </td>
           </tr>
           <tr>
- <td style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">
-to_efpt_converter_type<br>
+ <td
+ style="vertical-align: top; font-family: 'Courier New',Courier,monospace; font-weight: bold;">to_efpt_converter_type
             </td>
- <td style="vertical-align: top;">Type converter structure
+ <td style="vertical-align: top;">Type converter structure,
 that converts any of the integer types above to the efpt_type using
-operator().<br>
- </td>
+operator(). </td>
           </tr>
         </tbody>
       </table>
- <p>Notes:<br></p>
+ <p>Notes:</p>
       <ul>
- <li>
-Four different integer types are used (instead of a single
+ <li>Four different integer types are used (instead of a single
 big_int_type) to slightly improve algorithm performance and memory
 usage.</li>
- <li>As the maximum required size of the big_int_type is known in advance
-(based on the size of the integer type), library provided
-implementation of a fixed integer could be used (it is much faster than
-heap-allocated big integers).</li>
- <li>
-Two separate floating-point types are defined because for the input
+ <li>As the maximum required size of the big_int_type is known
+in advance, it's possible to use fixed, stack allocated, multiprecision
+integer type.</li>
+ <li>Two separate floating-point types are defined, because for
+the input geometries
 with
-32-bit signed integer coordinates double won't be able to handle
-2048-bit (64 * 32) integers as they will overflow its exponent. On the
+32-bit signed integer coordinates, double type won't be able to handle
+2048-bit (64 chunks of 32 bits each) integers, as they will
+overflow its exponent. On the
 gcc compiler it's possible to use 80-bit long doubles for both fpt
-types, however this is not supported by MSVC compiler.</li>
- <li>efpt_type and to_efpt_converter_type are not used to construct Voronoi diagram of points (mocks will work fine).</li>
- <li>
-For an example of the user defined coordinate type traits
-see advanced Voronoi tutorial.</li>
+types, however this is not supported by the MSVC compiler.</li>
+ <li>efpt_type and to_efpt_converter_type are not used to
+construct the Voronoi diagram of a set of points (mock implementation
+will work).</li>
+ <li>For an example of the user defined coordinate type traits
+check the <a href="voronoi_advanced_tutorial.htm">advanced Voronoi
+tutorial</a>.</li>
       </ul>
-
       </td>
     </tr>
     <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">&nbsp;</td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1">&nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
       <table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
+ <colgroup> <col class="docinfo-name"><col
+ class="docinfo-content"> </colgroup> <tbody valign="top">
           <tr>
             <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
+ <td>Copyright © Andrii Sydorchuk 2010-2013.</td>
           </tr>
           <tr class="field">
             <th class="docinfo-name">License:</th>
             <td class="field-body">Distributed under the Boost Software
-License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+License, Version 1.0. (See accompanying file <tt class="literal"><span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="http://www.boost.org/LICENSE_1_0.txt">
 http://www.boost.org/LICENSE_1_0.txt>)</td>
           </tr>
         </tbody>
@@ -384,6 +371,5 @@
     </tr>
   </tbody>
 </table>
-
-
-</body></html>
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/voronoi_diagram.htm
==============================================================================
--- branches/release/libs/polygon/doc/voronoi_diagram.htm (original)
+++ branches/release/libs/polygon/doc/voronoi_diagram.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,36 +1,24 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
-
-
-
-
-
-
-
-
-
-
-
-
-
+<html>
+<head>
   <meta http-equiv="Content-Language" content="en-us">
-
-
- <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Diagram</title>
-
-
-
-
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=windows-1252">
+ <title>Voronoi Diagram</title>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
-
-
- <meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
-
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
   <tbody>
     <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="
http://www.boost.org/"> </a></div>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277"><a
+ title="www.boost.org home page" tabindex="2"
+ style="border: medium none ;" href="http://www.boost.org/"> </a></div>
       <div style="margin: 5px;">
       <h3 class="navbar">Contents</h3>
       <ul>
@@ -41,7 +29,6 @@
         <li>Interval Concept</li>
         <li>Point Concept</li>
         <li>Segment Concept</li>
-
         <li>Rectangle Concept</li>
         <li>Polygon 90 Concept</li>
         <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
@@ -66,16 +53,10 @@
         <li>Property Merge 90</li>
         <li>Property Merge 45</li>
         <li>Property Merge</li>
- <li><a href="voronoi_main.htm">Voronoi Main Page<br>
- </a></li>
+ <li>Voronoi Main Page </li>
         <li>Voronoi Benchmark</li>
- <li>Voronoi Builder<br>
- </li>
+ <li>Voronoi Builder </li>
         <li>Voronoi Diagram</li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br>
- </li>
-
       </ul>
       <h3 class="navbar">Other Resources</h3>
       <ul>
@@ -91,468 +72,488 @@
       </ul>
       </div>
       <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127"><a
+ title="www.adobe.com home page" tabindex="2"
+ style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
       </td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
-
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%"><!-- End Header --> <br>
       <h1>Voronoi Diagram</h1>
-Voronoi
+A Voronoi
 diagram is the computational geometry concept that represents partition
-of the given space onto regions, with bounds determined by distances to a
-specified family of objects. The application area of this concept vary <a href="http://www.ics.uci.edu/%7Eeppstein/gina/scot.drysdale.html">from
-Archaeology to Zoology</a>. The Boost.Polygon library provides implementation of
-the Voronoi diagram data structure in 2D space. The internal representation
+of the given space onto regions, with bounds determined by distances to
+a
+specified family of objects. The application area of this concept
+varies <a
+ href="http://www.ics.uci.edu/%7Eeppstein/gina/scot.drysdale.html">from
+Archaeology to Zoology</a>. The Boost.Polygon Voronoi extension
+provides
+implementation of
+the Voronoi diagram data structure in the 2D space. The internal
+representation
 consists of the three arrays, that respectively contain: Voronoi cells
-(represent the area around the input sites bounded by the Voronoi edges), Voronoi vertices
+(represent the area around the input sites bounded by the Voronoi
+edges), Voronoi vertices
 (points where three or more Voronoi edges intersect), Voronoi edges
-(the one dimensional curves containing points equidistant from the two
+(one dimensional curves containing points equidistant from the two
 closest input sites). Each of the primitives (cell, vertex, edge)
 contains pointers to the other linked primitives, so that it's always
-possible to efficiently traverse Voronoi graph. The picture below shows
+possible to efficiently traverse the Voronoi graph. The picture below
+shows
 the Voronoi vertices in red, Voronoi edges in black, input sites that
-correspond to the Voronoi cells in blue. It is considered that each
+correspond to the Voronoi cells in blue. It is considered, that each
 input segment consists of the three sites: segment itself and its
-endpoints. As the result two additional
-Voronoi edges are constructed per each input segment. This is made to
-simplify the representation of the Voronoi diagram.<br>
- <br>
-
-
- <img style="border: 1px solid ; width: 300px; height: 300px;" alt="" src="images/voronoi2.png"><br>
- <h2>Important</h2>All
+endpoints. As the result, two additional Voronoi edges are constructed
+per each input segment. This is made to
+simplify the representation of the Voronoi diagram and Voronoi edges in
+particular.<br>
+ <br>
+ <img src="images/voronoi2.png" alt=""
+ style="width: 600px; height: 600px;"><br>
+ <h2>Important</h2>
+All
 the Voronoi primitive data structures (edge, vertex, cell) contain
 mutable color member. Color type is equivalent to the std::size_t type,
 except that the upper five bits are reserved for the internal usage.
-That would mean that the maximum supported value by color member is 32
+That means, that the maximum supported value by the color member is 32
 times less than the one supported by std::size_t.<br>
- <h2>Declaration<br>
- </h2>
-
-
-
-
-
+ <h2>Declaration</h2>
+Header: boost/polygon/voronoi_diagram.hpp<br>
+ <br>
       <span style="font-family: Courier New,Courier,monospace;">template
-&lt;typename T, typename TRAITS = voronoi_diagram_traits&lt;T&gt; &gt;</span><br style="font-family: Courier New,Courier,monospace;">
+&lt;typename T, typename TRAITS = voronoi_diagram_traits&lt;T&gt; &gt;</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">class
 voronoi_diagram;<br>
- <br>
-</span><font face="Courier New"><span style="font-family: 'Courier New',Courier,monospace;">T</span></font>
-- specifies the coordinate type of the Voronoi vertices.<br>
- <span style="font-family: Courier New,Courier,monospace;">TRAITS</span><font face="Courier New"><span style="font-family: 'Courier New',Courier,monospace;"></span></font>
-- Voronoi diagram traits (explained in the end of this chapter).<br>
+ </span><font face="Courier New"><span
+ style="font-family: 'Courier New',Courier,monospace;"><br>
+T</span></font>
+- the coordinate type of the Voronoi vertices.<br>
+ <span style="font-family: Courier New,Courier,monospace;">TRAITS</span><font
+ face="Courier New"><span
+ style="font-family: 'Courier New',Courier,monospace;"></span></font>
+- the Voronoi diagram traits.<br>
       <h2>Member Functions</h2>
-
- <span style="font-family: Courier New,Courier,monospace;">
-
- </span>
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <span style="font-family: Courier New,Courier,monospace;"> </span>
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;"><span style="font-weight: bold;">voronoi_diagram</span>()<br>
- </td>
- <td>Default constructor.<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;"><span
+ style="font-weight: bold;">voronoi_diagram</span>() </td>
+ <td>Default constructor. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">void
- <span style="font-weight: bold;">clear</span>()<br>
- </td>
- <td>Clears diagram.<br>
- </td>
+ <span style="font-weight: bold;">clear</span>() </td>
+ <td>Removes all primitives from the Voronoi diagram. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-cell_container_type&amp; <span style="font-weight: bold;">cells</span>() const<br>
- </td>
+cell_container_type&amp; <span style="font-weight: bold;">cells</span>()
+const </td>
             <td>Returns the const
-reference to the cell container.<br>
- </td>
+reference to the cell container. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-vertex_container_type&amp; <span style="font-weight: bold;">vertices</span>() const<br>
- </td>
+vertex_container_type&amp; <span style="font-weight: bold;">vertices</span>()
+const </td>
             <td>Returns the const
-reference to the vertex container.<br>
- </td>
+reference to the vertex container. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-edge_container_type&amp; <span style="font-weight: bold;">edges</span>() const<br>
- </td>
+edge_container_type&amp; <span style="font-weight: bold;">edges</span>()
+const </td>
             <td>Returns the const
-reference to the edge container.<br>
- </td>
+reference to the edge container. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">size_t <span style="font-weight: bold;">num_cells</span>() const<br>
- </td>
- <td>Returns the number of the
-cells in the Voronoi diagram.<br>
-This value should be the same as the size of the cell container.<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">size_t
+ <span style="font-weight: bold;">num_cells</span>() const </td>
+ <td>Returns the number of the Voronoi
+cells in the Voronoi diagram. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">size_t <span style="font-weight: bold;">num_edges</span>() const<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">size_t
+ <span style="font-weight: bold;">num_edges</span>() const </td>
             <td>Returns the number of the
-edges (half-edges) in the Voronoi diagram.<br>This value should be the same as the size of the edge container.<br>
- </td>
+Voronoi edges (half-edges) in the Voronoi diagram. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">size_t <span style="font-weight: bold;">num_vertices</span>() const<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">size_t
+ <span style="font-weight: bold;">num_vertices</span>()
+const </td>
             <td>Returns the number of the
-vertices in the Voronoi diagram.<br>
-This value should be the same as the size of the vertex container.<br>
- </td>
+Voronoi vertices in the Voronoi diagram. </td>
           </tr>
         </tbody>
       </table>
-
       <h2>Member Types</h2>
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td style="font-weight: bold;">coordinate_type<br>
- </td>
- <td>Coordinate type.<br>
- </td>
+ <td style="font-weight: bold;">coordinate_type </td>
+ <td>Coordinate type. </td>
           </tr>
-
           <tr>
- <td style="font-weight: bold;">cell_type<br>
- </td>
- <td>Voronoi cell.<br>
- </td>
+ <td style="font-weight: bold;">cell_type </td>
+ <td>Voronoi cell. </td>
           </tr>
           <tr>
- <td style="font-weight: bold;">vertex_type<br>
- </td>
- <td>Voronoi vertex.<br>
- </td>
+ <td style="font-weight: bold;">vertex_type </td>
+ <td>Voronoi vertex. </td>
           </tr>
           <tr>
- <td style="font-weight: bold;">edge_type<br>
- </td>
- <td>Voronoi edge.<br>
- </td>
+ <td style="font-weight: bold;">edge_type </td>
+ <td>Voronoi edge. </td>
           </tr>
           <tr>
- <td style="font-weight: bold;">cell_container_type<br>
- </td>
- <td>Container of Voronoi cells.<br>
- </td>
+ <td style="font-weight: bold;">cell_container_type </td>
+ <td>Container of the Voronoi cells. </td>
           </tr>
-
           <tr>
- <td style="font-weight: bold;">const_cell_iterator<br>
- </td>
- <td>Const cell container iterator.<br>
- </td>
+ <td style="font-weight: bold;">const_cell_iterator </td>
+ <td>Const cell container iterator. </td>
           </tr>
           <tr>
- <td style="font-weight: bold;">vertex_container_type<br>
- </td>
- <td>Container of Voronoi vertices.<br>
- </td>
+ <td style="font-weight: bold;">vertex_container_type </td>
+ <td>Container of the Voronoi vertices. </td>
           </tr>
-
           <tr>
- <td style="font-weight: bold;">const_vertex_iterator<br>
- </td>
- <td>Const vertex container iterator.<br>
- </td>
+ <td style="font-weight: bold;">const_vertex_iterator </td>
+ <td>Const vertex container iterator. </td>
           </tr>
           <tr>
- <td style="font-weight: bold;">edge_container_type<br>
- </td>
- <td>Container of Voronoi edges.<br>
- </td>
+ <td style="font-weight: bold;">edge_container_type </td>
+ <td>Container of the Voronoi edges. </td>
           </tr>
-
           <tr>
- <td style="font-weight: bold;">const_edge_iterator<br>
- </td>
- <td>Const edge container iterator.<br>
- </td>
+ <td style="font-weight: bold;">const_edge_iterator </td>
+ <td>Const edge container iterator. </td>
           </tr>
         </tbody>
       </table>
-
-
-
- <h1>Voronoi Geometry Type<br>
- </h1>
- <h2>GeometryCategory<br>
- </h2>
-Defines geometry type of the input objects.<br>
- <br>
- <span style="font-family: Courier New,Courier,monospace;">enum GeometryCategory {</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; GEOMETRY_CATEGORY_POINT = 0x0,</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; GEOMETRY_CATEGORY_SEGMENT = 0x1</span><br style="font-family: Courier New,Courier,monospace;">
+ <h1>Voronoi Geometry Type</h1>
+The Voronoi
+diagram data structure doesn't embed coordinates of the input
+geometries.
+Instead it links with those via source index and source category
+methods
+of the Voronoi cell primitive. Source index is incrementally given
+(starting from zero) to each input site inserted into the <a
+ href="voronoi_builder.htm">Voronoi
+builder</a>.
+Considering the fact, that each input segment is splitted onto three
+separate sites with the same index, we distinguish between those using
+source category. For more examples check the <a
+ href="voronoi_basic_tutorial.htm">Voronoi basic tutorial</a>.<br>
+ <h2>GeometryCategory </h2>
+Defines geometric category of the input object.<br>
+Header: boost/polygon/<a
+ href="../../../boost/polygon/voronoi_geometry_type.hpp">voronoi_geometry_type.hpp</a><br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">enum
+GeometryCategory {</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+GEOMETRY_CATEGORY_POINT = 0x0,</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+GEOMETRY_CATEGORY_SEGMENT = 0x1</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">};</span><br>
       <h2>SourceCategory</h2>
-
-Defines category of the input site that forms Voronoi cell.<br>
- <br>
- <span style="font-family: Courier New,Courier,monospace;">enum SourceCategory {</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; // Point subtypes.</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; SOURCE_CATEGORY_SINGLE_POINT = 0x0,</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; SOURCE_CATEGORY_SEGMENT_START_POINT = 0x1,</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; SOURCE_CATEGORY_SEGMENT_END_POINT = 0x2,</span><br style="font-family: Courier New,Courier,monospace;">
+Defines semantic category of the input site.<br>
+Header: boost/polygon/<a
+ href="../../../boost/polygon/voronoi_geometry_type.hpp">voronoi_geometry_type.hpp</a><br>
+ <br>
+ <span style="font-family: Courier New,Courier,monospace;">enum
+SourceCategory {</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+// Point subtypes.</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+SOURCE_CATEGORY_SINGLE_POINT = 0x0,</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+SOURCE_CATEGORY_SEGMENT_START_POINT = 0x1,</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+SOURCE_CATEGORY_SEGMENT_END_POINT = 0x2,</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; // Segment subtypes.</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; SOURCE_CATEGORY_INITIAL_SEGMENT = 0x8,</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; SOURCE_CATEGORY_REVERSE_SEGMENT = 0x9,</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+// Segment subtypes.</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+SOURCE_CATEGORY_INITIAL_SEGMENT = 0x8,</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+SOURCE_CATEGORY_REVERSE_SEGMENT = 0x9,</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; SOURCE_CATEGORY_GEOMETRY_SHIFT = 0x3,</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; SOURCE_CATEGORY_BITMASK = 0x1F</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+SOURCE_CATEGORY_GEOMETRY_SHIFT = 0x3,</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+SOURCE_CATEGORY_BITMASK = 0x1F</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">};</span><br>
- <br>
-Voronoi
-diagram data structure doesn't store coordinates of the input
-geometries.
-Instead it links with those via source index and source category method
-of the Voronoi cell primitive. Source index is incrementally given
-(starting from zero) to each input site inserted into Voronoi builder.
-Considering the fact that each input segment is splitted onto three
-separate sites with the same index, we distinguish between them using
-SourceCategory. For the example see Voronoi basic tutorial.<br>
       <h2>Member Functions</h2>
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td style="vertical-align: top;"><span style="font-family: Courier New,Courier,monospace;">bool <span style="font-weight: bold;">belongs</span>(</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp; &nbsp; SourceCategory source_category,</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp; GeometryCategory geometry_category)</span><br>
- </td>
- <td style="vertical-align: middle;">Returns true if source category belongs to the given geometry category.<br>
-Returns false else.<br>
- </td>
+ <td style="vertical-align: top;"><span
+ style="font-family: Courier New,Courier,monospace;">bool <span
+ style="font-weight: bold;">belongs</span>(</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;
+&nbsp; SourceCategory source_category,</span><br
+ style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">&nbsp;&nbsp;&nbsp;
+GeometryCategory geometry_category)</span> </td>
+ <td style="vertical-align: middle;">Returns true if the
+given source
+category belongs to the given geometry category.<br>
+Returns false otherwise. </td>
           </tr>
         </tbody>
       </table>
       <h1>Voronoi Edge</h1>
-
-
-Voronoi edge is represented as enhanced classical half-edge
-data structure.<br>
+A Voronoi edge is a one-dimenstion curve, that contains points
+equidistant from the two closest input geometries. The Voronoi edge
+data structure is implemented as the enhanced classical <a
+ href="http://www.flipcode.com/archives/The_Half-Edge_Data_Structure.shtml">half-edge</a>
+data structure. On the image below, the Voronoi edges are drawn as
+directed linear (e.g. AE) or curved (e.g. DE) dashed lines of either
+green (e.g. AE) or black (e.g DE) color. The green edges are considered
+to be secondary, as they are generated by an input segment and its
+endpoint (e.g. edge EA, made by segment MN and its endpoint M). All the
+other edges are considered to be primary (e.g. curved edge CD, made by
+segment KL and point N). Apart from that, each edge can be finite (e.g.
+ED) or infinite (e.g. edge starting at point B and going in the east
+direction).<br>
+ <img src="images/voronoi1.png" alt=""
+ style="width: 600px; height: 600px;"><br>
+Each Voronoi edge (consider directed edge BA) provides efficient access
+to the following primitives:<br>
+ <ul>
+ <li>Cell the edge belongs to (Voronoi cell P, with source
+segment MN)</li>
+ <li>Start point of the edge (Voronoi vertex B, that is
+equidistant from the following input sites: O, L, MN)</li>
+ <li>End point of the edge (Voronoi vertex A, that is
+equidistant from the following input sites: O, M, MN)</li>
+ <li>Twin edge (Voronoi edge AB)</li>
+ <li>CCW next edge inside the Voronoi cell, that the edge
+belongs to (green Voronoi edge AE)</li>
+ <li>CCW previous edge inside the Voronoi cell, that the edge
+belongs to (Voronoi edge CB)</li>
+ <li>CCW rotated next edge around the start point of the edge
+(Voronoi edge BC)</li>
+ <li>CCW rotated previous edge around the start point of the
+edge (infinite Voronoi edge starting at the Voronoi vertex B and going
+in the east direction) </li>
+ </ul>
       <h2>Declaration</h2>
-
-
-
+Header: boost/polygon/voronoi_diagram.hpp<br>
+ <br>
       <span style="font-family: Courier New,Courier,monospace;">template
-&lt;typename T&gt;</span><br style="font-family: Courier New,Courier,monospace;">
+&lt;typename T&gt;</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">class
 voronoi_edge;<br>
       <br>
 T</span> - coordinate type.<br>
       <h2>Member Functions</h2>
-
- <span style="font-family: Courier New,Courier,monospace;">
-
- </span>
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <span style="font-family: Courier New,Courier,monospace;"> </span>
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
-
           <tr>
- <td><span style="font-family: Courier New,Courier,monospace;"><span style="font-weight: bold;">voronoi_edge</span>(bool is_linear, bool is_primary)</span><br>
- </td>
- <td>Voronoi edge constructor.<br>
- </td>
+ <td><span
+ style="font-family: Courier New,Courier,monospace;"><span
+ style="font-weight: bold;">voronoi_edge</span>(bool is_linear, bool
+is_primary)</span> </td>
+ <td>Voronoi edge constructor. </td>
           </tr>
-<tr>
- <td style="font-family: Courier New,Courier,monospace;">voronoi_cell_type* <span style="font-weight: bold;">cell</span>()<br>
- </td>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_cell_type*
+ <span style="font-weight: bold;">cell</span>() </td>
             <td>Returns the pointer to the
 Voronoi <span style="font-family: Courier New,Courier,monospace;"></span>cell
-that edge belongs to.<br>
- </td>
+that the edge belongs to. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-voronoi_cell_type* <span style="font-weight: bold;">cell</span>() const<br>
- </td>
+voronoi_cell_type* <span style="font-weight: bold;">cell</span>()
+const </td>
             <td>Returns the const pointer
-to the Voronoi cell that edge belongs to.<br>
- </td>
+to the Voronoi cell that the edge belongs to. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">void
- <span style="font-weight: bold;">cell</span>(voronoi_cell_type* c)<br>
- </td>
+ <span style="font-weight: bold;">cell</span>(voronoi_cell_type*
+c) </td>
             <td>Sets the Voronoi cell
-pointer for the cell current edge belongs to.<br>
- </td>
+pointer to the cell the current edge belongs to. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">voronoi_vertex_type* <span style="font-weight: bold;">vertex0</span>()<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_vertex_type*
+ <span style="font-weight: bold;">vertex0</span>() </td>
             <td>Returns the pointer to the
 start point of the edge.<br>
-If the edge is infinite in that direction returns NULL.<br>
- </td>
+If the edge is infinite in that direction returns NULL. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-voronoi_vertex_type* <span style="font-weight: bold;">vertex0</span>() const<br>
- </td>
+voronoi_vertex_type* <span style="font-weight: bold;">vertex0</span>()
+const </td>
             <td>Returns the const pointer
-to the point vertex of the edge.<br>
-If the edge is infinite in that direction returns NULL.<br>
- </td>
+to the start point vertex of the edge.<br>
+If the edge is infinite in that direction returns NULL. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">void
- <span style="font-weight: bold;">vertex0</span>(voronoi_vertex_type* v)<br>
- </td>
+ <span style="font-weight: bold;">vertex0</span>(voronoi_vertex_type*
+v) </td>
             <td>Sets the start point
-pointer of the edge.<br>
- </td>
+pointer of the edge. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">voronoi_vertex_type* <span style="font-weight: bold;">vertex1</span>()<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_vertex_type*
+ <span style="font-weight: bold;">vertex1</span>() </td>
             <td>Returns the pointer to the
 end point of the edge.<br>
-If the edge is infinite in that direction returns NULL.<br>
- </td>
+If the edge is infinite in that direction returns NULL. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-voronoi_vertex_type* <span style="font-weight: bold;">vertex1</span>() const<br>
- </td>
+voronoi_vertex_type* <span style="font-weight: bold;">vertex1</span>()
+const </td>
             <td>Returns the const pointer
 to the end point of the edge.<br>
-If the edge is infinite in that direction returns NULL.<br>
- </td>
+If the edge is infinite in that direction returns NULL. </td>
           </tr>
-
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type* <span style="font-weight: bold;">twin</span>()<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type*
+ <span style="font-weight: bold;">twin</span>() </td>
             <td>Returns the pointer to the
-twin edge.<br>
- </td>
+twin edge. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-voronoi_edge_type* <span style="font-weight: bold;">twin</span>() const<br>
- </td>
+voronoi_edge_type* <span style="font-weight: bold;">twin</span>()
+const </td>
             <td>Returns the const pointer
-to the twin edge.<br>
- </td>
+to the twin edge. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">void
- <span style="font-weight: bold;">twin</span>(voronoi_edge_type* e)<br>
- </td>
+ <span style="font-weight: bold;">twin</span>(voronoi_edge_type*
+e) </td>
             <td>Sets the twin edge pointer
-of the edge.<br>
- </td>
+of the edge. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type* <span style="font-weight: bold;">next</span>()<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type*
+ <span style="font-weight: bold;">next</span>() </td>
             <td>Returns the pointer to the
 CCW next edge within the corresponding Voronoi cell.<br>
-Edges not necessarily share a common vertex (e.g. infinite edges).<br>
- </td>
+Edges not necessarily share a common vertex (e.g. infinite edges). </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-voronoi_edge_type* <span style="font-weight: bold;">next</span>() const<br>
- </td>
+voronoi_edge_type* <span style="font-weight: bold;">next</span>()
+const </td>
             <td>Returns the const pointer
 to the CCW next edge within the corresponding Voronoi cell.<br>
-Edges not necessarily share a common vertex (e.g. infinite edges).<br>
- </td>
+Edges not necessarily share a common vertex (e.g. infinite edges). </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">void
- <span style="font-weight: bold;">next</span>(voronoi_edge_type* e)<br>
- </td>
+ <span style="font-weight: bold;">next</span>(voronoi_edge_type*
+e) </td>
             <td>Sets the CCW next edge
-pointer of the edge.<br>
- </td>
+pointer of the edge. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type* <span style="font-weight: bold;">prev</span>()<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type*
+ <span style="font-weight: bold;">prev</span>() </td>
             <td>Returns the pointer to the
 CCW prev edge within the corresponding Voronoi cell.<br>
-Edges not necessarily share a common vertex (e.g. infinite edges).<br>
- </td>
+Edges not necessarily share a common vertex (e.g. infinite edges). </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-voronoi_edge_type* <span style="font-weight: bold;">prev</span>() const<br>
- </td>
+voronoi_edge_type* <span style="font-weight: bold;">prev</span>()
+const </td>
             <td>Returns the const pointer
 to the CCW prev edge within the corresponding Voronoi cell.<br>
-Edges not necessarily share a common vertex (e.g. infinite edges).<br>
- </td>
+Edges not necessarily share a common vertex (e.g. infinite edges). </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">void
- <span style="font-weight: bold;">prev</span>(voronoi_edge_type* e)<br>
- </td>
+ <span style="font-weight: bold;">prev</span>(voronoi_edge_type*
+e) </td>
             <td>Sets the CCW prev edge
-pointer of the edge.<br>
- </td>
+pointer of the edge. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">color_type <span style="font-weight: bold;">color</span>() const<br>
- </td>
- <td>Returns the color value.<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">color_type
+ <span style="font-weight: bold;">color</span>() const </td>
+ <td>Returns the color value. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">void <span style="font-weight: bold;">color</span>(color_type color) const<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">void
+ <span style="font-weight: bold;">color</span>(color_type
+color) const </td>
             <td>Sets the color of
 the edge.<br>
-Allows to execute graph algorithms and associate data.<br>
- </td>
+Allows to associate the user provided data with the primitive. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type* <span style="font-weight: bold;">rot_next</span>()<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type*
+ <span style="font-weight: bold;">rot_next</span>() </td>
             <td>Returns the pointer to the
-CCW next edge rotated around the edge start point.<br>Works for infinite
- edges as well.<br>
- </td>
+CCW next edge rotated around the edge start point.<br>
+Works for infinite edges as well. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-voronoi_edge_type* <span style="font-weight: bold;">rot_next</span>() const<br>
- </td>
+voronoi_edge_type* <span style="font-weight: bold;">rot_next</span>()
+const </td>
             <td>Returns the const pointer
-to the CCW next edge rotated around the edge start point.<br>Works for infinite edges as well.</td>
+to the CCW next edge rotated around the edge start point.<br>
+Works for infinite edges as well.</td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type* <span style="font-weight: bold;">rot_prev</span>()<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type*
+ <span style="font-weight: bold;">rot_prev</span>() </td>
             <td>Returns the pointer to the
-CCW prev edge rotated around the edge start point.<br>Works for infinite edges as well.<br>
- </td>
+CCW prev edge rotated around the edge start point.<br>
+Works for infinite edges as well. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-voronoi_edge_type* <span style="font-weight: bold;">rot_prev</span>() const<br>
- </td>
+voronoi_edge_type* <span style="font-weight: bold;">rot_prev</span>()
+const </td>
             <td>Returns the const pointer
-to the CCW prev edge rotated around the edge start point.<br>Works for infinite edges as well.</td>
+to the CCW prev edge rotated around the edge start point.<br>
+Works for infinite edges as well.</td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">bool
- <span style="font-weight: bold;">is_finite</span>() const<br>
- </td>
+ <span style="font-weight: bold;">is_finite</span>() const </td>
             <td>Returns true if the both
-end points of the edge are finite, else false.<br>
- </td>
+end points of the edge are finite, else false. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">bool
@@ -560,427 +561,436 @@
             <td>Returns true if one of the
 end points of the edge is infinite, else false.</td>
           </tr>
-<tr>
+ <tr>
             <td style="font-family: Courier New,Courier,monospace;">bool
- <span style="font-weight: bold;">is_linear</span>() const<br>
- </td>
+ <span style="font-weight: bold;">is_linear</span>() const </td>
             <td>Returns true if the edge
-is linear (segment, ray, line), else false.<br>
- </td>
+is linear (segment, ray, line), else false. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">bool
- <span style="font-weight: bold;">is_curved</span>() const<br>
- </td>
+ <span style="font-weight: bold;">is_curved</span>() const </td>
             <td>Returns true if the edge
-is curved (parabolic arc), else false.<br>
- </td>
+is curved (parabolic arc), else false. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">bool
- <span style="font-weight: bold;">is_primary</span>() const<br>
- </td>
+ <span style="font-weight: bold;">is_primary</span>() const </td>
             <td>Returns false if the edge
-goes through the endpoint of the segment site, else true.<br>
- </td>
- </tr><tr>
+goes through the endpoint of the segment site, else true. </td>
+ </tr>
+ <tr>
             <td style="font-family: Courier New,Courier,monospace;">bool
             <span style="font-weight: bold;">is_secondary</span>() const</td>
             <td>Returns true if the edge
 goes through the endpoint of the segment site, else false.</td>
           </tr>
-
         </tbody>
       </table>
- <span style="font-family: Courier New,Courier,monospace;"><br>
- </span>All
+ <span style="font-family: Courier New,Courier,monospace;"> </span>All
 the above methods have O(1) complexity. The size of
-the Voronoi edge structure is equal to: 5 * sizeof(void *) + sizeof(size_t).<span style="font-family: Courier New,Courier,monospace;"></span><br>
+the Voronoi edge structure is equal to: 5 * sizeof(void *) +
+sizeof(size_t).<span style="font-family: Courier New,Courier,monospace;"></span><br>
       <h2>Member Types</h2>
-
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td style="font-weight: bold;">coordinate_type<br>
- </td>
- <td>Coordinate type.<br>
- </td>
+ <td style="font-weight: bold;">coordinate_type </td>
+ <td>Coordinate type. </td>
           </tr>
           <tr>
- <td style="font-weight: bold;">voronoi_cell_type<br>
- </td>
- <td>Voronoi cell type.<br>
- </td>
+ <td style="font-weight: bold;">voronoi_cell_type </td>
+ <td>Voronoi cell type. </td>
           </tr>
           <tr>
- <td style="font-weight: bold;">voronoi_vertex_type<br>
- </td>
- <td>Voronoi vertex type.<br>
- </td>
+ <td style="font-weight: bold;">voronoi_vertex_type </td>
+ <td>Voronoi vertex type. </td>
           </tr>
           <tr>
- <td style="font-weight: bold;">voronoi_edge_type<br>
- </td>
- <td>Voronoi edge type.<br>
- </td>
- </tr><tr>
- <td style="vertical-align: top; font-weight: bold;">color_type<br>
- </td>
- <td style="vertical-align: top;">Color type (check the Important section).<br>
+ <td style="font-weight: bold;">voronoi_edge_type </td>
+ <td>Voronoi edge type. </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top; font-weight: bold;">color_type
             </td>
+ <td style="vertical-align: top;">Color type (check the
+Important section). </td>
           </tr>
-
         </tbody>
       </table>
       <h1>Voronoi Cell</h1>
-
-Voronoi cell is represented by a site the cell contains and a pointer
-to the incident edge.<br>
+A Voronoi cell represents a region of the Voronoi diagram bounded by
+the Voronoi edges. On the image below, there are 7 such regions: P, Q,
+R, S, T, U, V. Each Voronoi cell can contain a point (e.g. cells Q, S,
+T, U, V with corresponding input sources N, K, L, O, M respectively) or
+a segment
+(e.g. cells P and R with corresponding input sources MN and KL
+respectively) as its
+source. The Voronoi cell primitive doesn't contain coordinates of the
+source geometry, instead it stores the index and category of the source
+geometry. Source index corresponds to the unique id, issued to each
+input geometry (e.g. incremental counter, used by the Voronoi builder).
+Such an index uniquely identifies any input point (e.g. O), however
+doesn't make any distinction between segment (e.g. MN) and both its end
+points (e.g. M, N). In order to resolve possible ambiguity, the source
+category is used, that specifies the semantic topology of the input
+object (e.g. segment's startpoint, segment's endpoint or segment
+itself). The Voronoi cell data structure also provides access to a
+random Voronoi edge, located on the boundary of the cell (e.g. edge AE
+for
+the cell P).<br>
+ <img style="width: 600px; height: 600px;" alt=""
+ src="images/voronoi1.png"><br>
       <h2>Declaration</h2>
-
-
-
+Header: boost/polygon/voronoi_diagram.hpp<br>
+ <br>
       <span style="font-family: Courier New,Courier,monospace;">template
 &lt;typename T&gt;<br>
 class voronoi_cell;<br>
       <br>
-</span><span style="font-family: Courier New,Courier,monospace;">T</span> - coordinate type.<br>
+ </span><span style="font-family: Courier New,Courier,monospace;">T</span>
+- coordinate type.<br>
       <h2>Member Functions</h2>
-
- <span style="font-family: Courier New,Courier,monospace;">
-
- </span>
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <span style="font-family: Courier New,Courier,monospace;"> </span>
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
-
-
           <tr>
- <td><span style="font-family: Courier New,Courier,monospace;"><span style="font-weight: bold;">voronoi_cell</span>(source_index_type source_index,</span><span style="font-family: Courier New,Courier,monospace;"><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; source_category_type source_category)</span><br>
- </td>
- <td>Voronoi cell constructor.<br>
- </td>
+ <td><span
+ style="font-family: Courier New,Courier,monospace;"><span
+ style="font-weight: bold;">voronoi_cell</span>(source_index_type
+source_index,</span><span
+ style="font-family: Courier New,Courier,monospace;"><br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+source_category_type source_category)</span> </td>
+ <td>Voronoi cell constructor. </td>
           </tr>
-<tr>
- <td style="font-family: Courier New,Courier,monospace;">source_index_type <span style="font-weight: bold;">source_index</span>() const<br>
- </td>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">source_index_type
+ <span style="font-weight: bold;">source_index</span>()
+const </td>
             <td>Returns input site index among the other sites.<br>
-Both segment endpoints and segment itself will have the same index.<br>
- </td>
+Both segment and its end points will have the same index. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">source_category_type <span style="font-weight: bold;">source_category</span>() const<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">source_category_type
+ <span style="font-weight: bold;">source_category</span>()
+const </td>
             <td>Returns input site category among the other sites.<br>
-Allows to distinguish between segment site and its endpoints.<br>
-
- </td>
+Allows to distinguish between segment site and its endpoints. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type* <span style="font-weight: bold;">incident_edge</span>()<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type*
+ <span style="font-weight: bold;">incident_edge</span>() </td>
             <td>Returns the pointer to the
-one of the boundary edges.<br>
- </td>
+one of the boundary edges. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-voronoi_edge_type* <span style="font-weight: bold;">incident_edge</span>() const<br>
- </td>
+voronoi_edge_type* <span style="font-weight: bold;">incident_edge</span>()
+const </td>
             <td>Returns the const pointer
-to the one of the boundary edges.<br>
- </td>
+to the one of the boundary edges. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">void
- <span style="font-weight: bold;">incident_edge</span>(voronoi_edge_type* e)<br>
- </td>
+ <span style="font-weight: bold;">incident_edge</span>(voronoi_edge_type*
+e) </td>
             <td>Sets the incident boundary
-edge pointer of the cell.<br>
- </td>
+edge pointer of the cell. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">color_type <span style="font-weight: bold;">color</span>() const<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">color_type
+ <span style="font-weight: bold;">color</span>() const </td>
             <td>Returns the color associated with the cell.</td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">void <span style="font-weight: bold;">color</span>(color_type color) const<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">void
+ <span style="font-weight: bold;">color</span>(color_type
+color) const </td>
             <td>Sets the color of
 the cell.<br>
-
-Allows to execute graph algorithms and associate data.<br>
-</td>
+Allows to associate the user provided data with the primitive. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">bool
- <span style="font-weight: bold;">contains_point</span>() const</td>
+ <span style="font-weight: bold;">contains_point</span>()
+const</td>
             <td>Returns true if the cell
 contains a point site, else false.</td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">bool
- <span style="font-weight: bold;">contains_segment</span>() const</td>
+ <span style="font-weight: bold;">contains_segment</span>()
+const</td>
             <td>Returns true if the cell
 contains a segment site, else false.</td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">bool
- <span style="font-weight: bold;">is_degenerate</span>() const </td>
+ <span style="font-weight: bold;">is_degenerate</span>()
+const </td>
             <td>Returns true if the cell
 doesn't have an incident edge.<br>
-Could happen if a few input segments share a common endpoint.</td>
+Can happen if a few input segments share a common endpoint.</td>
           </tr>
         </tbody>
       </table>
- <span style="font-family: Courier New,Courier,monospace;"><br>
- </span>All the above methods have O(1) complexity. The size of
-the Voronoi cell structure is equal to: sizeof(void *) + 2 * sizeof(size_t).<span style="font-family: Courier New,Courier,monospace;"></span>
+ <span style="font-family: Courier New,Courier,monospace;"> </span>All
+the above methods have O(1) complexity. The size of
+the Voronoi cell structure is equal to: sizeof(void *) + 2 *
+sizeof(size_t).<span style="font-family: Courier New,Courier,monospace;"></span>
       <h2>Member Types</h2>
-
-
-
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td style="font-weight: bold;">coordinate_type<br>
- </td>
- <td>Coordinate type.<br>
- </td>
+ <td style="font-weight: bold;">coordinate_type </td>
+ <td>Coordinate type. </td>
           </tr>
           <tr>
             <td style="font-weight: bold;">source_index_type</td>
- <td>Source index type.<br>
- </td>
+ <td>Source index type. </td>
           </tr>
           <tr>
- <td style="vertical-align: top; font-weight: bold;">source_category_type<br>
- </td>
- <td style="vertical-align: top;">Source category type.<br>
+ <td style="vertical-align: top; font-weight: bold;">source_category_type
             </td>
+ <td style="vertical-align: top;">Source category type. </td>
           </tr>
-<tr>
+ <tr>
             <td style="vertical-align: top; font-weight: bold;">voronoi_edge_type
             </td>
- <td style="vertical-align: top;">Voronoi edge type.
- </td>
+ <td style="vertical-align: top;">Voronoi edge type. </td>
           </tr>
-<tr>
- <td style="font-weight: bold;">color_type
- </td>
- <td>Color type (check the Important section).
- </td>
+ <tr>
+ <td style="font-weight: bold;">color_type </td>
+ <td>Color type (check the Important section). </td>
           </tr>
         </tbody>
       </table>
       <h2>Miscellaneous</h2>
-
-The following code snippet effectively traverses the Voronoi edges around the
+The following code snippet effectively traverses the Voronoi edges
+around the
 Voronoi cell:<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">const
 voronoi_edge&lt;double&gt;* edge = cell-&gt;incident_edge();</span><br>
- <span style="font-family: Courier New,Courier,monospace;">do {</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">do {</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">&nbsp;
-edge = edge-&gt;next();</span><br style="font-family: Courier New,Courier,monospace;">
+edge = edge-&gt;next();</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">&nbsp;
-// Do smth. with edge.</span><br style="font-family: Courier New,Courier,monospace;">
+// Do smth. with edge.</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">} while
 (edge != cell-&gt;incident_edge());</span><br>
       <h1>Voronoi Vertex</h1>
-Voronoi vertex is represented by a point that corresponds to the vertex
-and a pointer to the incident edge.<br>
+A Voronoi vertex represents a point, that is equidistant from the three
+or more input geometries. As a consequence, it corresponds to the point
+of the intersection of the three or more Voronoi edges. On the image
+below, there are 5 such vertices: A, B, C, D, E. The Voronoi vertex
+data structure embeds the coordinates of the underlying point and
+provides access to a random Voronoi edge originating from the vertex
+(e.g. edge
+BC for the vertex B).<br>
+ <img style="width: 600px; height: 600px;" alt=""
+ src="images/voronoi1.png"><br>
       <h2>Declaration</h2>
-
-
-
+Header: boost/polygon/voronoi_diagram.hpp<br>
+ <br>
       <span style="font-family: Courier New,Courier,monospace;">template
-&lt;typename T&gt;</span><br style="font-family: Courier New,Courier,monospace;">
+&lt;typename T&gt;</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">class
 voronoi_vertex;<br>
       <br>
-</span><span style="font-family: Courier New,Courier,monospace;">T</span> - coordinate type.<br>
+ </span><span style="font-family: Courier New,Courier,monospace;">T</span>
+- coordinate type.<br>
       <h2>Member Functions</h2>
-
- <span style="font-family: Courier New,Courier,monospace;">
-
- </span>
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <span style="font-family: Courier New,Courier,monospace;"> </span>
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
-
           <tr>
- <td><span style="font-family: Courier New,Courier,monospace;"><span style="font-weight: bold;">voronoi_vertex</span>(const coordinate_type&amp; x,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const coordinate_type&amp; y)</span><span style="font-family: Courier New,Courier,monospace;"></span><br>
- </td>
- <td>Voronoi vertex constructor.<br>
- </td>
+ <td><span
+ style="font-family: Courier New,Courier,monospace;"><span
+ style="font-weight: bold;">voronoi_vertex</span>(const
+coordinate_type&amp; x,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+const coordinate_type&amp; y)</span><span
+ style="font-family: Courier New,Courier,monospace;"></span> </td>
+ <td>Voronoi vertex constructor. </td>
           </tr>
-<tr>
+ <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-point_type&amp; <span style="font-weight: bold;">x</span>() const<br>
- </td>
- <td>Returns the x-coordinate of the point that represents the vertex.<br>
- </td>
+point_type&amp; <span style="font-weight: bold;">x</span>() const </td>
+ <td>Returns the x-coordinate of the point that represents
+the vertex. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
 point_type&amp; <span style="font-weight: bold;">y</span>() const</td>
- <td>Returns the y-coordinate of the point that represents the vertex.<br>
- </td>
+ <td>Returns the y-coordinate of the point that represents
+the vertex. </td>
           </tr>
-<tr>
- <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type* <span style="font-weight: bold;">incident_edge</span>()<br>
- </td>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">voronoi_edge_type*
+ <span style="font-weight: bold;">incident_edge</span>() </td>
             <td>Returns the incident edge
-pointer.<br>
- </td>
+pointer. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">const
-voronoi_edge_type* <span style="font-weight: bold;">incident_edge</span>() const<br>
- </td>
+voronoi_edge_type* <span style="font-weight: bold;">incident_edge</span>()
+const </td>
             <td>Returns the const pointer
-to the incident edge.<br>
- </td>
+to the incident edge. </td>
           </tr>
           <tr>
             <td style="font-family: Courier New,Courier,monospace;">void
- <span style="font-weight: bold;">incident_edge</span>(voronoi_edge_type* e)<br>
- </td>
+ <span style="font-weight: bold;">incident_edge</span>(voronoi_edge_type*
+e) </td>
             <td>Sets the incident edge
-pointer.<br>
- </td>
+pointer. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">color_type <span style="font-weight: bold;">color</span>() const<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">color_type
+ <span style="font-weight: bold;">color</span>() const </td>
             <td>Returns the color associated with the vertex.</td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">void <span style="font-weight: bold;">color</span>(color_type color) const<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">void
+ <span style="font-weight: bold;">color</span>(color_type
+color) const </td>
             <td>Sets the color of
 the vertex.<br>
-Allows to executegraph algorithms and associate data.</td>
+Allows to associate the user provided data with the primitive.</td>
           </tr>
         </tbody>
       </table>
- <span style="font-family: Courier New,Courier,monospace;"><br>
- </span>All the above methods have O(1) complexity. The size of
-the Voronoi vertex structure is equal to: sizeof(void *) + sizeof(size_t) + 2 *
-sizeof(coordinate_type).<span style="font-family: Courier New,Courier,monospace;"></span>
+ <span style="font-family: Courier New,Courier,monospace;"> </span>All
+the above methods have O(1) complexity. The size of
+the Voronoi vertex structure is equal to: sizeof(void *) +
+sizeof(size_t) + 2 *
+sizeof(coordinate_type).<span
+ style="font-family: Courier New,Courier,monospace;"></span>
       <h2>Member Types</h2>
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td style="font-weight: bold;">coordinate_type<br>
- </td>
- <td>Coordainte type.<br>
- </td>
+ <td style="font-weight: bold;">coordinate_type </td>
+ <td>Coordainte type. </td>
           </tr>
-
           <tr>
- <td style="vertical-align: top; font-weight: bold;">voronoi_edge_type<br>
- </td>
- <td style="vertical-align: top;">Voronoi edge type.<br>
+ <td style="vertical-align: top; font-weight: bold;">voronoi_edge_type
             </td>
+ <td style="vertical-align: top;">Voronoi edge type. </td>
           </tr>
-<tr>
- <td style="font-weight: bold;">color_type
- </td>
- <td>Color type (check the Important section).
- </td>
+ <tr>
+ <td style="font-weight: bold;">color_type </td>
+ <td>Color type (check the Important section). </td>
           </tr>
         </tbody>
       </table>
-
- <h2>Miscellaneous</h2>The following code snippet effectively traverses the Voronoi edges around the
+ <h2>Miscellaneous</h2>
+The following code snippet effectively traverses the Voronoi edges
+around the
 Voronoi vertex:<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">const
 voronoi_edge&lt;double&gt;* edge = vertex-&gt;incident_edge();</span><br>
- <span style="font-family: Courier New,Courier,monospace;">do {</span><br style="font-family: Courier New,Courier,monospace;">
+ <span style="font-family: Courier New,Courier,monospace;">do {</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">&nbsp;
-edge = edge-&gt;next();</span><br style="font-family: Courier New,Courier,monospace;">
+edge = edge-&gt;next();</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">&nbsp;
-// Do smth. with edge.</span><br style="font-family: Courier New,Courier,monospace;">
+// Do smth. with edge.</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">} while
-(edge != vertex-&gt;incident_edge());<br>
-</span>
- <h1>Voronoi Diagram Traits<br>
- </h1>
-Voronoi diagram traits are used to configure Voronoi diagram data
+(edge != vertex-&gt;incident_edge()); </span>
+ <h1>Voronoi Diagram Traits </h1>
+The Voronoi diagram traits are used to configure the Voronoi primitive
+types and predicates, used by the Voronoi diagram
+data
 structure.<br>
+The implementation includes default traits specialization for the
+double output coordinate type.<br>
       <h2>Declaration</h2>
-
-
-
+Header: boost/polygon/voronoi_diagram.hpp<br>
+ <br>
       <span style="font-family: Courier New,Courier,monospace;">template
-&lt;typename T&gt;</span><br style="font-family: Courier New,Courier,monospace;">
+&lt;typename T&gt;</span><br
+ style="font-family: Courier New,Courier,monospace;">
       <span style="font-family: Courier New,Courier,monospace;">struct
 voronoi_diagram_traits;<br>
       <br>
-</span><span style="font-family: Courier New,Courier,monospace;">T</span> - coordinate type.<br>
+ </span><span style="font-family: Courier New,Courier,monospace;">T</span>
+- coordinate type.<br>
       <h2>Member Types</h2>
-
- <span style="font-family: Courier New,Courier,monospace;">
-
- </span>
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <span style="font-family: Courier New,Courier,monospace;"> </span>
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td style="font-family: Courier New,Courier,monospace; font-weight: bold;">coordinate_type<br>
- </td>
- <td>The main coordinate type
-of the Voronoi diagram primitives.<br>
+ <td
+ style="font-family: Courier New,Courier,monospace; font-weight: bold;">coordinate_type
             </td>
+ <td>Coordinate type
+of the Voronoi diagram primitives. </td>
           </tr>
-
-
           <tr>
- <td style="font-family: Courier New,Courier,monospace; font-weight: bold;">cell_type<br>
- </td>
- <td>Voronoi cell type.<br>
+ <td
+ style="font-family: Courier New,Courier,monospace; font-weight: bold;">cell_type
             </td>
+ <td>Voronoi cell type. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace; font-weight: bold;">vertex_type<br>
- </td>
- <td>Voronoi vertex_type.<br>
+ <td
+ style="font-family: Courier New,Courier,monospace; font-weight: bold;">vertex_type
             </td>
+ <td>Voronoi vertex type. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace; font-weight: bold;">edge_type<br>
- </td>
- <td>Voronoi edge_type.<br>
+ <td
+ style="font-family: Courier New,Courier,monospace; font-weight: bold;">edge_type
             </td>
+ <td>Voronoi edge type. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace; font-weight: bold;">vertex_equality_predicate_type<br>
+ <td
+ style="font-family: Courier New,Courier,monospace; font-weight: bold;">vertex_equality_predicate_type
             </td>
             <td>Predicate that returns
-true if two points are considered to be equal.<br>
-This is used to unite nearby Voronoi vertices.<br>
- </td>
+true if the two points are considered to be equal.<br>
+False otherwise. It is used to unite nearby Voronoi vertices. </td>
           </tr>
         </tbody>
       </table>
       </td>
     </tr>
     <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">&nbsp;</td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1">&nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
       <table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
+ <colgroup> <col class="docinfo-name"><col
+ class="docinfo-content"> </colgroup> <tbody valign="top">
           <tr>
             <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
+ <td>Copyright © Andrii Sydorchuk 2010-2013.</td>
           </tr>
           <tr class="field">
             <th class="docinfo-name">License:</th>
             <td class="field-body">Distributed under the Boost Software
-License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+License, Version 1.0. (See accompanying file <tt class="literal"><span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="http://www.boost.org/LICENSE_1_0.txt">
 http://www.boost.org/LICENSE_1_0.txt>)</td>
           </tr>
         </tbody>
@@ -989,6 +999,5 @@
     </tr>
   </tbody>
 </table>
-
-
-</body></html>
\ No newline at end of file
+</body>
+</html>

Modified: branches/release/libs/polygon/doc/voronoi_main.htm
==============================================================================
--- branches/release/libs/polygon/doc/voronoi_main.htm (original)
+++ branches/release/libs/polygon/doc/voronoi_main.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -1,44 +1,26 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+<html>
+<head>
   <meta http-equiv="Content-Language" content="en-us">
-
-
- <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Main</title>
-
-
-
-
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=windows-1252">
+ <title>Voronoi Main</title>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
-
-
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
-
-
- <meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
-
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+</head>
+<body>
+<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
+ cellpadding="0" cellspacing="0">
   <tbody>
     <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="
http://www.boost.org/"> </a></div>
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1"
+ valign="top">
+ <div style="padding: 5px;" align="center"> <img
+ src="images/boost.png" border="0" height="86" width="277"><a
+ title="www.boost.org home page" tabindex="2"
+ style="border: medium none ;" href="http://www.boost.org/"> </a></div>
       <div style="margin: 5px;">
       <h3 class="navbar">Contents</h3>
       <ul>
@@ -49,7 +31,6 @@
         <li>Interval Concept</li>
         <li>Point Concept</li>
         <li>Segment Concept</li>
-
         <li>Rectangle Concept</li>
         <li>Polygon 90 Concept</li>
         <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
@@ -74,16 +55,10 @@
         <li>Property Merge 90</li>
         <li>Property Merge 45</li>
         <li>Property Merge</li>
- <li>Voronoi Main Page<br>
- </li>
+ <li>Voronoi Main Page </li>
         <li>Voronoi Benchmark</li>
- <li>Voronoi Builder<br>
- </li>
+ <li>Voronoi Builder </li>
         <li>Voronoi Diagram</li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br>
- </li>
-
       </ul>
       <h3 class="navbar">Other Resources</h3>
       <ul>
@@ -99,313 +74,399 @@
       </ul>
       </div>
       <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
+ <div style="padding: 5px;" align="center"> <img
+ src="images/intlogo.gif" border="0" height="51" width="127"><a
+ title="www.adobe.com home page" tabindex="2"
+ style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
       </td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
-
- <h1>THE BOOST.POLYGON VORONOI LIBRARY<br>
- </h1>
- <img style="width: 900px; height: 300px;" alt="" src="images/voronoi3.png"><br>
-The Boost.Polygon Voronoi library provides functionality to construct the Voronoi diagram
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%"><!-- End Header --> <br>
+ <h1>THE BOOST.POLYGON VORONOI LIBRARY </h1>
+ <img style="width: 900px; height: 300px;" alt=""
+ src="images/voronoi3.png"><br>
+The Voronoi extension of the Boost.Polygon library provides
+functionality to construct a <a href="voronoi_diagram.htm">Voronoi
+diagram</a>
 of a set of points and linear segments in 2D space with the following
 set of
 limitations:<br>
       <ul>
         <li>coordinates of the input points and endpoints of the
-segments
+input segments
 should be of the integer type;</li>
         <li>input segments should not overlap
 except their endpoints.</li>
       </ul>
 While the first restriction is permanent (it
 allows to give the exact warranties about the output precision and
-algorithm execution),
-the second one may be resolved using the Boost.Polygon functionality.
+algorithm execution flow),
+the second one may be resolved using the Boost.Polygon <a
+ href="gtl_segment_concept.htm">segment utils</a>.
 The strong sides of the
 library and main benefits comparing to the other implementations are
 discussed in the following paragraphs.<span style="font-weight: bold;"></span><br>
+ <h2>Fully Functional with Segments</h2>
+There are just a few implementations of the Voronoi diagram
+construction
+algorithm that can
+handle input data sets that contain linear segment, even considering
+the commercial
+libraries.
+Support of the
+segments allows to discretize any input geometry (sampled
+floating-point coordinates can be scaled and snapped to the integer
+grid): circle, ellipse,
+parabola. This functionality allows to compute
+the medial axis transform of the arbitrary set of input geometries,
+with direct applications in the computer vision
+projects.
       <h2>Robustness and Efficiency</h2>
-Let's explain a bit those terms. The efficiency is simply measured by
-the time it takes the algorithm to execute. The robustness is a bit
-more harder to explain. But those of you who had the experience with
-the following situations would understand what it doesn't mean: application segfaults randomly, algorithm output contains
-degeneracies or is completely invalid (e.g. a point is considered to be outside of the polygon,
-while should be inside). In other words robust implementation doesn't
-fail and produces expected output in 100% of cases, thus user can rely
-on
-it. Robustness is a weak place of the most non-commercial
-implementations of any complex geometric algorithm. The main issues could be divided onto two main categories: memory management
-issues, numeric stability issues. Our implementation avoids the
-first type of issues using pure STL data structures, thus you won't find
-any operator new in the code. The second category of problems is
-resolved using multiprecision <a href="voronoi_predicates.htm">geometric
-predicates</a>.
-Even for commercial implementations usage of such predicates usually
-results in a huge performance slowdown. Here is another strong side of
-the Boost.Polygon
-Voronoi library: we avoid multiprecision computations in 95% of cases
-using
-extremely fast floating-point predicates. Yes, those are not always
-exact, but we developed the <a href="voronoi_robust_fpt.htm">relative
-error arithmetic apparatus</a> to identify them and switch to the
-higher precision predicates when required.<br>
- <h2>Precision of the Output Structures<br>
- </h2>
-One of the extremely important results of using two types of predicates
-is that library efficiently computes relatively precise coordinates of
-the output geometries. Here we will explain a bit what exactly
-"relatively precise" means and how the received output may differ from
-the theoretically correct one (here and after we assume that output
-coordinate type is the IEEE-754 floating-point type).<br>
- <br>
-Voronoi implementation guaranties that the relative error of the
+Robustness issues can be divided onto the two main categories: memory
+management
+issues and numeric stability issues. The implementation avoids the
+first type of the issues using pure STL data structures, thus there is
+no
+presence of the new operator in the code. The second category of
+the problems is
+resolved using the multiprecision geometric
+predicates.
+Even for the commercial libraries, usage of such predicates
+results in a vast performance slowdown. The Voronoi implementation
+overcomes this by avoiding the multiprecision
+computations in the 95% of the cases and
+uses the efficient, floating-point based predicates. Such preciates
+don't
+produce the correct result always, however the library embeds the
+relative
+error arithmetic apparatus to identify such situations and switch
+to the
+higher precision predicates when appropriate. As the result, the
+implementation has a solid performance comparing to the other known
+libraries (more details in the benchmarks).<br>
+ <h2>Precision of the Output Structures </h2>
+The Voronoi implementation guaranties, that the relative error of the
 coordinates of the output
-geometries is always not higher than 64 machine epsilons (6
-bits of mantissa), while in many cases it is slightly less. That also
-means that using floating-point type with the larger mantissa will
-produce more precise output. Let's consider
-the following example: the output Voronoi
-vertex has double (53-bit mantissa) x-coordinate equal to 1.0, then the
-absolute error is at most 2^-53 * 2^6 = 2^-47 and the exact value of
-x-coordinate lies in the range [1.0 - 2^-47, 1.0 + 2^-47]. For
-x-coordinate equal to 2^31, the absolute error will be at most 2^-53 *
-2^31 * 2^6 = 2^-16 and the exact value of x-coordinate lies in the
-range
-[2^31 - 2^-16, 2^31 + 2^16]. For the output Voronoi vertex with long
-double
-(64-bit mantissa) x-coordinate equal to 2^31, the absolute error will
-be at most 2^-64 * 2 ^31 * 2^6 = 2^-27 and the exact value of
-x-coordinate
-lies in the range [2^31-2^-27, 2^31+2^-27]. If you'd like to become
-master of the absolute and relative error try this article.<br>
+geometries is at most 64 machine epsilons (6
+bits of mantissa, for the IEEE-754 floating-point type), while on
+average it's slightly lower. This means, that the precision of the
+output
+geometries can be increased simply by using a floating-point type with
+the larger mantissa. The practical point of this statements is
+explained in the following table:<br>
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td style="vertical-align: top;">Output Coordinate Type </td>
+ <td style="vertical-align: top;">Output Coordinate Value </td>
+ <td style="vertical-align: top;">Max Absolute Error </td>
+ <td style="vertical-align: top;">Precise Value Range </td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;">double (53 bit mantissa) </td>
+ <td style="vertical-align: top;">1 </td>
+ <td style="vertical-align: top;">2<sup>-53</sup> * 2<sup>6</sup>
+= 2<sup>-47</sup></td>
+ <td style="vertical-align: top;">1 ± 2<sup>-47</sup></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;">double (53 bit mantissa) </td>
+ <td style="vertical-align: top;">2<sup>31</sup> </td>
+ <td style="vertical-align: top;">2<sup>-53</sup> * 2<sup>31</sup>
+* 2<sup>6</sup> = 2<sup>-16</sup></td>
+ <td style="vertical-align: top;">2<sup>31</sup> ± 2<sup>-16</sup></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;">long double (64 bit
+mantissa)</td>
+ <td style="vertical-align: top;">1 </td>
+ <td style="vertical-align: top;">2<sup>-64</sup> * 2<sup>6</sup>
+= 2<sup>-58</sup></td>
+ <td style="vertical-align: top;">1 ± 2<sup>-58</sup></td>
+ </tr>
+ <tr>
+ <td style="vertical-align: top;">long double (64 bit
+mantissa) </td>
+ <td style="vertical-align: top;">2<sup>31</sup></td>
+ <td style="vertical-align: top;">2<sup>-64</sup> * 2<sup>31</sup>
+* 2<sup>6</sup> = 2<sup>-27</sup></td>
+ <td style="vertical-align: top;">2<sup>31</sup> ± 2<sup>-27</sup></td>
+ </tr>
+ </tbody>
+ </table>
+Detailed description of the absolute and relative errors evaluation can
+be found in the article: <a
+ href="http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html">"What
+Every Computer Scientist Should Know About Floating-Point Arithmetic"</a><a
+ href="http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html"></a>.<br>
       <br>
-During the finalization step the implementation unites Voronoi vertices whose both
+During the finalization step the implementation unites the Voronoi
+vertices
+whose both
 coordinates are situated within the relative error range equal to 128
-machine epsilons and removes any Voronoi edges between them. That is
-the only case that might cause differences between the algorithm output
-topology and theoretically precise one.&nbsp; Now let's see what is the practical
-impact of this. Consider the following example: we are going to construct the
-Voronoi diagram of our Solar System. The radius of our Solar System is
-approximately 2^42 metres, and we are going to snap it to the integer
-grid of [-2^42; 2^42] x [-2^42; 2^42].&nbsp; Let's choose the long double
-(64 bit mantissa) output coordinate type, then the maximum absolute error
-for the output geometries within our Solar System will be on its boundaries
-and equal to 2^-64 * 2^42 * 2^6 = 2^-18 metres. In the output we are going to
-consider vertices with both coordinates that are within 2^-17 metres (8
-micrometres) distance to be equal. That distance is equal to
-the size of a bacteria and is relative to the Solar System size.<br>
- <h2>Fully Functional with Segments</h2>
-There are not many implementations of the Voronoi diagram construction
-algorithm that could
-handle linear segment inputs, even considering the commercial libraries.
-Support of the
-segments allows to discretize any input geometry (circle, ellipse,
-parabola). Of course as the result those might have floating-point
-coordinates, but that is resolved using scaling and snapping to the
-integer grid. This functionality is very handy as it allows to compute
-the medial axis transform of the arbitrary set of input geometries. So
-one may start
-using it for the next generation pattern recognition or computer vision
-project.<br>
- <h2>Basic and Advanced Usage Cases</h2>
-The main library header <span style="font-family: Courier New,Courier,monospace;">voronoi.hpp</span>
-defines the following static functions to integrate the Voronoi library functionality with the Boost.Polygon interfaces:<br>
+machine epsilons and removes any Voronoi edges between those. This is
+the only case, that might cause differences between the algorithm
+output
+topology and theoretically precise one, and practically means the
+following: for the Voronoi diagram of a set of solid bodies inside the
+Solar System (radius 2<sup>42</sup> metres) and the long double (64 bit
+mantissa) output coordinate type the maximum absolute error within the
+Solar System rectangle will be equal to 2<sup>-64</sup> * 2<sup>42</sup>
+* 2<sup>6</sup> = 2<sup>-18</sup> metres; as the result, vertices with
+both coordinates that are within 2<sup>-18</sup> metres (8
+micrometres or the size of a bacteria) will be considered
+equal and united.<br>
+ <h2>Simple Interface </h2>
+The boost/polygon/<a
+ href="../../../boost/polygon/voronoi.hpp">voronoi.hpp</a>
+library header defines the following static functions to integrate the
+Voronoi library
+functionality with the Boost.Polygon interfaces:<br>
       <br>
- <table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
+ <table style="text-align: left; width: 100%;" border="1"
+ cellpadding="2" cellspacing="2">
         <tbody>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename Point, typename VB&gt;<br>
-size_t <span style="font-weight: bold;">insert</span>(const Point &amp;point, VB *vb)<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename Point, typename VB&gt;<br>
+size_t <span style="font-weight: bold;">insert</span>(const Point
+&amp;point, VB *vb) </td>
             <td>Inserts a point into the Voronoi builder data structure.<br>
 Point type should model the point concept.<br>
-
-Returns index number of the inserted site.<br>
- </td>
+Returns index of the inserted site. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename PointIterator, typename VB&gt;<br>
-void <span style="font-weight: bold;">insert</span>(PointIterator first, <br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PointIterator last,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VB *vb)<br>
- </td>
- <td>Inserts an iterator range of points into the Voronoi builder data structure.<br>
-Corresponding point type should model the point concept.<br>
- </td>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename PointIterator, typename VB&gt;<br>
+void <span style="font-weight: bold;">insert</span>(PointIterator
+first, <br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+PointIterator last,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VB
+*vb) </td>
+ <td>Inserts an iterator range of points into the Voronoi
+builder data structure.<br>
+Corresponding point type should model the point concept. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename Segment, typename VB&gt;<br>
-size_t <span style="font-weight: bold;">insert</span>(const Segment &amp;segment, VB *vb)<br>
- </td>
- <td>Inserts a segment into the Voronoi builder data structure.<br>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename Segment, typename VB&gt;<br>
+size_t <span style="font-weight: bold;">insert</span>(const Segment
+&amp;segment, VB *vb) </td>
+ <td>Inserts a segment into the Voronoi builder data
+structure.<br>
 Segment type should model the segment concept.<br>
-
-Returns index number of the inserted site.<br>
- </td>
- </tr>
- <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename SegmentIterator, typename VB&gt;<br>
-void <span style="font-weight: bold;">insert</span>(SegmentIterator first,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SegmentIterator last,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VB *vb)<br>
- </td>
- <td>Inserts an iterator range of segments into the Voronoi builder data structure.<br>
-Corresponding segment type should model the segment concept.<br>
- </td>
- </tr>
-<tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename PointIterator, typename VD&gt;<br>
-void <span style="font-weight: bold;">construct_voronoi</span>(PointIterator first,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Returns index of the inserted site. </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename SegmentIterator, typename VB&gt;<br>
+void <span style="font-weight: bold;">insert</span>(SegmentIterator
+first,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+SegmentIterator last,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VB
+*vb) </td>
+ <td>Inserts an iterator range of segments into the Voronoi
+builder data structure.<br>
+Corresponding segment type should model the segment concept. </td>
+ </tr>
+ <tr>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename PointIterator, typename VD&gt;<br>
+void <span style="font-weight: bold;">construct_voronoi</span>(PointIterator
+first,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 PointIterator last,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-VD *vd)<br>
- </td>
- <td>Constructs Voronoi diagram of a set of points.<br>Corresponding point type should model the point concept.<br>
- </td>
+VD *vd) </td>
+ <td>Constructs the Voronoi diagram of a set of points.<br>
+Corresponding point type should model the point concept. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename SegmentIterator, typename VD&gt;<br>
-void <span style="font-weight: bold;">construct_voronoi</span>(SegmentIterator first,<br>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename SegmentIterator, typename VD&gt;<br>
+void <span style="font-weight: bold;">construct_voronoi</span>(SegmentIterator
+first,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 SegmentIterator last,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-VD *vd)<br>
- </td>
- <td>Constructs Voronoi diagram of a set of segments.<br>Corresponding segment type should model the segment concept.<br>
- </td>
+VD *vd) </td>
+ <td>Constructs the Voronoi diagram of a set of segments.<br>
+Corresponding segment type should model the segment concept. </td>
           </tr>
           <tr>
- <td style="font-family: Courier New,Courier,monospace;">template &lt;typename PointIterator,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typename SegmentIterator,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typename VD&gt;<br>void <span style="font-weight: bold;">construct_voronoi</span>(PointIterator p_first,<br>
+ <td style="font-family: Courier New,Courier,monospace;">template
+&lt;typename PointIterator,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typename
+SegmentIterator,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typename VD&gt;<br>
+void <span style="font-weight: bold;">construct_voronoi</span>(PointIterator
+p_first,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+PointIterator p_last,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-PointIterator p_last,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 SegmentIterator s_first,<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-SegmentIterator s_last,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-VD *vd)<br>
- </td>
- <td>Constructs Voronoi
-diagram of a set of points and segments.<br>Corresponding point type should model the point concept.<br>
-Corresponding segment type should model the segment concept.<br>
- </td>
+SegmentIterator s_last,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+VD *vd) </td>
+ <td>Constructs the Voronoi
+diagram of a set of points and segments.<br>
+Corresponding point type should model the point concept.<br>
+Corresponding segment type should model the segment concept. </td>
           </tr>
         </tbody>
       </table>
- <br>This
-means that it's possible to construct the Voronoi diagram with the
-following two lines of code (if corresponding input types satisfy the Boost.Polygon concept model):<br>
+ <br>
+The
+following two lines of code construct the Voronoi diagram of a set of
+points (as
+long as the corresponding input geometry type satisfies the
+Boost.Polygon concept model):<br>
       <br>
       <span style="font-family: Courier New,Courier,monospace;">voronoi_diagram&lt;double&gt;
 vd;</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">construct_voronoi(points.begin(), points.end(), &amp;vd);</span><br>
- <br>The library also provides the clear interfaces to
- associate user data with the output geometries and efficiently traverse Voronoi graph.
-More details on those are covered in the basic Voronoi tutorial. Advanced usage of the library with the configuration of the coordinate
+ <span style="font-family: Courier New,Courier,monospace;">construct_voronoi(points.begin(),
+points.end(), &amp;vd);</span><br>
+ <br>
+The library provides the clear interfaces to associate the user data
+with the
+output geometries and efficiently traverse
+the
+Voronoi graph.
+More details on those topics are covered in the <a
+ href="voronoi_basic_tutorial.htm">basic Voronoi tutorial</a>. Advanced
+usage of the library with the configuration of the coordinate
 types is explained in the <a href="voronoi_advanced_tutorial.htm">advanced
 Voronoi tutorial</a>.
-The library also allows users to implement their own Voronoi diagram /
-Delaunay triangulation construction routines based on the Voronoi builder API.<br>
- <h2>No Third Party Dependencies<br>
- </h2>Yes,
-the library doesn't depend on any 3rd party code. Even more than that
-there is only one dependency on the Boost libraries: boost/cstdint.hpp.
-All the required multiprecision types functionality is implemented as
-part of the library and is not exposed to the user. Considering the
-fact that Voronoi implementation consists of just 7 headers (3 public
-and 4 private) it is easy to compile it within a minute after download.
-On the other hand voronoi.hpp header provides integration routines with
-the Boost.Polygon concepts and models with a drawback of additional
-dependencies. <h2>Extensible for the User Provided Coordinate Types</h2>
-Our implementation is coordinate type agnostic. That means that as soon
-as user provided types satisfy the set of restrictions of the Voronoi builder coordinate type traits
-and implement methods required by the library, no changes are required
-neither to the algorithm, nor to the implementation of the predicates. So it's
+The library allows users to implement their own Voronoi diagram /
+Delaunay triangulation construction routines based on the <a
+ href="voronoi_builder.htm">Voronoi builder API</a>.<br>
+ <h2>No Third Party Dependencies </h2>
+The Voronoi extension of the Boost.Polygon library doesn't depend on
+any 3rd party code
+and contains single dependency on the Boost libraries:
+boost/cstdint.hpp.
+All the required multiprecision types and related functionality are
+encapsulated as
+part of the implementation. The library is fast to compile (3 public
+and 4 private heades), has strong cohesion between its components and
+is clearly modularized from the rest of the Boost.Polygon library, with
+the optional integration through the <a
+ href="../../../boost/polygon/voronoi.hpp">voronoi.hpp</a> header.<br>
+ <h2>Extensible for the User Provided Coordinate Types</h2>
+The implementation is coordinate type agnostic. As long
+as the user provided types satisfy the set of the requirements of the <a
+ href="voronoi_builder.htm">Voronoi builder</a> coordinate type traits,
+no additional
+changes
+are needed
+neither to the algorithm, nor to the implementation of the predicates.
+For example, it's
 possible to
-construct Voronoi diagram for the 256-bit integer input coordinate type
+construct the Voronoi diagram with the 256-bit integer input coordinate
+type
 and
 512-bit output floating-point type without making any changes to the
-internal code.<br>
- <h2>Bright Future<br>
- </h2>
+library.<br>
+ <h2>Future Development </h2>
 Below one may find the list of the main directions for the future
 development of the library.<br>
-High-priority tasks that already have approximate implementation plan
-are the following (some of those may be proposed as future GSoC projects):<br>
+The high-priority tasks that already have the approximate
+implementation plan
+are the following (some of those may be proposed as future GSoC
+projects):<br>
       <ul>
- <li>Implementing Delaunay triangulation data structure.<br>
+ <li>Implement the Delaunay triangulation data structure.<br>
 Note: only data structure needs to be implemented that properly
 processes events provided by the Voronoi builder.</li>
- <li>Implementing medial axis transform data structure.<br>
+ <li>Implement the medial axis transform data structure.<br>
 Note: in general case the Voronoi diagram has completely the same
 geometry
 as the medial axis (they are 100% equal), however for many applications
 user is not interested in the Voronoi edges inside the hole regions.
 The main point
-of this data structure is to automatically filter Voronoi edges that
+of this data structure is to automatically filter the Voronoi edges
+that
 belong to those areas.</li>
- <li>Voronoi
-diagram data structure could be used to find K nearest neighbors of N
+ <li>The Voronoi
+diagram data structure can be used to find the K nearest neighbors of
+the N
 sites in O(N*K*log(K) + N*log(N)) time. The return value would be a
-list of the k nearest neighbors for each site.<br>
-</li>
- <li>Using the r-tree data structure built on top of the
+list of the k nearest neighbors for each site. </li>
+ <li>Use the r-tree data structure built on top of the
 bounding rectangles around the Voronoi cells to answer the nearest
-neighbor queries in log(N) time, where N is the number of the Voronoi cells.<br>
+neighbor queries in log(N) time, where N is the number of the Voronoi
+cells.<br>
 Note: there should be r-tree data structure available soon as part of
 the Boost libraries.</li>
-
- <li>Providing interface to retrieve the convex hull of a set of
-points and segments from the Voronoi builder once the Voronoi diagram is
-constructed in O(N) time.</li>
- <li>Providing serialization utilities for the Voronoi diagram data structure.<br>
- </li>
-
-
+ <li>Expose O(N) interface to retrieve the convex hull of a set
+of
+points and segments from the Voronoi builder, once the Voronoi diagram
+is
+constructed.</li>
+ <li>Provide serialization utilities for the Voronoi diagram
+data structure. </li>
       </ul>
 High-priority tasks to be considered:<br>
       <ul>
- <li>Dropping the restriction on the non-intersecting input
+ <li>Drop the restriction on the non-intersecting input
 geometries.</li>
- <li>Integration of the Voronoi diagram data structure with the BGL (Boost
+ <li>Integrate the Voronoi diagram data structure with the
+BGL (Boost
 Graph Library).</li>
- <li>Support of the other types of distance metrics.</li>
+ <li>Support the other types of distance metrics.</li>
         <li>Construction of the constrained Delaunay triangulation.</li>
         <li>Support of the circular input geometries.</li>
       </ul>
 Based on the community suggestions priorities may be changed.<br>
- <h2>Theoretical Research<br>
- </h2>Voronoi
+ <h2>Theoretical Research </h2>
+The Voronoi library
 was developed as part of the Google Summer of Code 2010. The
-library was actively maintained for the last two years and involved
+library was actively maintained for the last three years and involved
+the
 strong mathematical research in the field of algorithms, data
 structures,
 relative error arithmetic and numerical robustness. Nowadays one can
-often read a scientific article that contains non-practical theoretical
+often read a scientific paper, that contains non-practical
+theoretical
 results or implementation with
 benchmarks nobody else can reproduce. The opposite story is with
-the Boost.Polygon Voronoi library. We provide pure implementation and
+the Voronoi library, that contains complete
+implementation of
+the Voronoi diagram construction algorithm and
 benchmarks one may run on
-his PC. In case community finds it useful we will incrementally
-add more documentation on the theoretical side of our implementation. The
-authors would like to acknowledge the Steven Fortune's article <span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-weight: bold;"></span></span>"<a href="http://dl.acm.org/citation.cfm?id=10549">A Sweepline algorithm
-for Voronoi diagrams</a>", that contains the fundamental ideas of the
-current implementation.<br>
- </td>
+his/her PC. Upon the community request, more documentation on the
+theoretical aspects of the implementation will be published.
+The
+authors would like to acknowledge the Steven Fortune's article <span
+ style="font-family: Arial,Helvetica,sans-serif;"><span
+ style="font-weight: bold;"></span></span>"<a
+ href="http://dl.acm.org/citation.cfm?id=10549">A Sweepline algorithm
+for Voronoi diagrams</a>", that covers fundamental ideas of the
+current implementation. </td>
     </tr>
     <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">&nbsp;</td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
+ <td style="background-color: rgb(238, 238, 238);" nowrap="1">&nbsp;</td>
+ <td
+ style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
+ valign="top" width="100%">
       <table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
+ <colgroup> <col class="docinfo-name"><col
+ class="docinfo-content"> </colgroup> <tbody valign="top">
           <tr>
             <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
+ <td>Copyright © Andrii Sydorchuk 2010-2013.</td>
           </tr>
           <tr class="field">
             <th class="docinfo-name">License:</th>
             <td class="field-body">Distributed under the Boost Software
-License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
+License, Version 1.0. (See accompanying file <tt class="literal"><span
+ class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
+ class="reference" target="_top"
+ href="http://www.boost.org/LICENSE_1_0.txt">
 http://www.boost.org/LICENSE_1_0.txt>)</td>
           </tr>
         </tbody>
@@ -414,6 +475,5 @@
     </tr>
   </tbody>
 </table>
-
-
-</body></html>
\ No newline at end of file
+</body>
+</html>

Deleted: branches/release/libs/polygon/doc/voronoi_predicates.htm
==============================================================================
--- branches/release/libs/polygon/doc/voronoi_predicates.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
+++ (empty file)
@@ -1,251 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
-
-
-
-
-
-
-
- <meta http-equiv="Content-Language" content="en-us">
-
-
- <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Predicates</title>
-
-
-
-
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
-
-
- <meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
-
- <tbody>
- <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="
http://www.boost.org/"> </a></div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
- <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
-With Holes Concept</a></li>
- <li>Polygon 45 Concept</li>
- <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
-With Holes Concept</a></li>
- <li>Polygon Concept</li>
- <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
-Holes Concept</a></li>
- <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
-Concept</a></li>
- <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
-Concept</a></li>
- <li>Polygon Set Concept</li>
- <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
-Extraction 90</a></li>
- <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
-Extraction 45</a></li>
- <li><a href="gtl_connectivity_extraction.htm">Connectivity
-Extraction</a></li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
- <li><a href="voronoi_main.htm">Voronoi Main Page<br>
- </a></li>
- <li>Voronoi Benchmark</li>
- <li>Voronoi Builder<br>
- </li>
- <li>Voronoi Diagram</li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br>
- </li>
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
-Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- <li>Voronoi Basic Tutorial</li>
- <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
-Tutorial</a></li>
- </ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
- </td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
-
-
- <h1>Voronoi Predicates<br>
- </h1>
-
-In mathematical theory predicate is an operator which returns true
-or false (e.g. it may answer a question: "is it sunny today?").<br>
-
-Voronoi predicates contain implementation of a set of the geometric
-predicates used by the Voronoi builder.
-Except of those they also provide
-functors that allow to compute the coordinates of the centers of the
-inscribed
-circles (those correspond to the Voronoi vertices) within the given
-relative error precision range (64 machine epsilons). This means that
-the more mantissa bits
-your floating point type has the better precision of the output
-geometries you'll get. This
-is a very handy functionality as it allows to improve output precision
-simply providing 3rd party IEEE-754 like floating-point types.<br>
-
-
- <h2>Geometric Predicates</h2>
-
-The main issues with the implementation of any complex geometric
-algorithm arise when dealing with the robustness of the geometric
-predicates.
-Usually this
-is also the point where the commercial projects stand strong against
-noncommercial implementations (it's not the case with our
-implementation).
-For the short example let's consider the following code snippet, that
-could
-be used to compute orientation of the three points:<br>
-
- <br>
-
- <span style="font-family: Courier New,Courier,monospace;">double
-cross_product(double dx1, double dy1, double dx2, double dy2) {</span><br style="font-family: Courier New,Courier,monospace;">
-
- <span style="font-family: Courier New,Courier,monospace;">&nbsp;
-return dx1 * dy2 - dx2 * dy1;</span><br style="font-family: Courier New,Courier,monospace;">
-
- <span style="font-family: Courier New,Courier,monospace;">}<br>
- <br>
-int main() {<br>
-&nbsp; int v = 1 &lt;&lt; 30;&nbsp; // 2 ^ 30<br>
-&nbsp; double result = </span><span style="font-family: Courier New,Courier,monospace;">cross_product</span><span style="font-family: Courier New,Courier,monospace;">(v, v - 1, v + 1,
-v);<br>
-&nbsp; printf("%.3f", result);<br>
-&nbsp; return 0;<br>
-}<br>
- <br>
- </span>The
-output of this simple program will be "0.000", while
-the correct one is "1.000". In terms of the orientation test this means
-that points are collinear instead of being CCW oriented. This is one of
-the basic predicates used in any geometric algorithm and taking wrong
-output from it may influence the further algorithm execution:
-corrupting algorithm underlying structures or producing completely
-invalid output. Voronoi uses
-slightly more complex predicates. To insure that they are robust and
-efficient the approach that combines two known techniques (lazy
-arithmetic and multiple
-precision computations) is used.<br>
-
-
- <h2>Lazy Arithmetic</h2>
-
-Lazy
-arithmetic is based on the usage of IEEE-754 floating-point types to
-quickly evaluate the result of the expression. While this approach has
-a good speed
-performance it doesn't produce reliable results all the time (as in the
-example above). The way to solve the issue is apart from computing
-result of the expression compute the relative error of it as well. This
-will
-give us the range of values the evaluated result belongs to and based
-on that we can
-come up with two decisions: 1) output the value; 2) recompute the
-expression using multiprecision type. The way relative errors are
-evaluated is explained in the <a href="voronoi_robust_fpt.htm">Voronoi
-Robust FPT</a> section.<br>
-
-
- <h2>Multiple Precision Arithmetic</h2>
-
-In the vast majority of cases
-the lazy arithmetic approach produces correct result thus further
-processing is not required. In other cases the Voronoi library defined
-or user
-provided multiple precision types are used to produce correct result.
-However even that doesn't solve all the cases. Multiprecision geometric
-predicates could be divided onto two categories:<br>
-
- <br>
-
-1) mathematical transformation of the predicate exists that evaluates
-the exact result:<span style="font-family: Courier New,Courier,monospace;"><br>
- <br>
-Predicate: A/B + C/D ?&lt; 0;<br>
-After math. transform: (A*D + B*C) / (B * D) ?&lt; 0;<br>
- <br>
-Predicate: sqrt(A) ?&lt; 1.2;<br>
-After math. transform: A ?&lt; 1.44;<br>
- <br>
- </span>2) the correct result could be produced only by increasing
-precision of the multiprecision type and with defined relative error
-for the output type:<br>
-
- <br>
-
- <span style="font-family: Courier New,Courier,monospace;">Predicate:
-sqrt(A) + sqrt(B) + sqrt(C) + sqrt(D) + sqrt(E) ?&lt; 1.2;<br>
-Imagine that value of the expression to the left is very close to 1.2;<br>
- </span><br>
-
- <span style="font-family: Courier New,Courier,monospace;">Predicate:
-sin(x) ?&lt; 0.57;<br>
-Relative error of sin function should be known;<br>
- <br>
- </span>The Voronoi of points could be completely
-implemented using predicates of the first type, however the Voronoi of
-segments could not.
-The predicate that doesn't fall into the first category is responsible
-for comparison of the Voronoi circle events. However it appears that
-properly used
-this predicate can't corrupt algorithm internal structures and produces
-output technically the same as produced in case this predicate fell in
-the first category.&nbsp; The main reasons for this are: 1) algorithm
-operates with integer coordinate type of the input geometries; 2)
-closely
-situated Voronoi vertices are considered to be the same in the output
-data structure (this won't influence main targets algorithm is used
-for).<span style="font-family: Courier New,Courier,monospace;"></span><span style="font-family: Courier New,Courier,monospace;"></span><br>
-</td>
- </tr>
- <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">&nbsp;</td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
- <table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Andrii Sydorchuk 2010-2012.</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software
-License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
-http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- </tbody>
-</table>
-
-
-</body></html>
\ No newline at end of file

Deleted: branches/release/libs/polygon/doc/voronoi_robust_fpt.htm
==============================================================================
--- branches/release/libs/polygon/doc/voronoi_robust_fpt.htm 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
+++ (empty file)
@@ -1,212 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
-
-
-
-
-
-
- <meta http-equiv="Content-Language" content="en-us">
-
-
- <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Voronoi Robust FPT</title></head><body>
-<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
-
- <tbody>
- <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
- <div style="padding: 5px;" align="center"> <img src="images/boost.png" border="0" height="86" width="277"><a title="www.boost.org home page" tabindex="2" style="border: medium none ;" href="
http://www.boost.org/"> </a></div>
- <div style="margin: 5px;">
- <h3 class="navbar">Contents</h3>
- <ul>
- <li>Boost.Polygon Main Page</li>
- <li>Design Overview</li>
- <li>Isotropy</li>
- <li>Coordinate Concept</li>
- <li>Interval Concept</li>
- <li>Point Concept</li>
- <li>Segment Concept</li>
-
- <li>Rectangle Concept</li>
- <li>Polygon 90 Concept</li>
- <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
-With Holes Concept</a></li>
- <li>Polygon 45 Concept</li>
- <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
-With Holes Concept</a></li>
- <li>Polygon Concept</li>
- <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
-Holes Concept</a></li>
- <li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
-Concept</a></li>
- <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
-Concept</a></li>
- <li>Polygon Set Concept</li>
- <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
-Extraction 90</a></li>
- <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
-Extraction 45</a></li>
- <li><a href="gtl_connectivity_extraction.htm">Connectivity
-Extraction</a></li>
- <li>Property Merge 90</li>
- <li>Property Merge 45</li>
- <li>Property Merge</li>
- <li><a href="voronoi_main.htm">Voronoi Main Page<br>
- </a></li>
- <li>Voronoi Benchmark</li>
- <li>Voronoi Builder<br>
- </li>
- <li>Voronoi Diagram</li>
- <li>Voronoi Predicates</li>
- <li>Voronoi Robust FPT<br>
- </li>
-
- </ul>
- <h3 class="navbar">Other Resources</h3>
- <ul>
- <li>GTL Boostcon 2009 Paper</li>
- <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
-Presentation</a></li>
- <li>Performance Analysis</li>
- <li>Layout Versus Schematic Tutorial</li>
- <li>Minkowski Sum Tutorial</li>
- <li>Voronoi Basic Tutorial</li>
- <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
-Tutorial</a></li>
- </ul>
- </div>
- <h3 class="navbar">Polygon Sponsor</h3>
- <div style="padding: 5px;" align="center"> <img src="images/intlogo.gif" border="0" height="51" width="127"><a title="www.adobe.com home page" tabindex="2" style="border: medium none ;" href="http://www.adobe.com/"> </a></div>
- </td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%"><!-- End Header --> <br>
-
- <h1>Voronoi Robust FPT</h1>
-The Voronoi
-robust floating-point types are the set of classes and tools that
-allow to estimate relative error of the arithmetic expressions. It is
-assumed that the other Boost libraries may find this unit functionality
-extremely useful, as it can be used to implement robust and efficient
-arithmetic predicates or functors that compute values within known
-relative error.<br>
- <h2>Robust Fpt Type</h2>
-The robust
-fpt type (robust floating-point type)
-- represents the IEEE-754 floating-point type wrapper that also
-contains
-information about the relative error of the underlying value. The
-implementation overloads 5 standard operations: +, -, *, /, sqrt and
-apart from the evaluating value of the expression also computes its
-relative
-error. Let's consider two values A and B; C - rounding error, re(X)
-- relative error of the X expression, then following rules apply:<br>
- <br>
- <span style="font-family: Courier New,Courier,monospace;">re(A+B)
-&lt;= max(re(A), re(B)) + C, if A * B &gt;= 0;</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">re(A-B)
-&lt;= (B * re(A) + A * re(B)) / |A - B| + C, if A * B &lt; 0;</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">re(A*B)
-&lt;= re(A) + re(B) + C;</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">re(A/B)
-&lt;= re(A) + re(B) + C;</span><br style="font-family: Courier New,Courier,monospace;">
- <span style="font-family: Courier New,Courier,monospace;">re(sqrt(A))
-&lt;= re(A) * 0.5 + C;<br>
- <br>
- </span>The constant C is equal to the rounding error,
-which for the above set of arithmetic operations in the IEEE-754
-floating-point implementation should be equal to 1 machine epsilon. <br>
- <h2>Robust Difference Type</h2>
-The robust
-difference type -
-represents expression wrapper that holds the positive and negative
-partial
-sums of the expression in a separate values in order to avoid
-the cancellation errors before evaluating the final difference.
-Following
-arithmetic operators are overloaded for the robust difference type: +,
--, *, / (division operator is not overloaded for the case were both
-arguments have robust difference type).<br>
-Looking at the relative error formulas above one may notice a few facts:<br>
-1) all of the formulas evaluate upper bound of the relative error, the
-actual value could be a lot smaller;<br>
-2) relative error estimate for the expression depends on the order
-operations are evaluated;<br>
-3) relative error of&nbsp; the difference of two positive numbers may
-be
-extremely large in case their values are close to each other (this is
-also known as the cancellation error).<br>
-To explain this a bit, consider the following expression (~ - stands for
-almost equal, &lt;&lt; - many times larger than):<br>
- <br>
- <span style="font-family: Courier New,Courier,monospace;">A - B +
-C, where A ~ B and C &lt;&lt; B;</span><br>
- <br>
-Computing the relative error of this expression from left to right will
-produce extremely large relative error:<br>
- <br>
- <span style="font-family: Courier New,Courier,monospace;">re(A-B+C)
-= max(re(A-B), re(C)) = re(A-B) = (B * re(A) + A * re(B)) / 0 = INF;<br>
- <br>
- </span>While doing this from right to left will keep the relative
-error value small:<br>
- <br>
- <span style="font-family: Courier New,Courier,monospace;">re(A-B+C)
-= re(C-B+A) = max(re(C-B), re(A)) = max(re(A), re(B));<br>
- <br>
- </span>While both estimates are valid (they define upper bound of
-the relative error), of course the second one is preferable.<br>
-Here is the place where robust difference type comes useful. Basically
-it splits expression onto positive and negative partial sums and
-evaluates the
-difference only when the result is required. And did I mention that
-positive and negative values might be of the robust fpt type, that's
-why
-the relative error is always known for the expression result.<br>
- <h2>Robust Sqrt Expression Structure</h2>
-The robust square root expression structure allows to compute the
-result of
-the expression that contains square roots within defined relative
-error.
-As an example, consider the following expression:<br>
- <br>
- <span style="font-family: Courier New,Courier,monospace;">A *
-sqrt(a) - B * sqrt(b), A * B &gt; 0, a &gt;= 0, b &gt;= 0;</span><br>
- <br>
-Computing this expressions directly may apply huge cancellation error,
-however it may be transformed to the next equivalent expression:<br>
- <span style="font-family: Courier New,Courier,monospace;"><br>
-(A * A * a - B * B * b) / (A * sqrt(a) + B * sqrt(b));</span><br>
- <br>
-The numerator and denominator of this expression could be computed
-directly as those won't lead to the cancellation errors.<br>
- <br>
-In general case the robust sqrt expression structure allows to evaluate
-the following set of expressions:<br>
- <span style="font-family: Courier New,Courier,monospace;"><br>
-sum(A[i] * sqrt(a[i]), i = 1 .. N), N &lt;= 4;</span><br>
- <br>
-This appears to be enough for the Boost.Polygon Voronoi.<br>
- </td>
- </tr>
- <tr>
- <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">&nbsp;</td>
- <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
- <table class="docinfo" id="table2" frame="void" rules="none">
- <colgroup> <col class="docinfo-name"><col class="docinfo-content"> </colgroup> <tbody valign="top">
- <tr>
- <th class="docinfo-name">Copyright:</th>
- <td>Copyright © Andrii Sydorchuk 2010-2012</td>
- </tr>
- <tr class="field">
- <th class="docinfo-name">License:</th>
- <td class="field-body">Distributed under the Boost Software
-License, Version 1.0. (See accompanying file <tt class="literal"><span class="pre">LICENSE_1_0.txt</span></tt> or copy at <a class="reference" target="_top" href="http://www.boost.org/LICENSE_1_0.txt">
-http://www.boost.org/LICENSE_1_0.txt>)</td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- </tbody>
-</table>
-
-</body></html>
\ No newline at end of file

Added: branches/release/libs/polygon/example/input_data/primary/primary_072.txt
==============================================================================
--- (empty file)
+++ branches/release/libs/polygon/example/input_data/primary/primary_072.txt 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -0,0 +1,5 @@
+0
+3
+1403829871 74 1403829871 275
+1403829871 275 1403829741 275
+1403829741 275 1403829744 73
\ No newline at end of file

Added: branches/release/libs/polygon/example/output_data/primary/primary_072.png
==============================================================================
Binary file. No diff available.

Modified: branches/release/libs/polygon/test/gtl_boost_unit_test.cpp
==============================================================================
--- branches/release/libs/polygon/test/gtl_boost_unit_test.cpp (original)
+++ branches/release/libs/polygon/test/gtl_boost_unit_test.cpp 2013-04-15 18:27:46 EDT (Mon, 15 Apr 2013)
@@ -3565,7 +3565,7 @@
     }
   }
 
- if (1) {
+ {
     using namespace boost::polygon;
     typedef point_data<int> Point;
     typedef segment_data<int> Dls;
@@ -3604,7 +3604,7 @@
     assert_s(dlss.size() == 11, "intersection2");
   }
   
- if (1) {
+ {
     using namespace boost::polygon;
     std::vector<std::pair<std::size_t, segment_data<int> > > segs;
     segment_data<int> sarray[2];


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk