DGtal 1.4.0
Loading...
Searching...
No Matches
exampleParamCurve3dDigitizationTransformationDecorator.cpp File Reference
#include <iostream>
#include "DGtal/base/Common.h"
#include "DGtal/helpers/StdDefs.h"
#include "ConfigExamples.h"
#include "DGtal/io/viewers/Viewer3D.h"
#include "DGtal/geometry/curves/parametric/EllipticHelix.h"
#include "DGtal/geometry/curves/parametric/NaiveParametricCurveDigitizer3D.h"
#include "DGtal/geometry/curves/parametric/DecoratorParametricCurveTransformation.h"
#include "DGtal/images/RigidTransformation3D.h"
Include dependency graph for exampleParamCurve3dDigitizationTransformationDecorator.cpp:

Go to the source code of this file.

Functions

template<typename T >
unsigned char findMainAxis (const T &curve, const long double &t)
 
int main (int argc, char **argv)
 

Detailed Description

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Author
Kacper Pluta (kacper.pluta@esiee.fr ) Laboratoire d'Informatique Gaspard-Monge - LIGM, A3SI, France
Date
2018/08/03

An example file for DecoratorParametricCurveTransformation.h.

This file is part of the DGtal library.

Definition in file exampleParamCurve3dDigitizationTransformationDecorator.cpp.

Function Documentation

◆ findMainAxis()

template<typename T >
unsigned char findMainAxis ( const T & curve,
const long double & t )
inline

Definition at line 57 of file exampleParamCurve3dDigitizationTransformationDecorator.cpp.

58{
59 RealPoint value;
60 value[0] = std::abs ( curve.xp ( t )[0] );
61 value[1] = std::abs ( curve.xp ( t )[1] );
62 value[2] = std::abs ( curve.xp ( t )[2] );
63
64 if ( value[0] >= value[1] && value[0] >= value[2] )
65 return 0;
66 else if ( value[1] >= value[0] && value[1] >= value[2] )
67 return 1;
68 else
69 return 2;
70}
Aim: Implements basic operations that will be used in Point and Vector classes.

Referenced by main().

◆ main()

int main ( int argc,
char ** argv )

[DigiRotHelixConstr]

[DigiRotHelixConstr]

[DigiRotHelixConstrCurve]

[DigiRotHelixConstrCurve]

[DigiRotHelixConstrRot]

[DigiRotHelixConstrRot]

[DigiRotHelixDigitize]

[DigiRotHelixDigitize]

Definition at line 73 of file exampleParamCurve3dDigitizationTransformationDecorator.cpp.

74{
75 QApplication application(argc,argv);
77 typedef EllipticHelix < Space > MyHelix;
78 typedef ForwardRigidTransformation3D < Space, RealPoint, RealPoint, Identity > ForwardTrans;
79 typedef DecoratorParametricCurveTransformation < MyHelix, ForwardTrans > MyRotatedCurve;
80 typedef NaiveParametricCurveDigitizer3D < MyRotatedCurve > Digitizer;
84 trace.info() << "exampleParamCurve3dDigitizationTransformationDecorator" << endl;
85
86 Viewer3D<> viewer;
87
88 MyMetaData metaData;
89
91 MyDigitalCurve digitalCurve;
92 MyHelix helix( 30, 20, 1 );
94
96 double angle = M_PI/3.;
97 RealVector axis ( 1., 0., 1. );
98 ForwardTrans trans ( RealPoint ( 0, 0, 0 ), axis, angle, RealVector ( 0, 0, 0 ) );
99 MyRotatedCurve rotCurve ( helix, trans );
101
103 Digitizer digitize;
104 digitize.attach ( &rotCurve );
105 digitize.init ( 0, MyHelix::getPeriod() * 10., 0.0001 );
106 digitize.digitize( back_insert_iterator < MyDigitalCurve> ( digitalCurve ), back_insert_iterator < MyMetaData > ( metaData ) );
108
109 trace.info() << "Number of points: " << digitalCurve.size () << " number of metadata: " << metaData.size () << endl;
110
111 viewer.show();
112 for ( unsigned int i = 0; i < digitalCurve.size ( ); i++ )
113 {
114 if ( findMainAxis ( rotCurve, metaData.at ( i ).first ) == 0 )
115 viewer.setFillColor ( Color ( 255, 0, 0, 128 ) );
116 if ( findMainAxis ( rotCurve, metaData.at ( i ).first ) == 1 )
117 viewer.setFillColor ( Color ( 0, 255, 0, 128 ) );
118 if ( findMainAxis ( rotCurve, metaData.at ( i ).first ) == 2 )
119 viewer.setFillColor ( Color ( 0, 0, 255, 128 ) );
120 viewer << SetMode3D ( digitalCurve.at ( i ).className ( ), "PavingWired" ) << digitalCurve.at ( i );
121 }
122 viewer << Viewer3D<>::updateDisplay;
123
124 return application.exec();
125}
Structure representing an RGB triple with alpha component.
Definition Color.h:68
virtual void setFillColor(DGtal::Color aColor)
std::vector< std::pair< long double, unsigned int > > MetaData
std::vector< Point > DigitalCurve
Digital curve type.
std::ostream & info()
virtual void show()
Overload QWidget method in order to add a call to updateList() method (to ensure that the lists are w...
unsigned char findMainAxis(const T &curve, const long double &t)
Trace trace
Definition Common.h:153
Modifier class in a Display3D stream. Useful to choose your own mode for a given class....
void digitize(Shape &shape, std::vector< SCell > &sCells0, std::vector< SCell > &sCells1, KSpace &kspace, const double h)

References digitize(), findMainAxis(), DGtal::Trace::info(), DGtal::Display3D< Space, KSpace >::setFillColor(), DGtal::Viewer3D< TSpace, TKSpace >::show(), and DGtal::trace.