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