LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
lc::geo::Spline Class Reference

#include <geospline.h>

Inheritance diagram for lc::geo::Spline:
Collaboration diagram for lc::geo::Spline:

Public Types

enum  splineflag {
  CLOSED =1, PERIODIC =2, RATIONAL =4, PLANAR =8,
  LINEAR =16
}
 

Public Member Functions

 Spline (const std::vector< Coordinate > &control_points, const std::vector< double > &knotPoints, const std::vector< Coordinate > &fitPoints, int degree, bool closed, double fitTolerance, double stanx, double stany, double stanz, double etanx, double etany, double etanz, double nx, double ny, double nz, splineflag flags)
 
const std::vector< Coordinate > & controlPoints () const
 control_points, Returns Control points of spline More...
 
short degree () const
 degree, Returns degree of spline More...
 
const std::vector< double > & knotPoints () const
 Return a vector of knotpoints. More...
 
const std::vector< Coordinate > & fitPoints () const
 Return a vector of fitpoints. More...
 
double fitTolerance () const
 Returns the fit point tolerance of the spline. More...
 
double startTanX () const
 
double startTanY () const
 
double startTanZ () const
 
double endTanX () const
 
double endTanY () const
 
double endTanZ () const
 
double nX () const
 
double nY () const
 
double nZ () const
 
splineflag flags () const
 
bool closed () const
 closed, returns if spline is closed or not More...
 
const std::vector< BB_CSPtrbeziers () const
 
void generateBeziers ()
 
void trimAtPoint (const geo::Coordinate &c)
 
void populateCurve ()
 Fills the opennurbs curve with the data from spline constructor. More...
 
Coordinate nearestPointOnPath (const Coordinate &coord) const
 returns the nearest Point On Path More...
 
Coordinate nearestPointOnEntity (const Coordinate &coord) const
 returns the nearest Point On Entity itself. More...
 
virtual void accept (GeoEntityVisitor &v) const override
 
- Public Member Functions inherited from lc::geo::Base
virtual ~Base ()=default
 
- Public Member Functions inherited from lc::Visitable
virtual ~Visitable ()=default
 

Private Attributes

const std::vector< Coordinate_controlPoints
 
const std::vector< double > _knotPoints
 
const std::vector< Coordinate_fitPoints
 
const short _degree
 
const bool _closed
 
const double _fitTolerance
 
const double _sTanX
 
const double _sTanY
 
const double _sTanZ
 
const double _eTanX
 
const double _eTanY
 
const double _eTanZ
 
const double _nX
 
const double _nY
 
const double _nZ
 
ts::BSpline _splineCurve
 
std::vector< BB_CSPtr_beziers
 
const splineflag _flags
 

Detailed Description

Definition at line 15 of file geospline.h.

Member Enumeration Documentation

Enumerator
CLOSED 
PERIODIC 
RATIONAL 
PLANAR 
LINEAR 

Definition at line 17 of file geospline.h.

Constructor & Destructor Documentation

lc::geo::Spline::Spline ( const std::vector< Coordinate > &  control_points,
const std::vector< double > &  knotPoints,
const std::vector< Coordinate > &  fitPoints,
int  degree,
bool  closed,
double  fitTolerance,
double  stanx,
double  stany,
double  stanz,
double  etanx,
double  etany,
double  etanz,
double  nx,
double  ny,
double  nz,
splineflag  flags 
)
inline

Definition at line 24 of file geospline.h.

30  :
31  Base(),
32  _controlPoints(control_points),
37  _sTanX(stanx), _sTanY(stany), _sTanZ(stanz),
38  _eTanX(etanx), _eTanY(etany), _eTanZ(etanz),
39  _nX(nx), _nY(ny), _nZ(nz), _flags(flags) {
40  populateCurve();
42  }
const double _sTanZ
Definition: geospline.h:136
splineflag flags() const
Definition: geospline.cpp:61
const splineflag _flags
Definition: geospline.h:148
const double _eTanX
Definition: geospline.h:138
const std::vector< Coordinate > _controlPoints
Definition: geospline.h:125
short degree() const
degree, Returns degree of spline
Definition: geospline.cpp:14
double fitTolerance() const
Returns the fit point tolerance of the spline.
Definition: geospline.cpp:64
const double _nX
Definition: geospline.h:142
const double _eTanZ
Definition: geospline.h:140
const double _sTanX
Definition: geospline.h:134
const double _nZ
Definition: geospline.h:144
void populateCurve()
Fills the opennurbs curve with the data from spline constructor.
Definition: geospline.cpp:81
const double _fitTolerance
Definition: geospline.h:132
const std::vector< Coordinate > _fitPoints
Definition: geospline.h:127
bool closed() const
closed, returns if spline is closed or not
Definition: geospline.cpp:10
const short _degree
Definition: geospline.h:129
const double _sTanY
Definition: geospline.h:135
const bool _closed
Definition: geospline.h:130
const std::vector< double > & knotPoints() const
Return a vector of knotpoints.
Definition: geospline.cpp:18
const double _eTanY
Definition: geospline.h:139
const double _nY
Definition: geospline.h:143
const std::vector< Coordinate > & fitPoints() const
Return a vector of fitpoints.
Definition: geospline.cpp:22
void generateBeziers()
Definition: geospline.cpp:110
const std::vector< double > _knotPoints
Definition: geospline.h:126

