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
00026 #ifndef MLN_CORE_IMAGE_DMORPH_HEXA_PITER_HH
00027 # define MLN_CORE_IMAGE_DMORPH_HEXA_PITER_HH
00028
00032
00033 # include <mln/core/internal/piter_adaptor.hh>
00034
00035 # include <mln/core/alias/box2d.hh>
00036 # include <mln/core/alias/box2d_h.hh>
00037
00038
00039 namespace mln
00040 {
00041
00049 template <typename S>
00050 class hexa_fwd_piter_
00051 : public internal::piter_adaptor_< mln_fwd_piter(S),
00052 S,
00053 hexa_fwd_piter_<S> >
00054 {
00055 typedef mln_fwd_piter(S) adaptee_;
00056 typedef hexa_fwd_piter_<S> self_;
00057 typedef internal::piter_adaptor_<adaptee_, S, self_> super_;
00058
00059 public:
00060
00062 hexa_fwd_piter_(const box2d_h& subset);
00063
00065 void start();
00066
00068 void next_();
00069
00070 operator point2d_h() const;
00071 private:
00072
00073 point2d_h p_;
00074
00075
00076 box2d box_adaptee_;
00077 };
00078
00079
00080
00081 template <typename S>
00082 class hexa_bkd_piter_
00083 :
00084 public mln::internal::fixme
00085 {};
00086
00087
00088
00089 # ifndef MLN_INCLUDE_ONLY
00090
00091
00092
00093
00094 template <typename S>
00095 inline
00096 hexa_fwd_piter_<S>::hexa_fwd_piter_(const box2d_h& b)
00097 :
00098 super_(adaptee_(box_adaptee_))
00099 {
00100 box_adaptee_ = make::box2d(b.pmin()[0] / 2,
00101 b.pmin()[1] / 2,
00102 b.pmax()[0] / 2 + b.pmax()[0] % 2,
00103 b.pmax()[1] / 2);
00104 }
00105
00106 template <typename S>
00107 inline
00108 void
00109 hexa_fwd_piter_<S>::start()
00110 {
00111 this->pi_.start();
00112 p_[0] = this->pi_[0];
00113 p_[1] = this->pi_[1];
00114 }
00115
00116 template <typename S>
00117 inline
00118 void
00119 hexa_fwd_piter_<S>::next_()
00120 {
00121 this->pi_.next();
00122 p_[0] = this->pi_[0] * 2;
00123 p_[1] = this->pi_[1] * 2 + this->pi_[0] % 2;
00124 }
00125
00126 template <typename S>
00127 inline
00128 hexa_fwd_piter_<S>::operator point2d_h() const
00129 {
00130 return p_;
00131 }
00132
00133
00134
00135
00136 # endif // ! MLN_INCLUDE_ONLY
00137
00138 }
00139
00140
00141 #endif // ! MLN_CORE_IMAGE_DMORPH_HEXA_PITER_HH