PolygonBuilder.h

00001 /**********************************************************************
00002  * $Id: PolygonBuilder.h 1820 2006-09-06 16:54:23Z mloskot $
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 #ifndef GEOS_OP_OVERLAY_POLYGONBUILDER_H
00017 #define GEOS_OP_OVERLAY_POLYGONBUILDER_H
00018 
00019 #include <vector>
00020 
00021 // Forward declarations
00022 namespace geos {
00023         namespace geom {
00024                 class Geometry;
00025                 class Coordinate;
00026                 class GeometryFactory;
00027         }
00028         namespace geomgraph {
00029                 class EdgeRing;
00030                 class Node;
00031                 class PlanarGraph;
00032                 class DirectedEdge;
00033         }
00034         namespace operation {
00035                 namespace overlay {
00036                         class MaximalEdgeRing;
00037                         class MinimalEdgeRing;
00038                 }
00039         }
00040 }
00041 
00042 namespace geos {
00043 namespace operation { // geos::operation
00044 namespace overlay { // geos::operation::overlay
00045 
00051 class PolygonBuilder {
00052 public:
00053 
00054         // CGAlgorithms argument is unused
00055         PolygonBuilder(const geom::GeometryFactory *newGeometryFactory);
00056 
00057         ~PolygonBuilder();
00058 
00064         void add(geomgraph::PlanarGraph *graph); // throw(TopologyException *);
00065 
00071         void add(const std::vector<geomgraph::DirectedEdge*> *dirEdges,
00072                         const std::vector<geomgraph::Node*> *nodes);
00073                         // throw(TopologyException *);
00074 
00075         std::vector<geom::Geometry*>* getPolygons();
00076 
00081         bool containsPoint(const geom::Coordinate& p);
00082 
00083 private:
00084 
00085         const geom::GeometryFactory *geometryFactory;
00086 
00087         std::vector<geomgraph::EdgeRing*> shellList;
00088 
00092         std::vector<MaximalEdgeRing*>* buildMaximalEdgeRings(
00093                 const std::vector<geomgraph::DirectedEdge*> *dirEdges);
00094 
00095         std::vector<MaximalEdgeRing*>* buildMinimalEdgeRings(
00096                 std::vector<MaximalEdgeRing*> *maxEdgeRings,
00097                 std::vector<geomgraph::EdgeRing*> *newShellList,
00098                 std::vector<geomgraph::EdgeRing*> *freeHoleList);
00110         geomgraph::EdgeRing* findShell(std::vector<MinimalEdgeRing*>* minEdgeRings);
00111 
00123         void placePolygonHoles(geomgraph::EdgeRing *shell,
00124                 std::vector<MinimalEdgeRing*> *minEdgeRings);
00125 
00133         void sortShellsAndHoles(std::vector<MaximalEdgeRing*> *edgeRings,
00134                 std::vector<geomgraph::EdgeRing*> *newShellList,
00135                 std::vector<geomgraph::EdgeRing*> *freeHoleList);
00136 
00149         void placeFreeHoles(std::vector<geomgraph::EdgeRing*>& newShellList,
00150                 std::vector<geomgraph::EdgeRing*>& freeHoleList);
00151 
00170         geomgraph::EdgeRing* findEdgeRingContaining(geomgraph::EdgeRing *testEr,
00171                 std::vector<geomgraph::EdgeRing*>& newShellList);
00172 
00173         std::vector<geom::Geometry*>* computePolygons(
00174                         std::vector<geomgraph::EdgeRing*>& newShellList);
00175 
00181 };
00182 
00183 
00184 
00185 } // namespace geos::operation::overlay
00186 } // namespace geos::operation
00187 } // namespace geos
00188 
00189 #endif // ndef GEOS_OP_OVERLAY_POLYGONBUILDER_H
00190 
00191 /**********************************************************************
00192  * $Log$
00193  * Revision 1.3  2006/06/13 23:26:46  strk
00194  * cleanups
00195  *
00196  * Revision 1.2  2006/03/20 12:33:45  strk
00197  * Simplified some privat methods to use refs instead of pointers, added
00198  * debugging section for failiures of holes/shells associations
00199  *
00200  * Revision 1.1  2006/03/17 13:24:59  strk
00201  * 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).
00202  *
00203  **********************************************************************/
00204 

Generated on Fri Mar 27 04:52:57 2009 for GEOS by  doxygen 1.5.4