Member Function Documentation

virtual void lc::geo::Spline::accept ( GeoEntityVisitor v) const
inlineoverridevirtual

Implements lc::Visitable.

Reimplemented in lc::entity::Spline.

Definition at line 122 of file geospline.h.

122 { v.visit(*this); }
const std::vector< BB_CSPtr > Spline::beziers ( ) const

Definition at line 102 of file geospline.cpp.

102  {
103  return _beziers;
104 }
std::vector< BB_CSPtr > _beziers
Definition: geospline.h:147
bool Spline::closed ( ) const

closed, returns if spline is closed or not

Returns
bool closed

Definition at line 10 of file geospline.cpp.

10  {
11  return _closed;
12 }
const bool _closed
Definition: geospline.h:130
const std::vector< Coordinate > & Spline::controlPoints ( ) const

control_points, Returns Control points of spline

Returns
vector<Coordinate> controlpoints

Definition at line 6 of file geospline.cpp.

6  {
7  return _controlPoints;
8 }
const std::vector< Coordinate > _controlPoints
Definition: geospline.h:125
short Spline::degree ( ) const

degree, Returns degree of spline

Returns
int degree

Definition at line 14 of file geospline.cpp.

14  {
15  return _degree;
16 }
const short _degree
Definition: geospline.h:129
double Spline::endTanX ( ) const

Definition at line 40 of file geospline.cpp.

40  {
41  return _eTanX;
42 }
const double _eTanX
Definition: geospline.h:138
double Spline::endTanY ( ) const

Definition at line 44 of file geospline.cpp.

44  {
45  return _eTanY;
46 }
const double _eTanY
Definition: geospline.h:139
double Spline::endTanZ ( ) const

Definition at line 48 of file geospline.cpp.

48  {
49  return _eTanZ;
50 }
const double _eTanZ
Definition: geospline.h:140
const std::vector< Coordinate > & Spline::fitPoints ( ) const

Return a vector of fitpoints.

Returns
vector of Coordinate

Definition at line 22 of file geospline.cpp.

22  {
23  return _fitPoints;
24 }
const std::vector< Coordinate > _fitPoints
Definition: geospline.h:127
double Spline::fitTolerance ( ) const

Returns the fit point tolerance of the spline.

Returns
double tolerance value

Definition at line 64 of file geospline.cpp.

64  {
65  return _fitTolerance;
66 }
const double _fitTolerance
Definition: geospline.h:132
Spline::splineflag Spline::flags ( ) const

Definition at line 61 of file geospline.cpp.

61  {
62  return _flags;
63 }
const splineflag _flags
Definition: geospline.h:148
void Spline::generateBeziers ( )

Definition at line 110 of file geospline.cpp.

110  {
111  auto beziers = _splineCurve.toBeziers();
112 
113  int nbBeziers = beziers.nCtrlp() / _splineCurve.order();
114  int nbCoordinate = _splineCurve.order() * _splineCurve.dim();
115 
116  if(_splineCurve.deg() == 2) {
117  for (int i = 0; i < nbBeziers; i++) {
118  std::vector<geo::Coordinate> bez;
119 
120  auto j = nbCoordinate * i;
121  auto end = nbCoordinate * (i+1);
122 
123  while(j < end) {
124  lc::geo::Coordinate cp(beziers.ctrlp()[j], beziers.ctrlp()[j+1], beziers.ctrlp()[j+2]);
125  bez.push_back(cp);
126  j = j + 3;
127  }
128 
129  _beziers.push_back(std::make_shared<Bezier>(bez.at(0),bez.at(1),bez.at(2)));
130  }
131  } else if(_splineCurve.deg() == 3) {
132  for (int i = 0; i < nbBeziers; i++) {
133  std::vector<geo::Coordinate> bez;
134 
135  auto j = nbCoordinate * i;
136  auto end = nbCoordinate * (i+1);
137 
138  while(j < end) {
139  lc::geo::Coordinate cp(beziers.ctrlp()[j], beziers.ctrlp()[j+1], beziers.ctrlp()[j+2]);
140  bez.push_back(cp);
141 
142  j = j + 3;
143  }
144 
145  _beziers.push_back(std::make_shared<CubicBezier>(bez.at(0),bez.at(1),bez.at(2),bez.at(3)));
146  }
147  }
148 }
size_t dim() const
BSpline toBeziers() const
size_t deg() const
std::vector< BB_CSPtr > _beziers
Definition: geospline.h:147
size_t order() const
ts::BSpline _splineCurve
Definition: geospline.h:146
const std::vector< BB_CSPtr > beziers() const
Definition: geospline.cpp:102
const std::vector< double > & Spline::knotPoints ( ) const

Return a vector of knotpoints.

Returns
vector of double

Definition at line 18 of file geospline.cpp.

