PolygonizeGraph.h

00001 /**********************************************************************
00002  *
00003  * GEOS - Geometry Engine Open Source
00004  * http://geos.osgeo.org
00005  *
00006  * Copyright (C) 2006 Refractions Research Inc.
00007  * Copyright (C) 2001-2002 Vivid Solutions 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/polygonize/PolygonizeGraph.java rev. 6/138 (JTS-1.10)
00017  *
00018  **********************************************************************/
00019 
00020 #ifndef GEOS_OP_POLYGONIZE_POLYGONIZEGRAPH_H
00021 #define GEOS_OP_POLYGONIZE_POLYGONIZEGRAPH_H
00022 
00023 #include <geos/export.h>
00024 
00025 #include <geos/planargraph/PlanarGraph.h> // for inheritance
00026 
00027 #include <vector>
00028 
00029 #ifdef _MSC_VER
00030 #pragma warning(push)
00031 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
00032 #endif
00033 
00034 // Forward declarations
00035 namespace geos {
00036         namespace geom { 
00037                 class LineString;
00038                 class GeometryFactory;
00039                 class Coordinate;
00040                 class CoordinateSequence;
00041         }
00042         namespace planargraph { 
00043                 class Node;
00044                 class Edge;
00045                 class DirectedEdge;
00046         }
00047         namespace operation { 
00048                 namespace polygonize {
00049                         class EdgeRing;
00050                         class PolygonizeDirectedEdge;
00051                 }
00052         }
00053 }
00054 
00055 namespace geos {
00056 namespace operation { // geos::operation
00057 namespace polygonize { // geos::operation::polygonize
00058 
00059 
00069 class GEOS_DLL PolygonizeGraph: public planargraph::PlanarGraph {
00070 
00071 public:
00072 
00077         static void deleteAllEdges(planargraph::Node *node);
00078 
00083         PolygonizeGraph(const geom::GeometryFactory *newFactory);
00084 
00089         ~PolygonizeGraph();
00090 
00096         void addEdge(const geom::LineString *line);
00097 
00106         void getEdgeRings(std::vector<EdgeRing*>& edgeRingList);
00107 
00117         void deleteCutEdges(std::vector<const geom::LineString*> &cutLines);
00118 
00131         void deleteDangles(std::vector<const geom::LineString*> &dangleLines);
00132 
00133 private:
00134 
00135         static int getDegreeNonDeleted(planargraph::Node *node);
00136 
00137         static int getDegree(planargraph::Node *node, long label);
00138 
00139         const geom::GeometryFactory *factory;
00140 
00141         planargraph::Node* getNode(const geom::Coordinate& pt);
00142 
00143         void computeNextCWEdges();
00144 
00154         void convertMaximalToMinimalEdgeRings(
00155                         std::vector<PolygonizeDirectedEdge*> &ringEdges);
00156 
00167         static void findIntersectionNodes( PolygonizeDirectedEdge *startDE,
00168                         long label, std::vector<planargraph::Node*>& intNodes
00169 );
00170 
00180         static void findLabeledEdgeRings(
00181                         std::vector<planargraph::DirectedEdge*> &dirEdgesIn,
00182                         std::vector<PolygonizeDirectedEdge*> &dirEdgesOut);
00183 
00184         static void label(std::vector<planargraph::DirectedEdge*> &dirEdges, long label);
00185 
00186         static void computeNextCWEdges(planargraph::Node *node);
00187 
00195         static void computeNextCCWEdges(planargraph::Node *node, long label);
00196 
00207         static void findDirEdgesInRing(PolygonizeDirectedEdge *startDE,
00208                 std::vector<planargraph::DirectedEdge*>& edgesInRing);
00209 
00210         EdgeRing* findEdgeRing(PolygonizeDirectedEdge *startDE);
00211 
00212         /* Tese are for memory management */
00213         std::vector<planargraph::Edge *> newEdges;
00214         std::vector<planargraph::DirectedEdge *> newDirEdges;
00215         std::vector<planargraph::Node *> newNodes;
00216         std::vector<EdgeRing *> newEdgeRings;
00217         std::vector<geom::CoordinateSequence *> newCoords;
00218 };
00219 
00220 } // namespace geos::operation::polygonize
00221 } // namespace geos::operation
00222 } // namespace geos
00223 
00224 #ifdef _MSC_VER
00225 #pragma warning(pop)
00226 #endif
00227 
00228 #endif // GEOS_OP_POLYGONIZE_POLYGONIZEGRAPH_H

Generated on 23 Sep 2013 for GEOS by  doxygen 1.4.7