32 #include "DGtal/base/Common.h"
33 #include "DGtal/kernel/SpaceND.h"
34 #include "DGtal/kernel/domains/DomainPredicate.h"
35 #include "DGtal/kernel/domains/HyperRectDomain.h"
36 #include "DGtal/kernel/sets/DigitalSetSelector.h"
37 #include "DGtal/kernel/sets/DigitalSetConverter.h"
38 #include "DGtal/topology/MetricAdjacency.h"
39 #include "DGtal/topology/DomainMetricAdjacency.h"
40 #include "DGtal/topology/DomainAdjacency.h"
41 #include "DGtal/topology/DigitalTopology.h"
42 #include "DGtal/topology/Object.h"
43 #include "DGtal/topology/Expander.h"
44 #include "DGtal/io/boards/Board2D.h"
45 #include "DGtal/io/colormaps/GradientColorMap.h"
46 #include "DGtal/io/Color.h"
47 #include "DGtal/helpers/StdDefs.h"
51 using namespace DGtal;
57 virtual void setStyle(
Board2D & aboard)
const
65 virtual void setStyle(
Board2D & aboard)
const
77 bool testSimpleExpander()
79 unsigned int nbok = 0;
103 Domain domain( p1, p2 );
107 DT8_4 dt8_4(adj8, adj4, JORDAN_DT );
111 DigitalSet houseSet( domain );
113 for (
int k = -3; k < 3 ; k++)
115 houseSet.insert(Point(k, -3));
116 houseSet.insert(Point(-3, k));
117 houseSet.insert(Point(3, k));
118 houseSet.insert(Point(k, 3));
122 DigitalSet houseSetCompl( domain);
123 houseSetCompl.assignFromComplement( houseSet );
126 ObjectType house8( dt8_4, houseSet );
127 ObjectType houseCompl8( dt8_4, houseSetCompl );
128 ObjectTypeReverseTopo house4(dt4_8, houseSet);
129 ObjectTypeReverseTopo houseCompl4( dt4_8, houseSetCompl );
138 board <<
SetMode( domain.className(),
"Grid" ) << domain;
139 board <<
SetMode( house4.className(),
"DrawAdjacencies" ) << house4;
140 ObjectExpanderReverseTopo expander(houseCompl4, Point(0, 0));
141 while (!expander.finished())
143 for ( ObjectExpander::ConstIterator it = expander.begin();
144 it != expander.end();
146 std::cout <<
" " << *it;
148 expander.nextLayer();
155 board <<
SetMode( domain.className(),
"Grid" ) << domain;
156 board <<
SetMode( house4.className(),
"DrawAdjacencies" ) << house4;
157 ObjectExpander expander8(houseCompl8, Point(0, 0));
158 while (!expander8.finished())
160 for ( ObjectExpander::ConstIterator it = expander8.begin();
161 it != expander8.end();
163 std::cout <<
" " << *it;
165 expander8.nextLayer();
172 board <<
SetMode( domain.className(),
"Grid" ) << domain;
173 board <<
SetMode( house8.className(),
"DrawAdjacencies" ) << house8;
174 ObjectExpander expander88(houseCompl8, Point(0, 0));
175 while (!expander88.finished())
177 for ( ObjectExpander::ConstIterator it = expander88.begin();
178 it != expander88.end();
180 std::cout <<
" " << *it;
182 expander88.nextLayer();
189 board <<
SetMode( domain.className(),
"Grid" ) << domain;
190 board <<
SetMode( house8.className(),
"DrawAdjacencies" ) << house8;
191 ObjectExpanderReverseTopo expander84(houseCompl4, Point(0, 0));
192 while (!expander84.finished())
194 for ( ObjectExpander::ConstIterator it = expander84.begin();
195 it != expander84.end();
197 std::cout <<
" " << *it;
199 expander84.nextLayer();
205 nbok +=
true ? 1 : 0;
207 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
208 <<
"true == true" << std::endl;
214 using namespace DGtal::Z2i;
220 cmap_grad.addColor(
Color( 128, 128, 255 ) );
221 cmap_grad.addColor(
Color( 255, 255, 128 ) );
222 cmap_grad.addColor(
Color( 128, 255, 128 ) );
223 cmap_grad.addColor(
Color( 128, 128, 128 ) );
236 Domain domain( p1, p2 );
240 DigitalSet houseSet( domain );
242 for (
int k = -3; k < 3 ; k++)
244 houseSet.insert(Point(k, -3));
245 houseSet.insert(Point(-3, k));
246 houseSet.insert(Point(3, k));
247 houseSet.insert(Point(k, 3));
251 DigitalSet houseSetCompl( domain);
252 houseSetCompl.assignFromComplement( houseSet );
255 ObjectType house8( dt8_4, houseSet );
256 ObjectType houseCompl8( dt8_4, houseSetCompl );
257 ObjectTypeReverseTopo house4( dt4_8, houseSet);
258 ObjectTypeReverseTopo houseCompl4( dt4_8, houseSetCompl );
267 board <<
SetMode( domain.className(),
"Grid" ) << domain;
268 board <<
SetMode( house4.className(),
"DrawAdjacencies" ) << house4;
269 ObjectExpanderReverseTopo expander(houseCompl4, Point(0, 0));
273 while (!expander.finished())
275 for ( ObjectExpander::ConstIterator it = expander.begin();
276 it != expander.end();
278 std::cout <<
" " << *it;
279 board <<
CustomStyle( expander.layer().className(),
281 ( cmap_grad( expander.distance() ) ) )
284 expander.nextLayer();
286 board.
saveSVG(
"house-layers4-4.svg");
290 board <<
SetMode( domain.className(),
"Grid" ) << domain;
291 board <<
SetMode( house4.className(),
"DrawAdjacencies" ) << house4;
292 ObjectExpander expander8(houseCompl8, Point(0, 0));
296 while (!expander8.finished())
298 for ( ObjectExpander::ConstIterator it = expander8.begin();
299 it != expander8.end();
301 std::cout <<
" " << *it;
303 board <<
CustomStyle( expander8.layer().className(),
305 ( cmap_grad( expander8.distance() ) ) )
306 << expander8.layer();
307 expander8.nextLayer();
309 board.
saveSVG(
"house-layers4-8.svg");
317 int main(
int argc,
char** argv )
320 for (
int i = 0; i < argc; ++i )
324 bool res = testSimpleExpander()
326 trace.
emphase() << ( res ?
"Passed." :
"Error." ) << endl;