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 #include <vector>
00027
00028 #include <mln/core/image/vertex_image.hh>
00029 #include <mln/make/vertex_image.hh>
00030 #include <mln/core/image/image2d.hh>
00031 #include <mln/accu/shape/bbox.hh>
00032 #include <mln/fun/i2v/array.hh>
00033 #include <mln/util/graph.hh>
00034 #include <mln/debug/draw_graph.hh>
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 static const unsigned X = mln_max(unsigned);
00053
00054
00055
00056
00057 static unsigned expected_fwd_nb[5][3] = { { 1, X, X },
00058 { 0, 2, 3 },
00059 { 1, 4, X },
00060 { 1, 4, X },
00061 { 3, 2, X } };
00062
00063 static unsigned expected_bkd_nb[5][3] = { { 1, X, X },
00064 { 3, 2, 0 },
00065 { 4, 1, X },
00066 { 4, 1, X },
00067 { 2, 3, X } };
00068
00069
00070 int main()
00071 {
00072 using namespace mln;
00073
00074
00075
00076
00077
00078
00079 typedef fun::i2v::array<point2d> fsite_t;
00080 fsite_t sites(5);
00081 sites(0) = point2d(0,0);
00082 sites(1) = point2d(2,2);
00083 sites(2) = point2d(0,4);
00084 sites(3) = point2d(4,3);
00085 sites(4) = point2d(4,4);
00086
00087
00088 util::graph g;
00089
00090
00091 g.add_vertices(sites.size());
00092
00093
00094 g.add_edge(0, 1);
00095 g.add_edge(1, 2);
00096 g.add_edge(1, 3);
00097 g.add_edge(3, 4);
00098 g.add_edge(4, 2);
00099
00100
00101
00102
00103
00104
00105
00106
00107 typedef fun::i2v::array<unsigned> viota_t;
00108 viota_t iota(g.v_nmax());
00109 for (unsigned i = 0; i < iota.size(); ++i)
00110 iota(i) = 10 + i;
00111
00112
00113
00115
00116 {
00117 typedef vertex_image<point2d,unsigned> ima_t;
00118 ima_t ima = make::vertex_image(g, sites, iota);
00119
00120 {
00121
00122
00123
00124 accu::shape::bbox<point2d> a;
00125 mln_piter_(ima_t) p(ima.domain());
00126 for_all(p)
00127 a.take(p);
00128 box2d bbox = a.to_result();
00129 mln_assertion(bbox == make::box2d(5, 5));
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149 image2d<int> ima_rep(bbox);
00150
00151
00152
00153 debug::draw_graph(ima_rep, ima.domain(), 1, 9);
00154 }
00155
00156
00157
00158
00159
00160
00161 mln_piter_(ima_t) p(ima.domain());
00162 unsigned i = 10;
00163 for_all(p)
00164 mln_assertion(ima(p) == i++);
00165
00166 typedef ima_t::win_t win_t;
00167 win_t win;
00168
00169 {
00170
00171 mln_qiter_(win_t) q(win, p);
00172 for_all(p)
00173 {
00174 i = 0;
00175 for_all(q)
00176 {
00177 mln_assertion(expected_fwd_nb[p.id()][i] == q.id());
00178 ++i;
00179 }
00180 }
00181 }
00182
00183 {
00184
00185 mln_bkd_qiter_(win_t) q(win, p);
00186 for_all(p)
00187 {
00188 i = 0;
00189 for_all(q)
00190 {
00191 mln_assertion(expected_bkd_nb[p.id()][i] == q.id());
00192 ++i;
00193 }
00194 }
00195 }
00196
00197 typedef ima_t::nbh_t nbh_t;
00198 nbh_t neigh;
00199 {
00200
00201 mln_niter_(nbh_t) n(neigh, p);
00202
00203 for_all(p)
00204 {
00205 i = 0;
00206 for_all(n)
00207 {
00208 mln_assertion(expected_fwd_nb[p.id()][i] == n.id());
00209 ++i;
00210 }
00211 }
00212 }
00213
00214 {
00215
00216 mln_bkd_niter_(nbh_t) n(neigh, p);
00217 for_all(p)
00218 {
00219 i = 0;
00220 for_all(n)
00221 {
00222 mln_assertion(expected_bkd_nb[p.id()][i] == n.id());
00223 ++i;
00224 }
00225 }
00226 }
00227 }
00228
00229
00230
00233
00234 {
00235 typedef vertex_image<void,unsigned> ima_void_t;
00236 ima_void_t ima_void(g, iota);
00237
00238
00239 mln_piter_(ima_void_t) p(ima_void.domain());
00240 unsigned i = 10;
00241 for_all(p)
00242 mln_assertion(ima_void(p) == i++);
00243
00244 typedef ima_void_t::win_t win_t;
00245 win_t win;
00246
00247 {
00248
00249 mln_qiter_(win_t) q(win, p);
00250 for_all(p)
00251 {
00252 i = 0;
00253 for_all(q)
00254 {
00255 mln_assertion(expected_fwd_nb[p.id()][i] == q.id());
00256 ++i;
00257 }
00258 }
00259 }
00260
00261 {
00262
00263 mln_bkd_qiter_(win_t) q(win, p);
00264 for_all(p)
00265 {
00266 i = 0;
00267 for_all(q)
00268 {
00269 mln_assertion(expected_bkd_nb[p.id()][i] == q.id());
00270 ++i;
00271 }
00272 }
00273 }
00274
00275 typedef ima_void_t::nbh_t nbh_t;
00276 nbh_t neigh;
00277 {
00278
00279 mln_niter_(nbh_t) n(neigh, p);
00280
00281 for_all(p)
00282 {
00283 i = 0;
00284 for_all(n)
00285 {
00286
00287 mln_assertion(expected_fwd_nb[p.id()][i] == n.element().id());
00288 ++i;
00289 }
00290 }
00291 }
00292
00293 {
00294
00295 mln_bkd_niter_(nbh_t) n(neigh, p);
00296 for_all(p)
00297 {
00298 i = 0;
00299 for_all(n)
00300 {
00301
00302 mln_assertion(expected_bkd_nb[p.id()][i] == n.element().id());
00303 ++i;
00304 }
00305 }
00306 }
00307 }
00308 }