DGtal 1.4.0
Loading...
Searching...
No Matches
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();
151it != 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
static const Color Black
Definition Color.h:413
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.
Aim: A model of CDigitalSurfaceContainer which defines the digital surface as connected surfels....
std::pair< double, double > AngularCoordinates
static void trackBoundary(SCellSet &surface, const KSpace &K, const SurfelAdjacency< KSpace::dimension > &surfel_adj, const PointPredicate &pp, const SCell &start_surfel)
static SCell findABel(const KSpace &K, const PointPredicate &pp, unsigned int nbtries=1000)
Aim: Represent adjacencies between surfel elements, telling if it follows an interior to exterior ord...
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
Space::RealPoint RealPoint
Definition StdDefs.h:170
DGtal is the top-level namespace which contains all DGtal functions and types.
STL namespace.
Aim: A trivial embedder for signed cell, which corresponds to the canonic injection of cell centroids...
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()
Definition testBits.cpp:56
KSpace K
Domain domain