geos_390_docs/classgeos_1_1operation_1_1o...

578 lines
33 KiB
HTML

<!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">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>GEOS: geos::operation::overlay::PolygonBuilder Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">GEOS
&#160;<span id="projectnumber">3.9.1dev</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespacegeos.html">geos</a></li><li class="navelem"><a class="el" href="namespacegeos_1_1operation.html">operation</a></li><li class="navelem"><a class="el" href="namespacegeos_1_1operation_1_1overlay.html">overlay</a></li><li class="navelem"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html">PolygonBuilder</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">geos::operation::overlay::PolygonBuilder Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Forms Polygon out of a graph of <a class="el" href="classgeos_1_1geomgraph_1_1DirectedEdge.html" title="A directed EdgeEnd. ">geomgraph::DirectedEdge</a>.
<a href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="PolygonBuilder_8h_source.html">PolygonBuilder.h</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for geos::operation::overlay::PolygonBuilder:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder__coll__graph.svg" width="480" height="255"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structgeos_1_1operation_1_1overlay_1_1PolygonBuilder_1_1FastPIPRing.html">FastPIPRing</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:afb95d6a4b92ce3cc8a82d4b92e909c30"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#afb95d6a4b92ce3cc8a82d4b92e909c30">PolygonBuilder</a> (const <a class="el" href="classgeos_1_1geom_1_1GeometryFactory.html">geom::GeometryFactory</a> *newGeometryFactory)</td></tr>
<tr class="separator:afb95d6a4b92ce3cc8a82d4b92e909c30"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a64497ea7731d813eb767bd11b3709010"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#a64497ea7731d813eb767bd11b3709010">~PolygonBuilder</a> ()</td></tr>
<tr class="separator:a64497ea7731d813eb767bd11b3709010"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff7ead5417ef41d9f4118ff085ee5368"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#aff7ead5417ef41d9f4118ff085ee5368">add</a> (<a class="el" href="classgeos_1_1geomgraph_1_1PlanarGraph.html">geomgraph::PlanarGraph</a> *graph)</td></tr>
<tr class="separator:aff7ead5417ef41d9f4118ff085ee5368"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0c1139651607a3bfe021080003b2186"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#af0c1139651607a3bfe021080003b2186">add</a> (const std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1DirectedEdge.html">geomgraph::DirectedEdge</a> * &gt; *dirEdges, const std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1Node.html">geomgraph::Node</a> * &gt; *nodes)</td></tr>
<tr class="separator:af0c1139651607a3bfe021080003b2186"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a524207f05f62993f493771367298c1ac"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classgeos_1_1geom_1_1Geometry.html">geom::Geometry</a> * &gt; *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#a524207f05f62993f493771367298c1ac">getPolygons</a> ()</td></tr>
<tr class="separator:a524207f05f62993f493771367298c1ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:af0653553def5747118506fdaecfa8833"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#af0653553def5747118506fdaecfa8833">buildMaximalEdgeRings</a> (const std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1DirectedEdge.html">geomgraph::DirectedEdge</a> * &gt; *dirEdges, std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MaximalEdgeRing.html">MaximalEdgeRing</a> * &gt; &amp;maxEdgeRings)</td></tr>
<tr class="separator:af0653553def5747118506fdaecfa8833"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acec9cfed082ebdab3c90d0629bdddecc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#acec9cfed082ebdab3c90d0629bdddecc">buildMinimalEdgeRings</a> (std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MaximalEdgeRing.html">MaximalEdgeRing</a> * &gt; &amp;maxEdgeRings, std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;newShellList, std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;freeHoleList, std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MaximalEdgeRing.html">MaximalEdgeRing</a> * &gt; &amp;edgeRings)</td></tr>
<tr class="separator:acec9cfed082ebdab3c90d0629bdddecc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26aa1036e6177a261f73047489b1f472"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#a26aa1036e6177a261f73047489b1f472">findShell</a> (std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MinimalEdgeRing.html">MinimalEdgeRing</a> * &gt; *minEdgeRings)</td></tr>
<tr class="separator:a26aa1036e6177a261f73047489b1f472"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade7a64c617ce83ccff38508f28841a3e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#ade7a64c617ce83ccff38508f28841a3e">placePolygonHoles</a> (<a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> *shell, std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MinimalEdgeRing.html">MinimalEdgeRing</a> * &gt; *minEdgeRings)</td></tr>
<tr class="separator:ade7a64c617ce83ccff38508f28841a3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9757a692a7bca3754e72ab00958ceeb1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#a9757a692a7bca3754e72ab00958ceeb1">sortShellsAndHoles</a> (std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MaximalEdgeRing.html">MaximalEdgeRing</a> * &gt; &amp;edgeRings, std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;newShellList, std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;freeHoleList)</td></tr>
<tr class="separator:a9757a692a7bca3754e72ab00958ceeb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb67d05211a757aa6d0126c7ff1d9619"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#abb67d05211a757aa6d0126c7ff1d9619">placeFreeHoles</a> (std::vector&lt; <a class="el" href="structgeos_1_1operation_1_1overlay_1_1PolygonBuilder_1_1FastPIPRing.html">FastPIPRing</a> &gt; &amp;newShellList, std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;freeHoleList)</td></tr>
<tr class="memdesc:abb67d05211a757aa6d0126c7ff1d9619"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method determines finds a containing shell for all holes which have not yet been assigned to a shell. <a href="#abb67d05211a757aa6d0126c7ff1d9619">More...</a><br /></td></tr>
<tr class="separator:abb67d05211a757aa6d0126c7ff1d9619"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e06048dfdb3cc355946493f8915d82b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#a8e06048dfdb3cc355946493f8915d82b">findEdgeRingContaining</a> (<a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> *testEr, std::vector&lt; <a class="el" href="structgeos_1_1operation_1_1overlay_1_1PolygonBuilder_1_1FastPIPRing.html">FastPIPRing</a> &gt; &amp;newShellList)</td></tr>
<tr class="memdesc:a8e06048dfdb3cc355946493f8915d82b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find the innermost enclosing shell <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> containing the argument <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a>, if any. <a href="#a8e06048dfdb3cc355946493f8915d82b">More...</a><br /></td></tr>
<tr class="separator:a8e06048dfdb3cc355946493f8915d82b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a25f6a780df00a638f6c790893620ab00"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classgeos_1_1geom_1_1Geometry.html">geom::Geometry</a> * &gt; *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#a25f6a780df00a638f6c790893620ab00">computePolygons</a> (std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;newShellList)</td></tr>
<tr class="separator:a25f6a780df00a638f6c790893620ab00"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:a915d3cef37b0c75ab9bdd809cac6d865"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classgeos_1_1geom_1_1GeometryFactory.html">geom::GeometryFactory</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#a915d3cef37b0c75ab9bdd809cac6d865">geometryFactory</a></td></tr>
<tr class="separator:a915d3cef37b0c75ab9bdd809cac6d865"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1db3633c6ac3ac1aac4613c7d332ca72"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlay_1_1PolygonBuilder.html#a1db3633c6ac3ac1aac4613c7d332ca72">shellList</a></td></tr>
<tr class="separator:a1db3633c6ac3ac1aac4613c7d332ca72"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Forms Polygon out of a graph of <a class="el" href="classgeos_1_1geomgraph_1_1DirectedEdge.html" title="A directed EdgeEnd. ">geomgraph::DirectedEdge</a>. </p>
<p>The edges to use are marked as being in the result Area. </p>
<p>Definition at line <a class="el" href="PolygonBuilder_8h_source.html#l00062">62</a> of file <a class="el" href="PolygonBuilder_8h_source.html">PolygonBuilder.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="afb95d6a4b92ce3cc8a82d4b92e909c30"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">geos::operation::overlay::PolygonBuilder::PolygonBuilder </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1GeometryFactory.html">geom::GeometryFactory</a> *&#160;</td>
<td class="paramname"><em>newGeometryFactory</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a64497ea7731d813eb767bd11b3709010"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">geos::operation::overlay::PolygonBuilder::~PolygonBuilder </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="aff7ead5417ef41d9f4118ff085ee5368"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void geos::operation::overlay::PolygonBuilder::add </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classgeos_1_1geomgraph_1_1PlanarGraph.html">geomgraph::PlanarGraph</a> *&#160;</td>
<td class="paramname"><em>graph</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Add a complete graph. The graph is assumed to contain one or more polygons, possibly with holes. </p>
</div>
</div>
<a class="anchor" id="af0c1139651607a3bfe021080003b2186"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void geos::operation::overlay::PolygonBuilder::add </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1DirectedEdge.html">geomgraph::DirectedEdge</a> * &gt; *&#160;</td>
<td class="paramname"><em>dirEdges</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1Node.html">geomgraph::Node</a> * &gt; *&#160;</td>
<td class="paramname"><em>nodes</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Add a set of edges and nodes, which form a graph. The graph is assumed to contain one or more polygons, possibly with holes. </p>
</div>
</div>
<a class="anchor" id="af0653553def5747118506fdaecfa8833"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void geos::operation::overlay::PolygonBuilder::buildMaximalEdgeRings </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1DirectedEdge.html">geomgraph::DirectedEdge</a> * &gt; *&#160;</td>
<td class="paramname"><em>dirEdges</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MaximalEdgeRing.html">MaximalEdgeRing</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>maxEdgeRings</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>For all DirectedEdges in result, form them into MaximalEdgeRings</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">maxEdgeRings</td><td>Formed MaximalEdgeRings will be pushed to this vector. Ownership of the elements is transferred to caller. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="acec9cfed082ebdab3c90d0629bdddecc"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void geos::operation::overlay::PolygonBuilder::buildMinimalEdgeRings </td>
<td>(</td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MaximalEdgeRing.html">MaximalEdgeRing</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>maxEdgeRings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>newShellList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>freeHoleList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MaximalEdgeRing.html">MaximalEdgeRing</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>edgeRings</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a25f6a780df00a638f6c790893620ab00"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="classgeos_1_1geom_1_1Geometry.html">geom::Geometry</a>*&gt;* geos::operation::overlay::PolygonBuilder::computePolygons </td>
<td>(</td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>newShellList</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a8e06048dfdb3cc355946493f8915d82b"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a>* geos::operation::overlay::PolygonBuilder::findEdgeRingContaining </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> *&#160;</td>
<td class="paramname"><em>testEr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="structgeos_1_1operation_1_1overlay_1_1PolygonBuilder_1_1FastPIPRing.html">FastPIPRing</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>newShellList</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Find the innermost enclosing shell <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> containing the argument <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a>, if any. </p>
<p>The innermost enclosing ring is the <em>smallest</em> enclosing ring. The algorithm used depends on the fact that:</p>
<p>ring A contains ring B iff envelope(ring A) contains envelope(ring B)</p>
<p>This routine is only safe to use if the chosen point of the hole is known to be properly contained in a shell (which is guaranteed to be the case if the hole does not touch its shell)</p>
<dl class="section return"><dt>Returns</dt><dd>containing <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a>, if there is one </dd>
<dd>
NULL if no containing <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> is found </dd></dl>
</div>
</div>
<a class="anchor" id="a26aa1036e6177a261f73047489b1f472"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a>* geos::operation::overlay::PolygonBuilder::findShell </td>
<td>(</td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MinimalEdgeRing.html">MinimalEdgeRing</a> * &gt; *&#160;</td>
<td class="paramname"><em>minEdgeRings</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>This method takes a list of MinimalEdgeRings derived from a <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MaximalEdgeRing.html" title="A ring of DirectedEdges which may contain nodes of degree &gt; 2. ">MaximalEdgeRing</a>, and tests whether they form a Polygon. This is the case if there is a single shell in the list. In this case the shell is returned. The other possibility is that they are a series of connected holes, in which case no shell is returned.</p>
<dl class="section return"><dt>Returns</dt><dd>the shell <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a>, if there is one </dd>
<dd>
NULL, if all the rings are holes </dd></dl>
</div>
</div>
<a class="anchor" id="a524207f05f62993f493771367298c1ac"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="classgeos_1_1geom_1_1Geometry.html">geom::Geometry</a>*&gt;* geos::operation::overlay::PolygonBuilder::getPolygons </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="abb67d05211a757aa6d0126c7ff1d9619"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void geos::operation::overlay::PolygonBuilder::placeFreeHoles </td>
<td>(</td>
<td class="paramtype">std::vector&lt; <a class="el" href="structgeos_1_1operation_1_1overlay_1_1PolygonBuilder_1_1FastPIPRing.html">FastPIPRing</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>newShellList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>freeHoleList</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>This method determines finds a containing shell for all holes which have not yet been assigned to a shell. </p>
<p>These "free" holes should all be <b>properly</b> contained in their parent shells, so it is safe to use the <code>findEdgeRingContaining</code> method. This is the case because any holes which are NOT properly contained (i.e. are connected to their parent shell) would have formed part of a <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MaximalEdgeRing.html" title="A ring of DirectedEdges which may contain nodes of degree &gt; 2. ">MaximalEdgeRing</a> and been handled in a previous step.</p>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">TopologyException</td><td>if a hole cannot be assigned to a shell </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ade7a64c617ce83ccff38508f28841a3e"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void geos::operation::overlay::PolygonBuilder::placePolygonHoles </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> *&#160;</td>
<td class="paramname"><em>shell</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MinimalEdgeRing.html">MinimalEdgeRing</a> * &gt; *&#160;</td>
<td class="paramname"><em>minEdgeRings</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>This method assigns the holes for a Polygon (formed from a list of MinimalEdgeRings) to its shell. Determining the holes for a <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MinimalEdgeRing.html" title="A ring of Edges with the property that no node has degree greater than 2. ">MinimalEdgeRing</a> polygon serves two purposes:</p>
<ul>
<li>it is faster than using a point-in-polygon check later on.</li>
<li>it ensures correctness, since if the PIP test was used the point chosen might lie on the shell, which might return an incorrect result from the PIP test </li>
</ul>
</div>
</div>
<a class="anchor" id="a9757a692a7bca3754e72ab00958ceeb1"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void geos::operation::overlay::PolygonBuilder::sortShellsAndHoles </td>
<td>(</td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1operation_1_1overlay_1_1MaximalEdgeRing.html">MaximalEdgeRing</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>edgeRings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>newShellList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a> * &gt; &amp;&#160;</td>
<td class="paramname"><em>freeHoleList</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>For all rings in the input list, determine whether the ring is a shell or a hole and add it to the appropriate list. Due to the way the DirectedEdges were linked, a ring is a shell if it is oriented CW, a hole otherwise. </p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a class="anchor" id="a915d3cef37b0c75ab9bdd809cac6d865"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="classgeos_1_1geom_1_1GeometryFactory.html">geom::GeometryFactory</a>* geos::operation::overlay::PolygonBuilder::geometryFactory</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="PolygonBuilder_8h_source.html#l00090">90</a> of file <a class="el" href="PolygonBuilder_8h_source.html">PolygonBuilder.h</a>.</p>
</div>
</div>
<a class="anchor" id="a1db3633c6ac3ac1aac4613c7d332ca72"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="classgeos_1_1geomgraph_1_1EdgeRing.html">geomgraph::EdgeRing</a>*&gt; geos::operation::overlay::PolygonBuilder::shellList</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="PolygonBuilder_8h_source.html#l00092">92</a> of file <a class="el" href="PolygonBuilder_8h_source.html">PolygonBuilder.h</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="PolygonBuilder_8h_source.html">PolygonBuilder.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>