26 #ifndef SCRIBO_FILTER_SEPARATORS_IN_ELEMENT_HH
27 # define SCRIBO_FILTER_SEPARATORS_IN_ELEMENT_HH
35 # include <mln/core/concept/image.hh>
36 # include <mln/draw/box_plain.hh>
37 # include <scribo/core/component_set.hh>
38 # include <scribo/core/document.hh>
65 # ifndef MLN_INCLUDE_ONLY
71 mln_trace(
"scribo::filter::separators_in_element");
73 mln_precondition(doc.is_valid());
74 mln_precondition(doc.has_elements());
75 mln_precondition(doc.has_hline_seps() || doc.has_vline_seps());
77 if ((doc.has_hline_seps() && !doc.hline_seps_comps().nelements())
78 && (doc.has_vline_seps() && !doc.vline_seps_comps().nelements()))
82 initialize(billboard, doc.image());
85 for_all_comps(e, doc.elements())
86 if (doc.elements()(e).is_valid())
87 mln::draw::
box_plain(billboard, doc.elements()(e).
bbox(), true);
90 if (doc.has_hline_seps())
92 component_set<L> hline = doc.hline_seps_comps().duplicate();
93 for_all_comps(c, hline)
94 if (hline(c).is_valid())
96 const mln_box(L)& b_ = hline(c).bbox();
98 const bool tl = billboard(b_.pmin());
99 const bool tr = billboard.at_(b_.pmin().row(), b_.pmax().col());
100 const bool ml = billboard.at_(b_.pcenter().row(), b_.pmin().col());
101 const bool mc = billboard.at_(b_.pcenter().row(), b_.pcenter().col());
102 const bool mr = billboard.at_(b_.pcenter().row(), b_.pmax().col());
103 const bool bl = billboard.at_(b_.pmax().row(), b_.pmin().col());
104 const bool br = billboard(b_.pmax());
108 if (tl && tr && ml && mc && mr && bl && br)
113 doc.set_hline_separators(doc.hline_seps(), hline);
117 if (doc.has_vline_seps())
119 component_set<L> vline = doc.vline_seps_comps().duplicate();
120 for_all_comps(c, vline)
121 if (vline(c).is_valid())
123 const mln_box(L)& b_ = vline(c).bbox();
125 const bool tl = billboard(b_.pmin());
126 const bool tr = billboard.at_(b_.pmin().row(), b_.pmax().col());
127 const bool ml = billboard.at_(b_.pcenter().row(), b_.pmin().col());
128 const bool mc = billboard.at_(b_.pcenter().row(), b_.pcenter().col());
129 const bool mr = billboard.at_(b_.pcenter().row(), b_.pmax().col());
130 const bool bl = billboard.at_(b_.pmax().row(), b_.pmin().col());
131 const bool br = billboard(b_.pmax());
135 if (tl && tr && ml && mc && mr && bl && br)
140 doc.set_vline_separators(doc.vline_seps(), vline);
145 # endif // ! MLN_INCLUDE_ONLY
151 #endif // ! SCRIBO_FILTER_SEPARATORS_IN_ELEMENT_HH