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_DRAW_DASHED_LINE_HH
00027 # define MLN_DRAW_DASHED_LINE_HH
00028
00033
00034 # include <mln/core/concept/function.hh>
00035 # include <mln/core/concept/image.hh>
00036 # include <mln/core/site_set/p_line2d.hh>
00037 # include <mln/core/image/imorph/safe.hh>
00038 # include <mln/data/fill.hh>
00039 # include <mln/pw/image.hh>
00040 # include <mln/pw/cst.hh>
00041
00042
00043 namespace mln
00044 {
00045
00046 namespace draw
00047 {
00048
00062 template <typename I>
00063 void dashed_line(Image<I>& ima,
00064 const mln_psite(I)& beg, const mln_psite(I)& end,
00065 const mln_value(I)& v);
00066
00067
00068 # ifndef MLN_INCLUDE_ONLY
00069
00070 namespace internal
00071 {
00072
00073 template <typename I, unsigned dim>
00074 struct dashed_line_f : Function_v2b<dashed_line_f<I, dim> >
00075 {
00076 typedef bool result;
00077
00078 bool operator()(const mln_site(I)& p) const
00079 {
00080 return p[dim] % 2;
00081 }
00082
00083 };
00084
00085 }
00086
00087
00088
00089 template <typename I>
00090 inline
00091 void dashed_line(Image<I>& ima_,
00092 const mln_psite(I)& beg, const mln_psite(I)& end,
00093 const mln_value(I)& v)
00094 {
00095 I& ima = exact(ima_);
00096 mln_precondition(ima.is_valid());
00097
00098 if (! ima.has(beg))
00099 trace::warning("Begin site is not part of the given image.");
00100 if (! ima.has(end))
00101 trace::warning("End site is not part of the given image.");
00102
00103 data::fill(((ima | p_line2d(beg, end)).rw() | internal::dashed_line_f<I, 1>()).rw(), v);
00104 }
00105
00106 # endif // ! MLN_INCLUDE_ONLY
00107
00108 }
00109
00110 }
00111
00112
00113 #endif // ! MLN_DRAW_DASHED_LINE_HH