Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r54070 - in sandbox/gtl/doc: . images
From: lucanus.j.simonson_at_[hidden]
Date: 2009-06-18 18:55:51


Author: ljsimons
Date: 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
New Revision: 54070
URL: http://svn.boost.org/trac/boost/changeset/54070

Log:
updating documentation
Added:
   sandbox/gtl/doc/images/refinements.png (contents, props changed)
Text files modified:
   sandbox/gtl/doc/gtl_connectivity_extraction_45.htm | 7 +
   sandbox/gtl/doc/gtl_connectivity_extraction_90.htm | 7 +
   sandbox/gtl/doc/gtl_coordinate_concept.htm | 4
   sandbox/gtl/doc/gtl_design_overview.htm | 44 +++++++++++--
   sandbox/gtl/doc/gtl_interval_concept.htm | 97 +++++++++++++++++++++++++++++
   sandbox/gtl/doc/gtl_isotropy.htm | 29 ++++++++
   sandbox/gtl/doc/gtl_point_concept.htm | 121 ++++++++++++++++++++++++++++++++++++-
   sandbox/gtl/doc/gtl_polygon_45_concept.htm | 70 +++++++++++++++++++++
   sandbox/gtl/doc/gtl_polygon_45_set_concept.htm | 34 ++++++++--
   sandbox/gtl/doc/gtl_polygon_45_with_holes_concept.htm | 100 ++++++++++++++++++++++++++++++
   sandbox/gtl/doc/gtl_polygon_90_concept.htm | 97 +++++++++++++++++++++++++++++
   sandbox/gtl/doc/gtl_polygon_90_set_concept.htm | 34 ++++++++--
   sandbox/gtl/doc/gtl_polygon_90_with_holes_concept.htm | 127 +++++++++++++++++++++++++++++++++++++++
   sandbox/gtl/doc/gtl_polygon_concept.htm | 74 ++++++++++++++++++++++
   sandbox/gtl/doc/gtl_polygon_set_concept.htm | 30 +++++++--
   sandbox/gtl/doc/gtl_polygon_with_holes_concept.htm | 99 ++++++++++++++++++++++++++++++
   sandbox/gtl/doc/gtl_property_merge.htm | 8 +
   sandbox/gtl/doc/gtl_property_merge_90.htm | 6 +
   sandbox/gtl/doc/gtl_rectangle_concept.htm | 83 +++++++++++++++++++++++++
   sandbox/gtl/doc/index.htm | 30 ++++++--
   20 files changed, 1026 insertions(+), 75 deletions(-)

Modified: sandbox/gtl/doc/gtl_connectivity_extraction_45.htm
==============================================================================
--- sandbox/gtl/doc/gtl_connectivity_extraction_45.htm (original)
+++ sandbox/gtl/doc/gtl_connectivity_extraction_45.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,7 +22,6 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -34,6 +33,7 @@
                         <li>Polygon 45 Set Concept</li>
                         <li>Polygon Set Concept</li>
                         <li>Connectivity Extraction 90</li>
+ <li>Connectivity Extraction 45</li>
                         <li>Property Merge 90</li>
                         <li>Property Merge</li>
         </ul>
@@ -72,7 +72,10 @@
 support more generic graph concepts is deferred to future work.<p>The following
 is the declaration of the connectivity extraction algorithm.<p>
 <font face="Courier New">template &lt;typename coordinate_type&gt;<br>
-class connectivity_extraction_45;</font><h2>Member Functions</h2>
+class connectivity_extraction_45;</font><p>
+Example code connectivity_extraction_usage.cpp
+ demonstrates using the connectivity extraction algorithm to build a
+connectivity graph on geometry.<h2>Member Functions</h2>
 <table border="1" width="100%" id="table1">
         <tr>
                 <td width="586"><b><font face="Courier New">connectivity_extraction_45</font></b><font face="Courier New">()</font></td>

