LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
geospline.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "geobase.h"
4 #include "geocoordinate.h"
5 #include <vector>
6 #include "cad/base/visitor.h"
11 
12 namespace lc {
13  namespace geo {
14 
15  class Spline : public Base, virtual public Visitable {
16  public:
17  enum splineflag {
18  CLOSED=1,
21  PLANAR=8,
22  LINEAR=16
23  };
24  Spline(const std::vector<Coordinate> &control_points,
25  const std::vector<double> &knotPoints,
26  const std::vector<Coordinate> &fitPoints,
27  int degree, bool closed, double fitTolerance,
28  double stanx, double stany, double stanz,
29  double etanx, double etany, double etanz,
30  double nx, double ny, double nz, splineflag flags) :
31  Base(),
32  _controlPoints(control_points),
33  _knotPoints(knotPoints),
34  _fitPoints(fitPoints),
35  _degree(degree), _closed(closed),
36  _fitTolerance(fitTolerance),
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  }
43 
48  const std::vector<Coordinate> &controlPoints() const;
49 
54  short degree() const;
59  const std::vector<double> &knotPoints() const;
60 
65  const std::vector<Coordinate> &fitPoints() const;
66 
71  double fitTolerance() const;
72 
73  // start tangent x coordinate
74  double startTanX() const;
75  // start tangent y coordinate
76  double startTanY() const;
77  // start tangent z coordinate
78  double startTanZ() const;
79 
80  // end tangent x coordinate
81  double endTanX() const;
82  // end tangent y coordinate
83  double endTanY() const;
84  // end tangent z coordinate
85  double endTanZ() const;
86 
87  // normal vector x coordinate
88  double nX() const;
89  // normal vector y coordinate
90  double nY() const;
91  // normal vector z coordinate
92  double nZ() const;
93  // Spline FLags
94  splineflag flags() const;
99  bool closed() const;
100  const std::vector<BB_CSPtr> beziers() const;
101  void generateBeziers();
102  void trimAtPoint(const geo::Coordinate& c);
103 
107  void populateCurve();
113  Coordinate nearestPointOnPath(const Coordinate &coord) const;
114 
120  Coordinate nearestPointOnEntity(const Coordinate &coord) const;
121 
122  virtual void accept(GeoEntityVisitor &v) const override { v.visit(*this); }
123 
124  private:
125  const std::vector<Coordinate> _controlPoints;
126  const std::vector<double> _knotPoints;
127  const std::vector<Coordinate> _fitPoints;
128 
129  const short _degree;
130  const bool _closed;
131 
132  const double _fitTolerance;
133 
134  const double _sTanX; // start tangent x coordinate
135  const double _sTanY; // start tangent y coordinate
136  const double _sTanZ; // start tangent z coordinate
137 
138  const double _eTanX; // end tangent x coordinate
139  const double _eTanY; // end tangent y coordinate
140  const double _eTanZ; // end tangent z coordinate
141 
142  const double _nX; // normal vector x coordinate
143  const double _nY; // normal vector y coordinate
144  const double _nZ; // normal vector z coordinate
145 
147  std::vector<BB_CSPtr> _beziers;
149  };
150  }
151 }
const double _sTanZ
Definition: geospline.h:136
splineflag flags() const
Definition: geospline.cpp:61
const splineflag _flags
Definition: geospline.h:148
double startTanY() const
Definition: geospline.cpp:31
const double _eTanX
Definition: geospline.h:138
double startTanZ() const
Definition: geospline.cpp:35
const std::vector< Coordinate > _controlPoints
Definition: geospline.h:125
short degree() const
degree, Returns degree of spline
Definition: geospline.cpp:14
std::vector< BB_CSPtr > _beziers
Definition: geospline.h:147
double fitTolerance() const
Returns the fit point tolerance of the spline.
Definition: geospline.cpp:64
double endTanX() const
Definition: geospline.cpp:40
const double _nX
Definition: geospline.h:142
const double _eTanZ
Definition: geospline.h:140
const double _sTanX
Definition: geospline.h:134
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)
Definition: geospline.h:24
const double _nZ
Definition: geospline.h:144
void populateCurve()
Fills the opennurbs curve with the data from spline constructor.
Definition: geospline.cpp:81
void trimAtPoint(const geo::Coordinate &c)
Definition: geospline.cpp:150
const double _fitTolerance
Definition: geospline.h:132
Coordinate nearestPointOnEntity(const Coordinate &coord) const
returns the nearest Point On Entity itself.
Definition: geospline.cpp:74
const std::vector< Coordinate > _fitPoints
Definition: geospline.h:127
ts::BSpline _splineCurve
Definition: geospline.h:146
double nX() const
Definition: geospline.cpp:52
bool closed() const
closed, returns if spline is closed or not
Definition: geospline.cpp:10
const std::vector< BB_CSPtr > beziers() const
Definition: geospline.cpp:102
const short _degree
Definition: geospline.h:129
Definition: cadentity.h:12
double endTanY() const
Definition: geospline.cpp:44
double nZ() const
Definition: geospline.cpp:58
const double _sTanY
Definition: geospline.h:135
const bool _closed
Definition: geospline.h:130
virtual void accept(GeoEntityVisitor &v) const override
Definition: geospline.h:122
Coordinate nearestPointOnPath(const Coordinate &coord) const
returns the nearest Point On Path
Definition: geospline.cpp:68
double nY() const
Definition: geospline.cpp:55
const std::vector< double > & knotPoints() const
Return a vector of knotpoints.
Definition: geospline.cpp:18
double endTanZ() const
Definition: geospline.cpp:48
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< Coordinate > & controlPoints() const
control_points, Returns Control points of spline
Definition: geospline.cpp:6
const std::vector< double > _knotPoints
Definition: geospline.h:126
double startTanX() const
Definition: geospline.cpp:27