00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GEOS_GEOM_UTIL_POLYGONEXTRACTER_H
00018 #define GEOS_GEOM_UTIL_POLYGONEXTRACTER_H
00019
00020 #include <geos/export.h>
00021 #include <geos/geom/GeometryFilter.h>
00022 #include <geos/geom/Polygon.h>
00023 #include <geos/platform.h>
00024 #include <vector>
00025
00026 namespace geos {
00027 namespace geom {
00028 namespace util {
00029
00033 class GEOS_DLL PolygonExtracter: public GeometryFilter {
00034
00035 private:
00036
00038 std::vector<const Polygon*>& comps;
00039
00040 public:
00041
00049 static void getPolygons(const Geometry &geom, std::vector<const Polygon*>& ret)
00050 {
00051 PolygonExtracter pe(ret);
00052 geom.apply_ro(&pe);
00053 }
00054
00059 PolygonExtracter(std::vector<const Polygon*>& newComps)
00060 :
00061 comps(newComps)
00062 {}
00063
00064 void filter_rw(Geometry *geom) {
00065 if ( const Polygon *p=dynamic_cast<const Polygon *>(geom) )
00066 {
00067 comps.push_back(p);
00068 }
00069 }
00070
00071 void filter_ro(const Geometry *geom)
00072 {
00073 if ( const Polygon *p=dynamic_cast<const Polygon *>(geom) )
00074 {
00075 comps.push_back(p);
00076 }
00077 }
00078
00079 };
00080
00081 }
00082 }
00083 }
00084
00085 #endif
00086
00087
00088
00089
00090
00091
00092