LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
spline.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "cad/const.h"
5 
6 
9 #include "cad/base/cadentity.h"
11 #include "cad/interface/snapable.h"
13 
14 namespace lc {
15  namespace entity {
27  class Spline
28  : public std::enable_shared_from_this<Spline>, public CADEntity, public geo::Spline, public Snapable, virtual public Visitable, public Draggable {
29  public:
30 
39  Spline(const std::vector<geo::Coordinate> &controlPoints,
40  const std::vector<double> &knotPoints,
41  const std::vector<geo::Coordinate> &fitPoints,
42  int degree, bool closed,
43  double fitTolerance,
44  double stanx, double stany, double stanz,
45  double etanx, double etany, double etanz,
46  double nx, double ny, double nz, splineflag flags,
47  const Layer_CSPtr layer,
48  const MetaInfo_CSPtr metaInfo = nullptr,
49  const Block_CSPtr block = nullptr);
50 
51  Spline(const Spline_CSPtr other, bool sameID = false);
52 
53  public:
54  virtual std::vector<EntityCoordinate> snapPoints(const geo::Coordinate &coord, const SimpleSnapConstrain & constrain, double minDistanceToSnap,
55  int maxNumberOfSnapPoints) const override;
56 
57  virtual geo::Coordinate nearestPointOnPath(const geo::Coordinate &coord) const override;
58 
59  public:
65  virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override;
66 
72  virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override;
73 
80  virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override;
81 
88  virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center,
89  const geo::Coordinate &scale_factor) const override;
90 
91  virtual CADEntity_CSPtr mirror(const geo::Coordinate& axis1,
92  const geo::Coordinate& axis2) const override;
93 
98  virtual const geo::Area boundingBox() const override;
99 
100  virtual CADEntity_CSPtr modify(Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo, Block_CSPtr block) const override;
101 
102  public:
103  virtual void accept(GeoEntityVisitor &v) const override { v.visit(*this); }
104 
105  virtual void dispatch(EntityDispatch &ed) const override {
106  ed.visit(shared_from_this());
107  }
108 
109  public:
110  virtual std::map<unsigned int, lc::geo::Coordinate> dragPoints() const override;
111  virtual CADEntity_CSPtr setDragPoints(std::map<unsigned int, lc::geo::Coordinate> dragPoints) const override;
112 
113  private:
114  void calculateBoundingBox();
116  };
117 
119  }
120 }
121 
splineflag flags() const
Definition: geospline.cpp:61
virtual CADEntity_CSPtr mirror(const geo::Coordinate &axis1, const geo::Coordinate &axis2) const override
Definition: spline.cpp:115
virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override
move, moves by an offset
Definition: spline.cpp:66
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
virtual void visit(entity::Line_CSPtr)=0
The Spline class.
Definition: spline.h:27
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
virtual std::map< unsigned int, lc::geo::Coordinate > dragPoints() const override
Get all points of the entity that can be dragged.
Definition: spline.cpp:161
bool closed() const
closed, returns if spline is closed or not
Definition: geospline.cpp:10
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
DECLARE_SHORT_SHARED_PTR(Document)
Definition: cadentity.h:12
virtual void accept(GeoEntityVisitor &v) const override
Definition: spline.h:103
void calculateBoundingBox()
Definition: spline.cpp:151
virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override
copy, copies line by an offset
Definition: spline.cpp:78
virtual geo::Coordinate nearestPointOnPath(const geo::Coordinate &coord) const override
Find the nearest point on the path for this entity for the coordinate coord The path of a entity that...
Definition: spline.cpp:59
Block_CSPtr block() const
Return the current entity block.
Definition: cadentity.cpp:33
const std::vector< double > & knotPoints() const
Return a vector of knotpoints.
Definition: geospline.cpp:18
virtual std::vector< EntityCoordinate > snapPoints(const geo::Coordinate &coord, const SimpleSnapConstrain &constrain, double minDistanceToSnap, int maxNumberOfSnapPoints) const override
Find a number of snap points the line has available This function returns a ordered list...
Definition: spline.cpp:52
const std::vector< Coordinate > & fitPoints() const
Return a vector of fitpoints.
Definition: geospline.cpp:22
virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override
rotate, rotate operation
Definition: spline.cpp:89
geo::Area _boundingBox
Definition: spline.h:115
Spline(const std::vector< geo::Coordinate > &controlPoints, const std::vector< double > &knotPoints, const std::vector< geo::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 Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo=nullptr, const Block_CSPtr block=nullptr)
Spline, Constructor with MetaTypes.
Definition: spline.cpp:8
const std::vector< Coordinate > & controlPoints() const
control_points, Returns Control points of spline
Definition: geospline.cpp:6
virtual void dispatch(EntityDispatch &ed) const override
Definition: spline.h:105
virtual CADEntity_CSPtr setDragPoints(std::map< unsigned int, lc::geo::Coordinate > dragPoints) const override
Return modified entity.
Definition: spline.cpp:180
virtual CADEntity_CSPtr modify(Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo, Block_CSPtr block) const override
modify Return a new entity with the same ID bit with possible modified metainfo and/pr layer informat...
Definition: spline.cpp:131
virtual const geo::Area boundingBox() const override
boundingBox of the entity
Definition: spline.cpp:127
virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center, const geo::Coordinate &scale_factor) const override
scale, scales the entity
Definition: spline.cpp:103