Modified: sandbox/gtl/doc/gtl_connectivity_extraction_90.htm
==============================================================================
--- sandbox/gtl/doc/gtl_connectivity_extraction_90.htm (original)
+++ sandbox/gtl/doc/gtl_connectivity_extraction_90.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,7 +22,6 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -33,6 +32,7 @@
                         <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>Property Merge 90</li>
                         <li>Property Merge</li>
@@ -72,7 +72,10 @@
 support more generic graph concepts is deferred to future work.<p>The following
 is the declaration of the connectivity extraction algorithm.<p>
 <font face="Courier New">template &lt;typename coordinate_type&gt;<br>
-class connectivity_extraction_90;</font><h2>Member Functions</h2>
+class connectivity_extraction_90;</font><p>
+Example code connectivity_extraction_usage.cpp
+ demonstrates using the connectivity extraction algorithm to build a
+connectivity graph on geometry.<h2>Member Functions</h2>
 <table border="1" width="100%" id="table1">
         <tr>
                 <td width="586"><b><font face="Courier New">connectivity_extraction_90</font></b><font face="Courier New">()</font></td>

Modified: sandbox/gtl/doc/gtl_coordinate_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_coordinate_concept.htm (original)
+++ sandbox/gtl/doc/gtl_coordinate_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -19,9 +19,9 @@
             <li><a href="gtl_design_overview.htm">Polygon
                         Library Design Overview</a></li>
             <li>Isotropy</li>
+ <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -59,7 +59,7 @@
 </p><h1>Coordinate Concept</h1>
 
 <p>
-The coordinate concept type identifier is <font face="Courier New">
+The coordinate concept tag is <font face="Courier New">
 coordinate_concept</font><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

Modified: sandbox/gtl/doc/gtl_design_overview.htm
==============================================================================
--- sandbox/gtl/doc/gtl_design_overview.htm (original)
+++ sandbox/gtl/doc/gtl_design_overview.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -16,13 +16,12 @@
         <h3 class="navbar">Contents</h3>
         <ul>
             <li>Polygon Library Main Page</li>
+ <li>Polygon Library Design Overview</li>
             <li>Isotropy</li>
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
             <li>
                         <a href="gtl_point_concept.htm">Point Concept</a></li>
- <li>
- Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -62,14 +61,14 @@
 <p>
 <p>The Polygon library uses C++-Concepts inspired template programming to
 provide generic library functions overloaded on concept type.&nbsp; There are
-currently fourteen concepts in the Polygon library type system.&nbsp; A concept
+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 listed with
 the names they are given in the library code and abbreviations used for them in
 this document in the table below.</p>
 
 
-</body><img border="0" src="images/concept_table.png" width="322" height="453"><p>
+</body><img border="0" src="images/refinements.png" width="554" height="474"><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;
@@ -85,14 +84,41 @@
 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.</p>
+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 'gtl::assign(gtl::rectangle_data&lt;int&gt;&amp;,
+gtl::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; When a data
-type has been mapped to a concept through traits it also needs to be registered
-as that conceptual type with the library.&nbsp; This is accomplished by
+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>Traits for
@@ -105,7 +131,7 @@
 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 cost reference to an object that models
+to be passed into any API that expects a const reference to an object that models
 polygon.&nbsp; <tr>
 <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
     &nbsp;</td>

Modified: sandbox/gtl/doc/gtl_interval_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_interval_concept.htm (original)
+++ sandbox/gtl/doc/gtl_interval_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -20,8 +20,8 @@
                         Library Design Overview</a></li>
             <li>Isotropy</li>
             <li>Coordinate Concept</li>
+ <li>Interval Concept</li>
             <li>Point Concept</li>
- <li>Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -59,7 +59,7 @@
 </p><h1>Interval Concept</h1>
 
 <p>
-<p>The interval concept type identifier is <font face="Courier New">
+<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
@@ -399,6 +399,99 @@
                 coordinate value was not contained within a to begin with.</td>
         </tr>
 </table>
