00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef GEOS_GEOM_UTIL_POLYGONEXTRACTER_H
00017 #define GEOS_GEOM_UTIL_POLYGONEXTRACTER_H
00018
00019 #include <geos/export.h>
00020 #include <geos/geom/GeometryFilter.h>
00021 #include <geos/geom/Polygon.h>
00022 #include <geos/platform.h>
00023 #include <vector>
00024
00025 namespace geos {
00026 namespace geom {
00027 namespace util {
00028
00032 class GEOS_DLL PolygonExtracter: public GeometryFilter {
00033
00034 public:
00035
00043 static void getPolygons(const Geometry &geom, std::vector<const Polygon*>& ret)
00044 {
00045 PolygonExtracter pe(ret);
00046 geom.apply_ro(&pe);
00047 }
00048
00053 PolygonExtracter(std::vector<const Polygon*>& newComps)
00054 :
00055 comps(newComps)
00056 {}
00057
00058 void filter_rw(Geometry *geom) {
00059 if ( const Polygon *p=dynamic_cast<const Polygon *>(geom) )
00060 {
00061 comps.push_back(p);
00062 }
00063 }
00064
00065 void filter_ro(const Geometry *geom)
00066 {
00067 if ( const Polygon *p=dynamic_cast<const Polygon *>(geom) )
00068 {
00069 comps.push_back(p);
00070 }
00071 }
00072
00073 private:
00074
00076 std::vector<const Polygon*>& comps;
00077
00078
00079 PolygonExtracter(const PolygonExtracter& other);
00080 PolygonExtracter& operator=(const PolygonExtracter& rhs);
00081 };
00082
00083 }
00084 }
00085 }
00086
00087 #endif