DGtal  1.5.beta
testBall3D.cpp
Go to the documentation of this file.
1 
30 #include "DGtal/shapes/parametric/Ball3D.h"
31 #include "DGtal/helpers/StdDefs.h"
32 #include <iostream>
33 #include "DGtal/shapes/GaussDigitizer.h"
34 #include "DGtal/io/Color.h"
35 #include "DGtal/topology/SurfelAdjacency.h"
36 #include "DGtal/topology/DigitalSurface.h"
37 #include "DGtal/topology/helpers/BoundaryPredicate.h"
38 #include "DGtal/topology/SetOfSurfels.h"
39 #include "DGtal/io/colormaps/GradientColorMap.h"
40 #include "DGtal/topology/SCellsFunctors.h"
41 #include "DGtal/io/viewers/Viewer3D.h"
43 
44  using namespace std;
45  using namespace DGtal;
46  using namespace Z3i;
47 
49 // Standard services - public :
50 
51 
52  int main(int argc, char** argv)
53  {
54 
55 
56 
57  // -------------------------------------------------------------------------- Type declaring
59  typedef Ball3D<Space> EuclideanShape;
61 
62 
63  // -------------------------------------------------------------------------- Creating the shape
64  RealPoint c1(0, 0, 0 );
65  EuclideanShape ball1( c1, 12.2 );
66 
67  // -------------------------------------------------------------------------- GaussDigitizing
68  DigitalShape dshape;
69  dshape.attach( ball1 );
70  RealPoint p1 =RealPoint( -15.0, -15.0, -15.0 );
71  RealPoint p2 =RealPoint( 15.0, 15.0, 15.0 );
72  dshape.init( RealPoint( p1 ), RealPoint( p2 ), 1.0);
73  Domain domain = dshape.getDomain();
74 
75 
76  // -------------------------------------------------------------------------- Khalimskhy
77  KSpace K;
78  bool space_ok = K.init( domain.lowerBound(), domain.upperBound(), true );
79  if (!space_ok)
80  {
81  return 2;
82  }
83 
84 
85  // -------------------------------------------------------------------------- Other types
86  typedef SurfelAdjacency<KSpace::dimension> MySurfelAdjacency;
87  typedef KSpace::Surfel Surfel;
89  typedef SetOfSurfels< KSpace, SurfelSet > MySetOfSurfels;
90 
91 
92  // -------------------------------------------------------------------------- Tracking the boudnadry
93  MySurfelAdjacency surfAdj( true ); // interior in all directions.
94  MySetOfSurfels theSetOfSurfels( K, surfAdj );
95  Surfel bel = Surfaces<KSpace>::findABel( K, dshape, 1000 );
96  Surfaces<KSpace>::trackBoundary( theSetOfSurfels.surfelSet(), K, surfAdj, dshape, bel );
97 
98 
99 
100  QApplication application(argc,argv);
101  Viewer3D<> viewer;
102  viewer.show();
103  viewer << SetMode3D( domain.className(), "BoundingBox" ) << domain;
104 
105 
106 
107 
108 
109 //-----------------------------------------------------------------------
110 // Looking for the min and max values
111 
112  double minCurv=1;
113  double maxCurv=0;
115  for ( std::set<SCell>::iterator it = theSetOfSurfels.begin(), it_end = theSetOfSurfels.end();
116  it != it_end; ++it)
117  {
118 
119  RealPoint A = midpoint( *it );
120  DGtal::StarShaped3D<Space>::AngularCoordinates Angles= ball1.parameter(A);
121  double a =ball1.meanCurvature(Angles);
122 // double a =ball1.gaussianCurvature(Angles);
123 
124  if(a>maxCurv)
125  {
126  maxCurv=a;
127  }
128  if(a<minCurv)
129  {
130  minCurv=a;
131  }
132  }
133 
134 //-----------------------------------------------------------------------
135 //Specifing a color map
136 
137  GradientColorMap<double> cmap_grad( minCurv, maxCurv+1 );
138  cmap_grad.addColor( Color( 50, 50, 255 ) );
139  cmap_grad.addColor( Color( 255, 0, 0 ) );
140  cmap_grad.addColor( Color( 255, 255, 10 ) );
141 
142 
143 //-----------------------------------------------------------------------
144 //Drawing the ball && giving a color to the surfels( depending on the
145 //curvature)
146 
147  unsigned int nbSurfels = 0;
148 
149 
150  for ( std::set<SCell>::iterator it = theSetOfSurfels.begin(), it_end = theSetOfSurfels.end();
151 it != it_end; ++it, ++nbSurfels )
152  {
153  RealPoint A = midpoint( *it );
154 
155  DGtal::StarShaped3D<Space>::AngularCoordinates Angles= ball1.parameter(A);
156  double curvature =ball1.meanCurvature(Angles);
157 // double curvature =ball1.gaussianCurvature(Angles);
158  viewer << CustomColors3D( Color::Black, cmap_grad( curvature));
159  viewer << *it;
160  }
161 
162 
163 
164  viewer << Viewer3D<>::updateDisplay;
165 
166  return application.exec();
167 }
168 // //
170 
171 
Aim: Model of the concept StarShaped3D represents any Sphere in the space.
Definition: Ball3D.h:61
Structure representing an RGB triple with alpha component.
Definition: Color.h:68
Aim: A class for computing the Gauss digitization of some Euclidean shape, i.e. its intersection with...
void attach(ConstAlias< EuclideanShape > shape)
void init(const RealPoint &xLow, const RealPoint &xUp, typename RealVector::Component gridStep)
Domain getDomain() const
Aim: This class template may be used to (linearly) convert scalar values in a given range into a colo...
void addColor(const Color &color)
const Point & lowerBound() const
const Point & upperBound() const
std::string className() const
Aim: This class is a model of CCellularGridSpaceND. It represents the cubical grid as a cell complex,...
std::set< SCell > SurfelSet
Preferred type for defining a set of surfels (always signed cells).
bool init(const Point &lower, const Point &upper, bool isClosed)
Specifies the upper and lower bounds for the maximal cells in this space.
Aim: Implements basic operations that will be used in Point and Vector classes.
Definition: PointVector.h:593
Aim: A model of CDigitalSurfaceContainer which defines the digital surface as connected surfels....
Definition: SetOfSurfels.h:74
std::pair< double, double > AngularCoordinates
Definition: StarShaped3D.h:77
Aim: A utility class for constructing surfaces (i.e. set of (n-1)-cells).
Definition: Surfaces.h:79
virtual void show()
Overload QWidget method in order to add a call to updateList() method (to ensure that the lists are w...
MyDigitalSurface::SurfelSet SurfelSet
DGtal is the top-level namespace which contains all DGtal functions and types.
Modifier class in a Display3D stream. Useful to choose your own mode for a given class....
Represents a signed cell in a cellular grid space by its Khalimsky coordinates and a boolean value.
int main(int argc, char **argv)
Definition: testBall3D.cpp:52
KSpace K
Domain domain
PointVector< 3, double > RealPoint