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_POLYGON_HH
00027 # define MLN_DRAW_POLYGON_HH
00028
00033
00034 # include <mln/core/concept/image.hh>
00035 # include <mln/core/site_set/p_array.hh>
00036 # include <mln/draw/line.hh>
00037
00038
00039 namespace mln
00040 {
00041
00042 namespace draw
00043 {
00044
00054 template <typename I>
00055 void polygon(Image<I>& ima,
00056 const p_array<mln_site(I)>& par,
00057 const mln_value(I)& v,
00058 unsigned output_ratio);
00059
00060
00061 template <typename I>
00062 void polygon(Image<I>& ima,
00063 const p_array<mln_site(I)>& par,
00064 const mln_value(I)& v);
00065
00066
00067 # ifndef MLN_INCLUDE_ONLY
00068
00069 template <typename I>
00070 void polygon(Image<I>& ima_,
00071 const p_array<mln_site(I)>& par,
00072 const mln_value(I)& v,
00073 unsigned output_ratio)
00074 {
00075 I& ima = exact(ima_);
00076 mln_precondition(ima.is_valid());
00077 mln_precondition(par.nelements() > 1);
00078
00079 mln_site(I) p_last, tmp;
00080 mln_piter(p_array<mln_site(I)>) p(par);
00081 p_last = par[0] / output_ratio;
00082 for_all(p)
00083 {
00084 tmp = p / output_ratio;
00085 draw::line(ima, p_last, tmp, v);
00086 p_last = tmp;
00087 }
00088 }
00089
00090 template <typename I>
00091 void polygon(Image<I>& ima,
00092 const p_array<mln_site(I)>& par,
00093 const mln_value(I)& v)
00094 {
00095 polygon(ima, par, v, 1);
00096 }
00097
00098 # endif // ! MLN_INCLUDE_ONLY
00099
00100 }
00101
00102 }
00103
00104
00105 #endif // ! MLN_DRAW_POLYGON_HH