44 #include "DGtal/base/Common.h"
46 #include "DGtal/helpers/StdDefs.h"
47 #include "DGtal/topology/KhalimskySpaceND.h"
48 #include "DGtal/topology/SurfelAdjacency.h"
49 #include "DGtal/topology/DigitalSurface.h"
50 #include "DGtal/topology/SetOfSurfels.h"
51 #include "DGtal/topology/DigitalSurface2DSlice.h"
52 #include "DGtal/topology/helpers/Surfaces.h"
54 #include "DGtal/io/readers/VolReader.h"
55 #include "DGtal/io/DrawWithDisplay3DModifier.h"
56 #include "DGtal/io/viewers/Viewer3D.h"
57 #include "DGtal/images/ImageSelector.h"
58 #include "DGtal/images/imagesSetsUtils/SetFromImage.h"
59 #include "DGtal/io/Color.h"
60 #include "DGtal/io/colormaps/GradientColorMap.h"
62 #include "ConfigExamples.h"
66 using namespace DGtal;
70 int main(
int argc,
char** argv )
73 QApplication application(argc,argv);
78 std::string inputFilename = examplesPath +
"samples/Al.100.vol";
80 DigitalSet set3d (image.domain());
89 trace.
beginBlock(
"Construct the Khalimsky space from the image domain." );
91 bool space_ok = ks.
init( image.domain().lowerBound(),
92 image.domain().upperBound(),
true );
95 trace.
error() <<
"Error in the Khamisky space construction."<<std::endl;
103 MySurfelAdjacency surfAdj(
true );
112 MySetOfSurfels theSetOfSurfels( ks, surfAdj );
116 image.domain().upperBound() );
118 trace.
info() <<
"Digital surface has " << digSurf.
size() <<
" surfels."
128 Surfel surf = *digSurf.
begin();
129 MyTracker* tracker1 = digSurf.
container().newTracker( surf );
130 MyTracker* tracker2 = digSurf.
container().newTracker( surf );
133 My2DSlice slice1( tracker1, *(ks.
sDirs( surf )) );
136 My2DSlice slice2( tracker2, *++(ks.
sDirs( surf )) );
142 ASSERT( slice1.start() == slice1.begin() );
143 ASSERT( slice1.cstart() == slice1.c() );
144 ASSERT( *slice1.begin() == surf );
145 ASSERT( *slice1.c() == surf );
146 ASSERT( *slice1.start() == surf );
147 ASSERT( *slice1.cstart() == surf );
148 ASSERT( *slice1.rcstart() == surf );
149 ASSERT( slice1.rcstart() == slice1.rc() );
150 ASSERT( *slice1.rc() == surf );
151 ASSERT( *(slice1.c()+1) == *(slice1.begin()+1) );
152 ASSERT( *(slice1.rc()+1) == *(slice1.rbegin()) );
157 viewer <<
SetMode3D( surf.className(),
"Transparent");
159 it_end = theSetOfSurfels.end(); it != it_end; ++it )
169 viewer << Viewer3D<>::shiftSurfelVisu;
170 viewer <<
SetMode3D( surf.className(),
"");
175 it_end = slice1.end(); it != it_end; ++it )
177 Color col= cmap_grad(d);
190 it_end = slice2.end(); it != it_end; ++it )
192 Color col= cmap_grad2(d);
199 viewer << Viewer3D<>::shiftSurfelVisu;
202 viewer << Viewer3D<>::updateDisplay;
205 return application.exec();