18  {
19  return _knotPoints;
20 }
const std::vector< double > _knotPoints
Definition: geospline.h:126
Coordinate Spline::nearestPointOnEntity ( const Coordinate coord) const

returns the nearest Point On Entity itself.

Parameters
lc::geo::Coordinatecoord
Returns
lc::geo::Coordinate nearest coordinate

Definition at line 74 of file geospline.cpp.

74  {
75  /* TODO implement
76  * fix compiler warning
77  */
78  return Coordinate();
79 }
Coordinate Spline::nearestPointOnPath ( const Coordinate coord) const

returns the nearest Point On Path

Parameters
lc::geo::Coordinatecoord
Returns
lc::geo::Coordinate nearest coordinate

Definition at line 68 of file geospline.cpp.

68  {
69  /* TODO implement
70  * fix compiler warning
71  */
72  return Coordinate();
73 }
double Spline::nX ( ) const

Definition at line 52 of file geospline.cpp.

52  {
53  return _nX;
54 }
const double _nX
Definition: geospline.h:142
double Spline::nY ( ) const

Definition at line 55 of file geospline.cpp.

55  {
56  return _nY;
57 }
const double _nY
Definition: geospline.h:143
double Spline::nZ ( ) const

Definition at line 58 of file geospline.cpp.

58  {
59  return _nZ;
60 }
const double _nZ
Definition: geospline.h:144
void Spline::populateCurve ( )

Fills the opennurbs curve with the data from spline constructor.

Definition at line 81 of file geospline.cpp.

81  {
82  try {
83  auto nbControlPoints = _controlPoints.size();
84 
85  _splineCurve = ts::BSpline(degree(), 3, nbControlPoints, TS_CLAMPED);
86 
87  //Set control points
88  std::vector<ts::rational> ts_controlPoints;
89  for (auto cp : _controlPoints) {
90  ts_controlPoints.push_back(cp.x());
91  ts_controlPoints.push_back(cp.y());
92  ts_controlPoints.push_back(cp.z());
93  }
94 
95  _splineCurve.setCtrlp(ts_controlPoints);
96  }
97  catch (std::runtime_error e) {
99  }
100 }
const std::vector< Coordinate > _controlPoints
Definition: geospline.h:125
short degree() const
degree, Returns degree of spline
Definition: geospline.cpp:14
ts::BSpline _splineCurve
Definition: geospline.h:146
void setCtrlp(const std::vector< rational > ctrlp)
double Spline::startTanX ( ) const

Definition at line 27 of file geospline.cpp.

27  {
28  return _sTanX;
29 }
const double _sTanX
Definition: geospline.h:134
double Spline::startTanY ( ) const

Definition at line 31 of file geospline.cpp.

31  {
32  return _sTanY;
33 }
const double _sTanY
Definition: geospline.h:135
double Spline::startTanZ ( ) const

Definition at line 35 of file geospline.cpp.

35  {
36  return _sTanZ;
37 
38 }
const double _sTanZ
Definition: geospline.h:136
void Spline::trimAtPoint ( const geo::Coordinate c)

Definition at line 150 of file geospline.cpp.

150  {
151  for(const auto & bez : _beziers) {
152  if(bez->boundingBox().inArea(c)) {
153 
154  }
155  }
156 }
std::vector< BB_CSPtr > _beziers
Definition: geospline.h:147

Member Data Documentation

std::vector<BB_CSPtr> lc::geo::Spline::_beziers
private

Definition at line 147 of file geospline.h.

const bool lc::geo::Spline::_closed
private

Definition at line 130 of file geospline.h.

const std::vector<Coordinate> lc::geo::Spline::_controlPoints
private

Definition at line 125 of file geospline.h.

const short lc::geo::Spline::_degree
private

Definition at line 129 of file geospline.h.

const double lc::geo::Spline::_eTanX
private

Definition at line 138 of file geospline.h.

const double lc::geo::Spline::_eTanY
private

Definition at line 139 of file geospline.h.

const double lc::geo::Spline::_eTanZ
private

Definition at line 140 of file geospline.h.

const std::vector<Coordinate> lc::geo::Spline::_fitPoints
private

Definition at line 127 of file geospline.h.

const double lc::geo::Spline::_fitTolerance
private

Definition at line 132 of file geospline.h.

const splineflag lc::geo::Spline::_flags
private

Definition at line 148 of file geospline.h.

const std::vector<double> lc::geo::Spline::_knotPoints
private

Definition at line 126 of file geospline.h.

const double lc::geo::Spline::_nX
private

Definition at line 142 of file geospline.h.

const double lc::geo::Spline::_nY
private

Definition at line 143 of file geospline.h.

const double lc::geo::Spline::_nZ
private

Definition at line 144 of file geospline.h.

ts::BSpline lc::geo::Spline::_splineCurve
private

Definition at line 146 of file geospline.h.

const double lc::geo::Spline::_sTanX
private

Definition at line 134 of file geospline.h.

const double lc::geo::Spline::_sTanY
private

Definition at line 135 of file geospline.h.

const double lc::geo::Spline::_sTanZ
private

Definition at line 136 of file geospline.h.


The documentation for this class was generated from the following files: