Polygonizer.h

00001 /**********************************************************************
00002  * $Id: Polygonizer.h 1880 2006-10-27 11:54:17Z strk $
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_POLYGONIZER_H
00019 #define GEOS_OP_POLYGONIZE_POLYGONIZER_H
00020 
00021 #include <geos/geom/GeometryComponentFilter.h> // for LineStringAdder inheritance
00022 
00023 #include <vector>
00024 
00025 // Forward declarations
00026 namespace geos {
00027         namespace geom { 
00028                 class Geometry;
00029                 class LineString;
00030                 class Polygon;
00031         }
00032         namespace operation { 
00033                 namespace polygonize { 
00034                         class EdgeRing;
00035                         class PolygonizeGraph;
00036                 }
00037         }
00038 }
00039 
00040 namespace geos {
00041 namespace operation { // geos::operation
00042 namespace polygonize { // geos::operation::polygonize
00043 
00064 class Polygonizer {
00065 private:
00069         class LineStringAdder: public geom::GeometryComponentFilter {
00070         public:
00071                 Polygonizer *pol;
00072                 LineStringAdder(Polygonizer *p);
00073                 //void filter_rw(geom::Geometry *g);
00074                 void filter_ro(const geom::Geometry * g);
00075         };
00076 
00077         // default factory
00078         LineStringAdder *lineStringAdder;
00079 
00085         void add(const geom::LineString *line);
00086 
00090         void polygonize();
00091 
00092         void findValidRings(std::vector<EdgeRing*> *edgeRingList,
00093                         std::vector<EdgeRing*> *validEdgeRingList,
00094                         std::vector<geom::LineString*> *invalidRingList);
00095 
00096         void findShellsAndHoles(std::vector<EdgeRing*> *edgeRingList);
00097 
00098         static void assignHolesToShells(std::vector<EdgeRing*> *holeList,
00099                         std::vector<EdgeRing*> *shellList);
00100 
00101         static void assignHoleToShell(EdgeRing *holeER,
00102                         std::vector<EdgeRing*> *shellList);
00103 
00104 protected:
00105 
00106         PolygonizeGraph *graph;
00107 
00108         // initialize with empty collections, in case nothing is computed
00109         std::vector<const geom::LineString*> *dangles;
00110         std::vector<const geom::LineString*> *cutEdges;
00111         std::vector<geom::LineString*> *invalidRingLines;
00112 
00113         std::vector<EdgeRing*> *holeList;
00114         std::vector<EdgeRing*> *shellList;
00115         std::vector<geom::Polygon*> *polyList;
00116 
00117 public:
00118 
00123         Polygonizer();
00124 
00125         ~Polygonizer();
00126 
00135         void add(std::vector<geom::Geometry*> *geomList);
00136 
00145         void add(std::vector<const geom::Geometry*> *geomList);
00146 
00155         void add(geom::Geometry *g);
00156 
00165         void add(const geom::Geometry *g);
00166 
00174         std::vector<geom::Polygon*>* getPolygons();
00175 
00181         std::vector<const geom::LineString*>* getDangles();
00182 
00183 
00189         std::vector<const geom::LineString*>* getCutEdges();
00190 
00200         std::vector<geom::LineString*>* getInvalidRingLines();
00201 
00202 // This seems to be needed by    GCC 2.95.4
00203 friend class Polygonizer::LineStringAdder;
00204 };
00205 
00206 } // namespace geos::operation::polygonize
00207 } // namespace geos::operation
00208 } // namespace geos
00209 
00210 #endif // GEOS_OP_POLYGONIZE_POLYGONIZER_H
00211 
00212 /**********************************************************************
00213  * $Log$
00214  * Revision 1.2  2006/06/12 17:15:29  strk
00215  * Removed unused parameters warning
00216  *
00217  * Revision 1.1  2006/03/22 11:19:06  strk
00218  * opPolygonize.h headers split.
00219  *
00220  **********************************************************************/

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