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

Polygonizer.h

00001 /**********************************************************************
00002  * $Id: Polygonizer.h 2728 2009-11-19 19:57:36Z 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  * Last port: operation/polygonize/Polygonizer.java rev. 1.6 (JTS-1.10)
00018  *
00019  **********************************************************************/
00020 
00021 
00022 #ifndef GEOS_OP_POLYGONIZE_POLYGONIZER_H
00023 #define GEOS_OP_POLYGONIZE_POLYGONIZER_H
00024 
00025 #include <geos/export.h>
00026 
00027 #include <geos/geom/GeometryComponentFilter.h> // for LineStringAdder inheritance
00028 
00029 #include <vector>
00030 
00031 // Forward declarations
00032 namespace geos {
00033         namespace geom { 
00034                 class Geometry;
00035                 class LineString;
00036                 class Polygon;
00037         }
00038         namespace operation { 
00039                 namespace polygonize { 
00040                         class EdgeRing;
00041                         class PolygonizeGraph;
00042                 }
00043         }
00044 }
00045 
00046 namespace geos {
00047 namespace operation { // geos::operation
00048 namespace polygonize { // geos::operation::polygonize
00049 
00070 class GEOS_DLL Polygonizer {
00071 private:
00075         class LineStringAdder: public geom::GeometryComponentFilter {
00076         public:
00077                 Polygonizer *pol;
00078                 LineStringAdder(Polygonizer *p);
00079                 //void filter_rw(geom::Geometry *g);
00080                 void filter_ro(const geom::Geometry * g);
00081         };
00082 
00083         // default factory
00084         LineStringAdder *lineStringAdder;
00085 
00091         void add(const geom::LineString *line);
00092 
00096         void polygonize();
00097 
00099         void findValidRings(std::vector<EdgeRing*>& edgeRingList,
00100                         std::vector<EdgeRing*> *validEdgeRingList,
00101                         std::vector<geom::LineString*> *invalidRingList);
00102 
00103         void findShellsAndHoles(std::vector<EdgeRing*> *edgeRingList);
00104 
00105         static void assignHolesToShells(std::vector<EdgeRing*> *holeList,
00106                         std::vector<EdgeRing*> *shellList);
00107 
00108         static void assignHoleToShell(EdgeRing *holeER,
00109                         std::vector<EdgeRing*> *shellList);
00110 
00111 protected:
00112 
00113         PolygonizeGraph *graph;
00114 
00115         // initialize with empty collections, in case nothing is computed
00116         std::vector<const geom::LineString*> *dangles;
00117         std::vector<const geom::LineString*> *cutEdges;
00118         std::vector<geom::LineString*> *invalidRingLines;
00119 
00120         std::vector<EdgeRing*> *holeList;
00121         std::vector<EdgeRing*> *shellList;
00122         std::vector<geom::Polygon*> *polyList;
00123 
00124 public:
00125 
00130         Polygonizer();
00131 
00132         ~Polygonizer();
00133 
00142         void add(std::vector<geom::Geometry*> *geomList);
00143 
00152         void add(std::vector<const geom::Geometry*> *geomList);
00153 
00162         void add(geom::Geometry *g);
00163 
00172         void add(const geom::Geometry *g);
00173 
00181         std::vector<geom::Polygon*>* getPolygons();
00182 
00188         std::vector<const geom::LineString*>* getDangles();
00189 
00190 
00198         std::vector<const geom::LineString*>* getCutEdges();
00199 
00209         std::vector<geom::LineString*>* getInvalidRingLines();
00210 
00211 // This seems to be needed by    GCC 2.95.4
00212 friend class Polygonizer::LineStringAdder;
00213 };
00214 
00215 } // namespace geos::operation::polygonize
00216 } // namespace geos::operation
00217 } // namespace geos
00218 
00219 #endif // GEOS_OP_POLYGONIZE_POLYGONIZER_H
00220 
00221 /**********************************************************************
00222  * $Log$
00223  * Revision 1.2  2006/06/12 17:15:29  strk
00224  * Removed unused parameters warning
00225  *
00226  * Revision 1.1  2006/03/22 11:19:06  strk
00227  * opPolygonize.h headers split.
00228  *
00229  **********************************************************************/

Generated on Thu Jul 22 2010 for GEOS by  doxygen 1.7.1