GEOS
3.2.3
|
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 **********************************************************************/