PolygonizeGraph.h

00001 /**********************************************************************
00002  * $Id: PolygonizeGraph.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  * Copyright (C) 2001-2002 Vivid Solutions Inc.
00009  *
00010  * This is free software; you can redistribute and/or modify it under
00011  * the terms of the GNU Lesser General Public Licence as published
00012  * by the Free Software Foundation. 
00013  * See the COPYING file for more information.
00014  *
00015  **********************************************************************/
00016 
00017 
00018 #ifndef GEOS_OP_POLYGONIZE_POLYGONIZEGRAPH_H
00019 #define GEOS_OP_POLYGONIZE_POLYGONIZEGRAPH_H
00020 
00021 #include <geos/planargraph/PlanarGraph.h> // for inheritance
00022 
00023 #include <vector>
00024 
00025 // Forward declarations
00026 namespace geos {
00027         namespace geom { 
00028                 class LineString;
00029                 class GeometryFactory;
00030                 class Coordinate;
00031                 class CoordinateSequence;
00032         }
00033         namespace planargraph { 
00034                 class Node;
00035                 class Edge;
00036                 class DirectedEdge;
00037         }
00038         namespace operation { 
00039                 namespace polygonize {
00040                         class EdgeRing;
00041                         class PolygonizeDirectedEdge;
00042                 }
00043         }
00044 }
00045 
00046 namespace geos {
00047 namespace operation { // geos::operation
00048 namespace polygonize { // geos::operation::polygonize
00049 
00050 
00060 class PolygonizeGraph: public planargraph::PlanarGraph {
00061 
00062 public:
00063 
00068         static void deleteAllEdges(planargraph::Node *node);
00069 
00074         PolygonizeGraph(const geom::GeometryFactory *newFactory);
00075 
00080         ~PolygonizeGraph();
00081 
00087         void addEdge(const geom::LineString *line);
00088 
00096         std::vector<EdgeRing*>* getEdgeRings();
00097 
00104         std::vector<const geom::LineString*>* deleteCutEdges();
00105 
00117         std::vector<const geom::LineString*>* deleteDangles();
00118 
00119 private:
00120 
00121         static int getDegreeNonDeleted(planargraph::Node *node);
00122 
00123         static int getDegree(planargraph::Node *node, long label);
00124 
00125         const geom::GeometryFactory *factory;
00126 
00127         planargraph::Node* getNode(const geom::Coordinate& pt);
00128 
00129         void computeNextCWEdges();
00130 
00139         void convertMaximalToMinimalEdgeRings(
00140                         std::vector<PolygonizeDirectedEdge*> *ringEdges);
00141 
00153         static std::vector<planargraph::Node*>* findIntersectionNodes(
00154                         PolygonizeDirectedEdge *startDE,
00155                         long label);
00156 
00161         static std::vector<PolygonizeDirectedEdge*>* findLabeledEdgeRings(
00162                         std::vector<planargraph::DirectedEdge*> &dirEdges);
00163 
00164         static void label(std::vector<planargraph::DirectedEdge*> &dirEdges, long label);
00165 
00166         static void computeNextCWEdges(planargraph::Node *node);
00167 
00175         static void computeNextCCWEdges(planargraph::Node *node, long label);
00176 
00186         static std::vector<planargraph::DirectedEdge*>* findDirEdgesInRing(
00187                         PolygonizeDirectedEdge *startDE);
00188 
00189         EdgeRing* findEdgeRing(PolygonizeDirectedEdge *startDE);
00190 
00191         /* Tese are for memory management */
00192         std::vector<planargraph::Edge *>newEdges;
00193         std::vector<planargraph::DirectedEdge *>newDirEdges;
00194         std::vector<planargraph::Node *>newNodes;
00195         std::vector<EdgeRing *>newEdgeRings;
00196         std::vector<geom::CoordinateSequence *>newCoords;
00197 };
00198 
00199 } // namespace geos::operation::polygonize
00200 } // namespace geos::operation
00201 } // namespace geos
00202 
00203 #endif // GEOS_OP_POLYGONIZE_POLYGONIZEGRAPH_H
00204 
00205 /**********************************************************************
00206  * $Log$
00207  * Revision 1.1  2006/03/22 11:19:06  strk
00208  * opPolygonize.h headers split.
00209  *
00210  **********************************************************************/

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