00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef POLYGON_MASK_HH_
00026 #define POLYGON_MASK_HH_
00027
00028 #include <ost/img/vecmat.hh>
00029 #include "mask_base.hh"
00030
00031 namespace ost {
00032
00033 namespace img
00034 {
00037 class DLLEXPORT_OST_IMG_BASE PolygonMask : public MaskBase, public Polygon2
00038 {
00039 public:
00040 PolygonMask();
00041 PolygonMask(const Polygon2& p);
00042 virtual MaskPtr Clone();
00043 virtual bool IsInside(const Vec2& v);
00044
00045 virtual void Shift(const Vec2& v);
00046 virtual void Expand(Real d);
00047 virtual void Scale(Real d);
00048
00049 virtual void Apply(MaskVisitor& v);
00050
00051 void AddNode(const Vec2& n);
00052 void SetNode(unsigned int i,const Vec2& v);
00053 void Erase(circular_iterator first,circular_iterator last);
00054
00055
00056 protected:
00057 std::vector<Real> get_intercept_x_values_(Real y);
00058 bool intercepts_valid_;
00059 Real intercept_y_;
00060 std::vector<Real> intercepts_;
00061 Rectangle2 bounding_box_;
00062
00063
00064 };
00065
00066 }}
00067
00068 #endif