GEOS 3.3.1
|
00001 /********************************************************************** 00002 * $Id: Polygonizer.h 3255 2011-03-01 17:56:10Z mloskot $ 00003 * 00004 * GEOS - Geometry Engine Open Source 00005 * http://geos.refractions.net 00006 * 00007 * Copyright (C) 2010 Sandro Santilli <strk@keybit.net> 00008 * Copyright (C) 2006 Refractions Research Inc. 00009 * Copyright (C) 2001-2002 Vivid Solutions Inc. 00010 * 00011 * This is free software; you can redistribute and/or modify it under 00012 * the terms of the GNU Lesser General Public Licence as published 00013 * by the Free Software Foundation. 00014 * See the COPYING file for more information. 00015 * 00016 ********************************************************************** 00017 * 00018 * Last port: operation/polygonize/Polygonizer.java rev. 1.6 (JTS-1.10) 00019 * 00020 **********************************************************************/ 00021 00022 #ifndef GEOS_OP_POLYGONIZE_POLYGONIZER_H 00023 #define GEOS_OP_POLYGONIZE_POLYGONIZER_H 00024 00025 #include <geos/export.h> 00026 #include <geos/geom/GeometryComponentFilter.h> // for LineStringAdder inheritance 00027 00028 #include <vector> 00029 00030 #ifdef _MSC_VER 00031 #pragma warning(push) 00032 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class 00033 #endif 00034 00035 // Forward declarations 00036 namespace geos { 00037 namespace geom { 00038 class Geometry; 00039 class LineString; 00040 class Polygon; 00041 } 00042 namespace operation { 00043 namespace polygonize { 00044 class EdgeRing; 00045 class PolygonizeGraph; 00046 } 00047 } 00048 } 00049 00050 namespace geos { 00051 namespace operation { // geos::operation 00052 namespace polygonize { // geos::operation::polygonize 00053 00074 class GEOS_DLL Polygonizer { 00075 private: 00079 class GEOS_DLL LineStringAdder: public geom::GeometryComponentFilter { 00080 public: 00081 Polygonizer *pol; 00082 LineStringAdder(Polygonizer *p); 00083 //void filter_rw(geom::Geometry *g); 00084 void filter_ro(const geom::Geometry * g); 00085 }; 00086 00087 // default factory 00088 LineStringAdder lineStringAdder; 00089 00095 void add(const geom::LineString *line); 00096 00100 void polygonize(); 00101 00102 void findValidRings(const std::vector<EdgeRing*>& edgeRingList, 00103 std::vector<EdgeRing*>& validEdgeRingList, 00104 std::vector<geom::LineString*>& invalidRingList); 00105 00106 void findShellsAndHoles(const std::vector<EdgeRing*>& edgeRingList); 00107 00108 static void assignHolesToShells(const std::vector<EdgeRing*>& holeList, 00109 std::vector<EdgeRing*>& shellList); 00110 00111 static void assignHoleToShell(EdgeRing *holeER, 00112 std::vector<EdgeRing*>& shellList); 00113 00114 protected: 00115 00116 PolygonizeGraph *graph; 00117 00118 // initialize with empty collections, in case nothing is computed 00119 std::vector<const geom::LineString*> dangles; 00120 std::vector<const geom::LineString*> cutEdges; 00121 std::vector<geom::LineString*> invalidRingLines; 00122 00123 std::vector<EdgeRing*> holeList; 00124 std::vector<EdgeRing*> shellList; 00125 std::vector<geom::Polygon*> *polyList; 00126 00127 public: 00128 00133 Polygonizer(); 00134 00135 ~Polygonizer(); 00136 00145 void add(std::vector<geom::Geometry*> *geomList); 00146 00155 void add(std::vector<const geom::Geometry*> *geomList); 00156 00165 void add(geom::Geometry *g); 00166 00175 void add(const geom::Geometry *g); 00176 00184 std::vector<geom::Polygon*>* getPolygons(); 00185 00193 const std::vector<const geom::LineString*>& getDangles(); 00194 00195 00203 const std::vector<const geom::LineString*>& getCutEdges(); 00204 00213 const std::vector<geom::LineString*>& getInvalidRingLines(); 00214 00215 // This seems to be needed by GCC 2.95.4 00216 friend class Polygonizer::LineStringAdder; 00217 }; 00218 00219 } // namespace geos::operation::polygonize 00220 } // namespace geos::operation 00221 } // namespace geos 00222 00223 #ifdef _MSC_VER 00224 #pragma warning(pop) 00225 #endif 00226 00227 #endif // GEOS_OP_POLYGONIZE_POLYGONIZER_H 00228 00229 /********************************************************************** 00230 * $Log$ 00231 * Revision 1.2 2006/06/12 17:15:29 strk 00232 * Removed unused parameters warning 00233 * 00234 * Revision 1.1 2006/03/22 11:19:06 strk 00235 * opPolygonize.h headers split. 00236 * 00237 **********************************************************************/