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_BOX_HH
00027 # define MLN_DRAW_BOX_HH
00028
00034 # include <mln/core/concept/image.hh>
00035 # include <mln/core/alias/box2d.hh>
00036 # include <mln/data/paste.hh>
00037 # include <mln/draw/line.hh>
00038 # include <mln/pw/image.hh>
00039 # include <mln/pw/cst.hh>
00040
00041
00042 namespace mln
00043 {
00044
00045 namespace draw
00046 {
00047
00059 template <typename I, typename B>
00060 void box(Image<I>& ima,
00061 const Box<B>& b,
00062 const mln_value(I)& v);
00063
00064
00065 # ifndef MLN_INCLUDE_ONLY
00066
00067 template <typename I, typename B>
00068 inline
00069 void box(Image<I>& ima,
00070 const Box<B>& b,
00071 const mln_value(I)& v)
00072 {
00073 mln_precondition(exact(ima).is_valid());
00074
00075 mln_psite(I) pmin = exact(b).pmin();
00076 mln_psite(I) pmax = exact(b).pmax();
00077
00078 mln_precondition(exact(ima).has(pmin) && exact(ima).has(pmax));
00079
00080 mln_psite(I) p1 (pmin[0], pmin[1]);
00081 mln_psite(I) p2 (pmax[0], pmin[1]);
00082 mln_psite(I) p3 (pmin[0], pmax[1]);
00083 mln_psite(I) p4 (pmax[0], pmax[1]);
00084
00085 draw::line (ima, p1, p2, v);
00086 draw::line (ima, p2, p4, v);
00087 draw::line (ima, p4, p3, v);
00088 draw::line (ima, p3, p1, v);
00089 }
00090
00091 # endif // ! MLN_INCLUDE_ONLY
00092
00093 }
00094
00095 }
00096
00097
00098 #endif // ! MLN_DRAW_BOX_HH