+ <h1>Interval Data</h1>
+
+<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 border="1" width="100%" id="table2">
+ <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* 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 T2&gt;<b>&nbsp;
+ <br> </b>interval_data&amp; <b>operator=</b>(const T2&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">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 interval.</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 interval.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template &lt;typename T2&gt;<b>
+ <br> </b>bool<b>
+ operator&lt;</b>(const T2&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">template &lt;typename T2&gt;<b>
+ <br> </b>bool<b>
+ operator&lt;=</b>(const T2&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">template &lt;typename T2&gt;<b>
+ <br> </b>bool<b>
+ operator&gt;</b>(const T2&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">template &lt;typename T2&gt;<b>
+ <br> </b>bool<b>
+ operator&gt;=</b>(const T2&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 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>
+ </table>
         <tr>
 <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
     &nbsp;</td>

Modified: sandbox/gtl/doc/gtl_isotropy.htm
==============================================================================
--- sandbox/gtl/doc/gtl_isotropy.htm (original)
+++ sandbox/gtl/doc/gtl_isotropy.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -18,10 +18,10 @@
             <li>Polygon Library Main Page</li>
             <li><a href="gtl_design_overview.htm">Polygon
                         Library Design Overview</a></li>
+ <li>Isotropy</li>
             <li>Coordinate Concept</li>
                         <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -73,7 +73,7 @@
 <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 direction or
+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 in GTL to represent program
 data that describes orientations and directions.&nbsp; These data types are:</p>
@@ -97,12 +97,35 @@
 <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 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:</p>
+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 &quot;right
+hand rule&quot; 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;

Modified: sandbox/gtl/doc/gtl_point_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_point_concept.htm (original)
+++ sandbox/gtl/doc/gtl_point_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -21,7 +21,7 @@
             <li>Isotropy</li>
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
- <li>Point 3D Concept</li>
+ <li>Point Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -60,7 +60,7 @@
 
 <p>
 <p>
-The point concept type identifier is <font face="Courier New">
+The point concept tag is <font face="Courier New">
 point_concept</font><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 CPoint is registered as a model of
@@ -101,7 +101,10 @@
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return T(x_value, y_value);
 <br>
 &nbsp;&nbsp;&nbsp;&nbsp; }<br>
-};<h2>Functions</h2>
+};<p>
+Example code custom_point.cpp demonstrates
+how to map a
+ user defined point class to the library point_concept<h2>Functions</h2>
 <table border="1" width="100%" id="table1">
         <tr>
                 <td width="586"><font face="Courier New">template &lt;typename T&gt;<br>
@@ -255,7 +258,117 @@
                 models point.</td>
         </tr>
 </table>
-<p>&nbsp;<tr>
+<h1>Point Data</h1>
+
+<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 border="1" width="100%" id="table2">
+ <tr>
+ <td width="586"><b><font face="Courier New">geometry_type</font></b></td>
+ <td><font face="Times New Roman">point_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>point_data</b>()</font></td>
+ <td><font face="Times New Roman">Default constructs the two coordinate
+ values of the </font>point<font face="Times New Roman">.</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New"><b>point_data</b>(T x, T y)</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>point_data</b>(const point_data*
+ that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></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 T2&gt;<b>&nbsp;
+ <br> </b>point_data&amp; <b>operator=</b>(const T2&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">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 point.</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 point.</td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">template &lt;typename T2&gt;<b>
+ <br> </b>bool<b>
+ operator&lt;</b>(const T2&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">template &lt;typename T2&gt;<b>
+ <br> </b>bool<b>
+ operator&lt;=</b>(const T2&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">template &lt;typename T2&gt;<b>
+ <br> </b>bool<b>
+ operator&gt;</b>(const T2&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">template &lt;typename T2&gt;<b>
+ <br> </b>bool<b>
+ operator&gt;=</b>(const T2&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>
+ </table>
+ <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%">

Modified: sandbox/gtl/doc/gtl_polygon_45_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_polygon_45_concept.htm (original)
+++ sandbox/gtl/doc/gtl_polygon_45_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,10 +22,10 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D 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>
@@ -59,7 +59,7 @@
 </p><h1>Polygon 45 Concept</h1>
 
 <p>
-<p>The polygon_45 concept type identifier is <font face="Courier New">
+<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
@@ -250,6 +250,72 @@
                 object that models polygon_45.</td>
         </tr>
         </table>
+ <h1>Polygon 45 Data</h1>
+
+<p>
+<p>The library provides a model of polygon 45 concept declared
+<font face="Courier New">
+template&lt;typename T&gt; poolygon_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 border="1" width="100%" id="table2">
+ <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
+ poolygon_45_data* 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
+ poolygon_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>
+</table>
         <tr>
 <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
     &nbsp;</td>

Modified: sandbox/gtl/doc/gtl_polygon_45_set_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_polygon_45_set_concept.htm (original)
+++ sandbox/gtl/doc/gtl_polygon_45_set_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,7 +22,6 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -31,6 +30,7 @@
                         <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>
@@ -59,10 +59,10 @@
 </p><h1>Polygon 45 Set Concept</h1>
 
 <p>
-<p>The polygon 45 set concept type identifier is <font face="Courier New">
+<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 a zero or more
+<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
@@ -73,12 +73,25 @@
 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>Mapping type traits for a user defined
-polygon 45 set object is an advanced topic and covered by example code.&nbsp;
-Users are recommended to use std::vector and std::list of user defined polygons
+algorithm would do, but obtained more efficiently.</font><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>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>
 <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>
 <table border="1" width="100%" id="table5">
         <tr>
                 <td width="586"><font face="Courier New">template &lt;typename T1, typename
@@ -457,7 +470,11 @@
 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.</td>
+ 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 the
+ duplicate of the first, and the number of points is equal to the number
+ of edges plus 1.</td>
         </tr>
         <tr>
                 <td width="586"><font face="Courier New">
@@ -465,7 +482,8 @@
 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.</td>
+ appends them to the container.&nbsp; Polygons will have holes fractured
+ out to the outer boundary along the positive y direction.</td>
         </tr>
         <tr>
                 <td width="586"><font face="Courier New">

Modified: sandbox/gtl/doc/gtl_polygon_45_with_holes_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_polygon_45_with_holes_concept.htm (original)
+++ sandbox/gtl/doc/gtl_polygon_45_with_holes_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,11 +22,11 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D 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>
@@ -59,7 +59,7 @@
 </p><h1>Polygon 45 With Holes Concept</h1>
 
 <p>
-<p>The polygon_45 concept type identifier is <font face="Courier New">
+<p>The polygon_45 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
@@ -259,6 +259,102 @@
                 object that models polygon_45_with_holes.</td>
         </tr>
         </table>
+ <h1>Polygon 45 With Holes Data</h1>
+
+<p>
+<p>The library provides a model of polygon 45 with holes concept declared
+<font face="Courier New">
+template&lt;typename T&gt; poolygon_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 border="1" width="100%" id="table2">
+ <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
+ poolygon_45_with_holes_data* that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">poolygon_45_with_holes_data&amp; <b>
+ <br>operator=</b>(const poolygon_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>
+</table>
         <tr>
 <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
     &nbsp;</td>

Modified: sandbox/gtl/doc/gtl_polygon_90_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_polygon_90_concept.htm (original)
+++ sandbox/gtl/doc/gtl_polygon_90_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,8 +22,8 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D 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>
@@ -59,7 +59,7 @@
 </p><h1>Polygon 90 Concept</h1>
 
 <p>
-<p>The polygon_90 concept type identifier is <font face="Courier New">
+<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
@@ -259,6 +259,99 @@
                 object that models polygon_90.</td>
         </tr>
         </table>
+ <h1>Polygon 90 Data</h1>
+
+<p>
+<p>The library provides a model of polygon 90 concept declared
+<font face="Courier New">
+template&lt;typename T&gt; poolygon_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 border="1" width="100%" id="table2">
+ <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
+ poolygon_90_data* 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
+ poolygon_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>
+</table>
         <tr>
 <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
     &nbsp;</td>

Modified: sandbox/gtl/doc/gtl_polygon_90_set_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_polygon_90_set_concept.htm (original)
+++ sandbox/gtl/doc/gtl_polygon_90_set_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,7 +22,6 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -30,6 +29,7 @@
                         <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>
@@ -59,17 +59,29 @@
 </p><h1>Polygon 90 Set Concept</h1>
 
 <p>
-<p>The polygon 90 set concept type identifier is <font face="Courier New">
+<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 a zero or more
-Manhattan geometry regions.</font><p>Mapping type traits for a user defined
-polygon 90 set object is an advanced topic and covered by example code.&nbsp;
-Users are recommended to use std::vector and std::list of user defined polygons
+<font face="Times New Roman">The semantic of a polygon 90 set is zero or more
+Manhattan geometry regions.</font><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>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>
 <table border="1" width="100%" id="table3">
         <tr>
                 <td width="586"><font face="Courier New">template &lt;typename T1, typename
@@ -588,7 +600,11 @@
 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.</td>
+ 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.</td>
         </tr>
         <tr>
                 <td width="586"><font face="Courier New">
@@ -596,7 +612,9 @@
 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.</td>
+ 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.</td>
         </tr>
         <tr>
                 <td width="586"><font face="Courier New">

Modified: sandbox/gtl/doc/gtl_polygon_90_with_holes_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_polygon_90_with_holes_concept.htm (original)
+++ sandbox/gtl/doc/gtl_polygon_90_with_holes_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,9 +22,9 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D 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>
@@ -59,7 +59,7 @@
 </p><h1>Polygon 90 With Holes Concept</h1>
 
 <p>
-<p>The polygon_90 concept type identifier is <font face="Courier New">
+<p>The polygon_90 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
@@ -283,6 +283,129 @@
                 object that models polygon_90_with_holes.</td>
         </tr>
         </table>
+ <h1>Polygon 90 With Holes Data</h1>
+
+<p>
+<p>The library provides a model of polygon 90 with holes concept declared
+<font face="Courier New">
+template&lt;typename T&gt; poolygon_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 border="1" width="100%" id="table2">
+ <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
+ poolygon_90_with_holes_data* that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">poolygon_90_with_holes_data&amp; <b>
+ <br>operator=</b>(const poolygon_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>
+</table>
         <tr>
 <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
     &nbsp;</td>

Modified: sandbox/gtl/doc/gtl_polygon_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_polygon_concept.htm (original)
+++ sandbox/gtl/doc/gtl_polygon_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,12 +22,12 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D 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>
@@ -59,7 +59,7 @@
 </p><h1>Polygon Concept</h1>
 
 <p>
-<p>The polygon concept type identifier is <font face="Courier New">
+<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
@@ -125,6 +125,9 @@
 &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>
 <h2>Functions</h2>
 <table border="1" width="100%" id="table1">
         <tr>
@@ -248,6 +251,73 @@
                 object that models polygon.</td>
         </tr>
         </table>
+ <h1>Polygon Data</h1>
+
+<p>
+<p>The library provides a model of polygon concept declared
+<font face="Courier New">
+template&lt;typename T&gt; poolygon_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 border="1" width="100%" id="table2">
+ <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
+ poolygon_data* 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
+ poolygon_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>
+</table>
         <tr>
 <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
     &nbsp;</td>

Modified: sandbox/gtl/doc/gtl_polygon_set_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_polygon_set_concept.htm (original)
+++ sandbox/gtl/doc/gtl_polygon_set_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,7 +22,6 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -32,6 +31,7 @@
                         <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>Property Merge 90</li>
@@ -59,10 +59,10 @@
 </p><h1>Polygon Set Concept</h1>
 
 <p>
-<p>The polygon set concept type identifier is <font face="Courier New">
+<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 a zero or more
+<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
@@ -74,12 +74,18 @@
 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>Mapping type traits for a user defined
-polygon set object is an advanced topic and covered by example code.&nbsp;
-Users are recommended to use std::vector and std::list of user defined polygons
+non-integer intersections will be handled differently.</font><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>
 <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>
 <table border="1" width="100%" id="table5">
         <tr>
                 <td width="586"><font face="Courier New">template &lt;typename T1, typename
@@ -268,6 +274,9 @@
 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 border="1" width="100%" id="table7">
         <tr>
@@ -339,7 +348,14 @@
 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.</td>
+ 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.</td>
         </tr>
         <tr>
                 <td width="586">

Modified: sandbox/gtl/doc/gtl_polygon_with_holes_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_polygon_with_holes_concept.htm (original)
+++ sandbox/gtl/doc/gtl_polygon_with_holes_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,13 +22,13 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D 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>
@@ -59,7 +59,7 @@
 </p><h1>Polygon With Holes Concept</h1>
 
 <p>
-<p>The polygon concept type identifier is <font face="Courier New">
+<p>The polygon concept tag is <font face="Courier New">
 polygon_with_holes_concept</font></p>
 <p>
 To register a user defined type as a model of
@@ -254,6 +254,101 @@
                 object that models polygon_with_holes.</td>
         </tr>
         </table>
+ <h1>Polygon With Holes Data</h1>
+
+<p>
+<p>The library provides a model of polygon with holes concept declared
+<font face="Courier New">
+template&lt;typename T&gt; poolygon_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 border="1" width="100%" id="table2">
+ <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
+ poolygon_with_holes_data* that)</font></td>
+ <td><font face="Times New Roman">Copy construct</font></td>
+ </tr>
+ <tr>
+ <td width="586"><font face="Courier New">poolygon_with_holes_data&amp; <b>
+ <br>operator=</b>(const poolygon_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>
+</table>
         <tr>
 <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
     &nbsp;</td>

Modified: sandbox/gtl/doc/gtl_property_merge.htm
==============================================================================
--- sandbox/gtl/doc/gtl_property_merge.htm (original)
+++ sandbox/gtl/doc/gtl_property_merge.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,7 +22,6 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -36,6 +35,7 @@
                         <li>Connectivity Extraction 90</li>
                         <li>Connectivity Extraction 45</li>
                         <li>Property Merge 90</li>
+ <li>Property Merge</li>
         </ul>
         <h3 class="navbar">Other Resources</h3>
         <ul>
@@ -70,9 +70,11 @@
 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>&nbsp;std::map&lt;std::set&lt;property_type&gt;, polygon_set_data&lt;coordiante_type&gt;
+are:<p>std::map&lt;std::set&lt;property_type&gt;, polygon_set_data&lt;coordiante_type&gt;
 &gt;<br>
-std::map&lt;std::vector&lt;property_type&gt;, polygon_set_data&lt;coordiante_type&gt; &gt;<h2>Member Functions</h2>
+std::map&lt;std::vector&lt;property_type&gt;, polygon_set_data&lt;coordiante_type&gt; &gt;<p>
+Example code property_merge_usage.cpp
+ demonstrates using the n-layer map-overlay algorithm on polygon data.<h2>Member Functions</h2>
 <table border="1" width="100%" id="table1">
         <tr>
                 <td width="586"><b><font face="Courier New">property_merge</font></b><font face="Courier New">()</font></td>

Modified: sandbox/gtl/doc/gtl_property_merge_90.htm
==============================================================================
--- sandbox/gtl/doc/gtl_property_merge_90.htm (original)
+++ sandbox/gtl/doc/gtl_property_merge_90.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,7 +22,6 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -35,6 +34,7 @@
                         <li>Polygon Set Concept</li>
                         <li>Connectivity Extraction 90</li>
                         <li>Connectivity Extraction 45</li>
+ <li>Property Merge 90</li>
                         <li>Property Merge</li>
         </ul>
         <h3 class="navbar">Other Resources</h3>
@@ -72,7 +72,9 @@
 Two suitable containers for storing the result of a property merge operation
 are:<p>&nbsp;std::map&lt;std::set&lt;property_type&gt;, polygon_90_set_data&lt;coordiante_type&gt;
 &gt;<br>
-std::map&lt;std::vector&lt;property_type&gt;, polygon_90_set_data&lt;coordiante_type&gt; &gt;<h2>Member Functions</h2>
+std::map&lt;std::vector&lt;property_type&gt;, polygon_90_set_data&lt;coordiante_type&gt; &gt;<p>
+Example code property_merge_usage.cpp
+ demonstrates using the n-layer map-overlay algorithm on polygon 90 data.<h2>Member Functions</h2>
 <table border="1" width="100%" id="table1">
         <tr>
                 <td width="586"><b><font face="Courier New">property_merge_90</font></b><font face="Courier New">()</font></td>

Modified: sandbox/gtl/doc/gtl_rectangle_concept.htm
==============================================================================
--- sandbox/gtl/doc/gtl_rectangle_concept.htm (original)
+++ sandbox/gtl/doc/gtl_rectangle_concept.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -22,7 +22,7 @@
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
                         <li>Point Concept</li>
- <li>Point 3D Concept</li>
+ <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
                         <li>Polygon 45 Concept</li>
@@ -59,7 +59,7 @@
 </p><h1>Rectangle Concept</h1>
 
 <p>
-<p>The rectangle concept type identifier is <font face="Courier New">
+<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
@@ -641,6 +641,85 @@
                 returns true.</td>
         </tr>
 </table>
+ <h1>Rectangle Data</h1>
+
+<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 border="1" width="100%" id="table2">
+ <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* 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& <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>
+ </table>
         <tr>
 <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
     &nbsp;</td>

Added: sandbox/gtl/doc/images/refinements.png
==============================================================================
Binary file. No diff available.

Modified: sandbox/gtl/doc/index.htm
==============================================================================
--- sandbox/gtl/doc/index.htm (original)
+++ sandbox/gtl/doc/index.htm 2009-06-18 18:55:48 EDT (Thu, 18 Jun 2009)
@@ -15,15 +15,14 @@
     <div style="margin: 5px;">
         <h3 class="navbar">Contents</h3>
         <ul>
- <li><a href="gtl_design_overview.htm">Polygon
+ <li>Polygon Library Main Page</li>
+ <li><a href="gtl_design_overview.htm">Polygon
                         Library Design Overview</a></li>
                         <li>Isotropy</li>
             <li>Coordinate Concept</li>
             <li>Interval Concept</li>
             <li>
                         <a href="gtl_point_concept.htm">Point Concept</a></li>
- <li>
- Point 3D Concept</li>
                         <li>Rectangle Concept</li>
                         <li>Polygon 90 Concept</li>
                         <li>Polygon 90 With Holes Concept</li>
@@ -64,12 +63,25 @@
 <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 and map-overlay.&nbsp;
-These algorithms are of significant interest in GIS (Geospatial Information
+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 al other fields of CAD, and many more application
-areas.</p>
-<p>The design philosophy behind the Polygon Library was to create an API for
-invoking these library algorithms on user geometry data types that is maximally
+areas, and providing them is the primary focus of this library.&nbsp; The
+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; Specifically, 3d and
+non-Cartesian/non-planar geometry is outside of the scope of the polygon
+library.</p><img border="0" src="images/hand.png" width="837" height="277"><p>
+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. </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
@@ -119,7 +131,7 @@
 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;
-Functions are named for what they do, or overloads of C++ operators that make it
+Functions are named for what they do, or are overloads of C++ operators that make it
 easy to infer from reading the code what to expect from it.&nbsp; Following the
 principle of least astonishment, the inferred behavior should generally match
 the actual behavior.&nbsp; Conventions such as argument ordering (output


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