• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List

PolygonBuilder.h

00001 /**********************************************************************
00002  * $Id: PolygonBuilder.h 2556 2009-06-06 22:22:28Z strk $
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2006 Refractions Research Inc.
00008  *
00009  * This is free software; you can redistribute and/or modify it under
00010  * the terms of the GNU Lesser General Public Licence as published
00011  * by the Free Software Foundation. 
00012  * See the COPYING file for more information.
00013  *
00014  **********************************************************************
00015  *
00016  * Last port: operation/overlay/PolygonBuilder.java rev. 1.20 (JTS-1.10)
00017  *
00018  **********************************************************************/
00019 
00020 #ifndef GEOS_OP_OVERLAY_POLYGONBUILDER_H
00021 #define GEOS_OP_OVERLAY_POLYGONBUILDER_H
00022 
00023 #include <geos/export.h>
00024 
00025 #include <vector>
00026 
00027 // Forward declarations
00028 namespace geos {
00029         namespace geom {
00030                 class Geometry;
00031                 class Coordinate;
00032                 class GeometryFactory;
00033         }
00034         namespace geomgraph {
00035                 class EdgeRing;
00036                 class Node;
00037                 class PlanarGraph;
00038                 class DirectedEdge;
00039         }
00040         namespace operation {
00041                 namespace overlay {
00042                         class MaximalEdgeRing;
00043                         class MinimalEdgeRing;
00044                 }
00045         }
00046 }
00047 
00048 namespace geos {
00049 namespace operation { // geos::operation
00050 namespace overlay { // geos::operation::overlay
00051 
00057 class GEOS_DLL PolygonBuilder {
00058 public:
00059 
00060         PolygonBuilder(const geom::GeometryFactory *newGeometryFactory);
00061 
00062         ~PolygonBuilder();
00063 
00069         void add(geomgraph::PlanarGraph *graph);
00070             // throw(const TopologyException &)
00071 
00077         void add(const std::vector<geomgraph::DirectedEdge*> *dirEdges,
00078                         const std::vector<geomgraph::Node*> *nodes);
00079                         // throw(const TopologyException &)
00080 
00081         std::vector<geom::Geometry*>* getPolygons();
00082 
00087         bool containsPoint(const geom::Coordinate& p);
00088 
00089 private:
00090 
00091         const geom::GeometryFactory *geometryFactory;
00092 
00093         std::vector<geomgraph::EdgeRing*> shellList;
00094 
00101         std::vector<MaximalEdgeRing*>* buildMaximalEdgeRings(
00102                 const std::vector<geomgraph::DirectedEdge*> *dirEdges);
00103                         // throw(const TopologyException &)
00104 
00105         std::vector<MaximalEdgeRing*>* buildMinimalEdgeRings(
00106                 std::vector<MaximalEdgeRing*> *maxEdgeRings,
00107                 std::vector<geomgraph::EdgeRing*> *newShellList,
00108                 std::vector<geomgraph::EdgeRing*> *freeHoleList);
00120         geomgraph::EdgeRing* findShell(std::vector<MinimalEdgeRing*>* minEdgeRings);
00121 
00133         void placePolygonHoles(geomgraph::EdgeRing *shell,
00134                 std::vector<MinimalEdgeRing*> *minEdgeRings);
00135 
00143         void sortShellsAndHoles(std::vector<MaximalEdgeRing*> *edgeRings,
00144                 std::vector<geomgraph::EdgeRing*> *newShellList,
00145                 std::vector<geomgraph::EdgeRing*> *freeHoleList);
00146 
00161         void placeFreeHoles(std::vector<geomgraph::EdgeRing*>& newShellList,
00162                 std::vector<geomgraph::EdgeRing*>& freeHoleList);
00163                 // throw(const TopologyException&)
00164 
00183         geomgraph::EdgeRing* findEdgeRingContaining(geomgraph::EdgeRing *testEr,
00184                 std::vector<geomgraph::EdgeRing*>& newShellList);
00185 
00186         std::vector<geom::Geometry*>* computePolygons(
00187                         std::vector<geomgraph::EdgeRing*>& newShellList);
00188 
00194 };
00195 
00196 
00197 
00198 } // namespace geos::operation::overlay
00199 } // namespace geos::operation
00200 } // namespace geos
00201 
00202 #endif // ndef GEOS_OP_OVERLAY_POLYGONBUILDER_H
00203 
00204 /**********************************************************************
00205  * $Log$
00206  * Revision 1.3  2006/06/13 23:26:46  strk
00207  * cleanups
00208  *
00209  * Revision 1.2  2006/03/20 12:33:45  strk
00210  * Simplified some privat methods to use refs instead of pointers, added
00211  * debugging section for failiures of holes/shells associations
00212  *
00213  * Revision 1.1  2006/03/17 13:24:59  strk
00214  * opOverlay.h header splitted. Reduced header inclusions in operation/overlay implementation files. ElevationMatrixFilter code moved from own file to ElevationMatrix.cpp (ideally a class-private).
00215  *
00216  **********************************************************************/
00217 

Generated on Thu Jul 22 2010 for GEOS by  doxygen 1.7.1