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 public:
00036
00044 static void getPolygons(const Geometry &geom, std::vector<const Polygon*>& ret)
00045 {
00046 PolygonExtracter pe(ret);
00047 geom.apply_ro(&pe);
00048 }
00049
00054 PolygonExtracter(std::vector<const Polygon*>& newComps)
00055 :
00056 comps(newComps)
00057 {}
00058
00059 void filter_rw(Geometry *geom) {
00060 if ( const Polygon *p=dynamic_cast<const Polygon *>(geom) )
00061 {
00062 comps.push_back(p);
00063 }
00064 }
00065
00066 void filter_ro(const Geometry *geom)
00067 {
00068 if ( const Polygon *p=dynamic_cast<const Polygon *>(geom) )
00069 {
00070 comps.push_back(p);
00071 }
00072 }
00073
00074 private:
00075
00077 std::vector<const Polygon*>& comps;
00078
00079
00080 PolygonExtracter(const PolygonExtracter& other);
00081 PolygonExtracter& operator=(const PolygonExtracter& rhs);
00082 };
00083
00084 }
00085 }
00086 }
00087
00088 #endif
00089
00090
00091
00092
00093
00094
00095