LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
geobezier.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "cad/const.h"
4 #include "geoarea.h"
5 #include "geocoordinate.h"
6 #include "geobase.h"
7 #include <cad/math/lcmath.h>
8 #include <cmath>
9 #include <cstdlib>
10 #include <vector>
11 #include "geobezierbase.h"
12 
13 namespace lc {
14  namespace geo {
15  class Bezier : public BezierBase {
16  public:
20  Bezier(const Coordinate& point_a, const Coordinate& point_b, const Coordinate& point_c);
21 
22  Bezier(const Bezier &bez);
23 
28  virtual const std::vector<Coordinate> getCP() const override;
29 
34  virtual const Area boundingBox() const override ;
35 
41  virtual Coordinate nearestPointOnPath(const Coordinate& coord) const override;
42 
48  virtual Coordinate nearestPointOnEntity(const Coordinate& coord) const override;
49 
56  virtual Coordinate CasteljauAt(std::vector<Coordinate> points, double t) const override;
57 
63  virtual Coordinate DirectValueAt(double t) const override;
64 
70  virtual const std::vector<Coordinate> Curve(double precession) override;
71 
76  virtual const double length() const override;
77 
83  virtual const Coordinate tangent(double t) const override;
84 
90  virtual const Coordinate normal(double t) const override;
91 
96  virtual std::vector<BB_CSPtr> splitHalf() const override;
97 
103  virtual BB_CSPtr splitAtT(double t) const override;
104 
110  virtual BB_CSPtr offset(const geo::Coordinate& offset) const override;
111 
118  virtual BB_CSPtr rotate(const geo::Coordinate& center, double angle) const override;
119 
126  virtual BB_CSPtr scale(const geo::Coordinate& center, const geo::Coordinate& factor) const override;
132  virtual BB_CSPtr move(const geo::Coordinate& offset) const override;
139  virtual BB_CSPtr mirror(const geo::Coordinate& axis1, const geo::Coordinate& axis2) const override;
140 
141 // virtual void accept(GeoEntityVisitor &v) const override { v.visit(*this); }
142  private:
143 
144  std::vector<double> nearestPointTValue(const Coordinate &coord) const override;
146  double min_distance, const lc::geo::Coordinate &coord,
147  const Coordinate &ret) const override;
148 
149  friend std::ostream& operator<<(std::ostream& os, const Bezier& bez) {
150  os << "Bezier(A=" << bez._pointA << " radius=" << bez._pointB << " startAngle=" << bez._pointC << ")";
151  return os;
152  }
153 
154  private:
158  };
159  }
160 }
Coordinate _pointC
Definition: geobezier.h:157
virtual std::vector< BB_CSPtr > splitHalf() const override
splitHalf Splits the bezier into two halves.
Definition: geobezier.cpp:254
virtual const Coordinate tangent(double t) const override
tangent of the bezeir
Definition: geobezier.cpp:217
virtual const std::vector< Coordinate > getCP() const override
getCP Returns the control points of the bezier
Definition: geobezier.cpp:16
virtual Coordinate DirectValueAt(double t) const override
DirectValueAt Coordinate of bezier at time t calculated numerically.
Definition: geobezier.cpp:157
std::vector< double > nearestPointTValue(const Coordinate &coord) const override
Bezier::nearestPointTValue.
Definition: geobezier.cpp:102
virtual BB_CSPtr scale(const geo::Coordinate &center, const geo::Coordinate &factor) const override
scale the bezier at specific center by some factor
Definition: geobezier.cpp:201
friend std::ostream & operator<<(std::ostream &os, const Bezier &bez)
Definition: geobezier.h:149
virtual Coordinate nearestPointOnPath(const Coordinate &coord) const override
nearestPointOnPath of the bezier
Definition: geobezier.cpp:49
virtual Coordinate CasteljauAt(std::vector< Coordinate > points, double t) const override
CasteljauAt Coordinate of bezier at time t.
Definition: geobezier.cpp:145
Definition: cadentity.h:12
virtual BB_CSPtr rotate(const geo::Coordinate &center, double angle) const override
rotate the bezier at specific center and some angle
Definition: geobezier.cpp:194
const lc::geo::Coordinate returnCasesForNearestPoint(double min_distance, const lc::geo::Coordinate &coord, const Coordinate &ret) const override
Bezier::returnCasesForNearestPoint.
Definition: geobezier.cpp:127
Coordinate _pointB
Definition: geobezier.h:156
Coordinate _pointA
Definition: geobezier.h:155
std::shared_ptr< const BezierBase > BB_CSPtr
Definition: geobezierbase.h:15
virtual BB_CSPtr move(const geo::Coordinate &offset) const override
move the bezeir by some offset
Definition: geobezier.cpp:209
virtual const Coordinate normal(double t) const override
normal of the bezier at time t
Definition: geobezier.cpp:227
virtual BB_CSPtr mirror(const geo::Coordinate &axis1, const geo::Coordinate &axis2) const override
mirror a bezier around a line
Definition: geobezier.cpp:246
virtual Coordinate nearestPointOnEntity(const Coordinate &coord) const override
nearestPointOnEntity of the bezier
Definition: geobezier.cpp:76
virtual BB_CSPtr splitAtT(double t) const override
splitAtT Splits bezier at specific time.
Definition: geobezier.cpp:284
virtual const std::vector< Coordinate > Curve(double precession) override
Curve Creates a bezier curve for drawing with some precession value.
Definition: geobezier.cpp:165
virtual BB_CSPtr offset(const geo::Coordinate &offset) const override
offset offsets the bezier.
Definition: geobezier.cpp:265
Bezier(const Coordinate &point_a, const Coordinate &point_b, const Coordinate &point_c)
Definition: geobezier.cpp:6
virtual const Area boundingBox() const override
boundingBox of the bezier
Definition: geobezier.cpp:21
virtual const double length() const override
length of the Bezier
Definition: geobezier.cpp:174