LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
arc.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <cad/base/metainfo.h>
4 #include "cad/const.h"
8 #include "cad/geometry/geoarc.h"
9 #include "cad/base/cadentity.h"
11 #include "cad/meta/layer.h"
12 #include "cad/interface/snapable.h"
14 #include <cad/base/cadentity.h>
15 #include <cad/builders/arc.h>
16 
17 namespace lc {
18  namespace entity {
19  class Arc : public std::enable_shared_from_this<Arc>, public CADEntity, public geo::Arc, public Snapable, public Draggable {
20  friend class builder::ArcBuilder;
21 
22  public:
32  Arc(const geo::Coordinate &center, double radius, double startAngle, double endAngle,
33  bool CCW,
34  const Layer_CSPtr layer,
35  const MetaInfo_CSPtr metaInfo = nullptr,
36  const Block_CSPtr block = nullptr
37  );
38 
39  Arc(const geo::Arc &a, const Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo, const Block_CSPtr block = nullptr);
40 
41  Arc(const Arc_CSPtr other, bool sameID = false);
42 
43  public:
44 
50  virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override;
51 
57  virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override;
58 
65  virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override;
66 
73  virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center,
74  const geo::Coordinate &scale_factor) const override;
75 
76 
77  virtual CADEntity_CSPtr mirror(const geo::Coordinate& axis1,
78  const geo::Coordinate& axis2) const override;
83  virtual const geo::Area boundingBox() const override;
84 
85  virtual CADEntity_CSPtr modify(Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo, Block_CSPtr block) const override;
86 
87  public:
88  virtual std::vector<EntityCoordinate> snapPoints(const geo::Coordinate &coord, const SimpleSnapConstrain & constrain, double minDistanceToSnap,
89  int maxNumberOfSnapPoints) const override;
90 
91  virtual geo::Coordinate nearestPointOnPath(const geo::Coordinate &coord) const override;
92  public:
93  virtual void accept(GeoEntityVisitor &v) const override { v.visit(*this); }
94 
95  virtual void dispatch(EntityDispatch &ed) const override {
96  ed.visit(shared_from_this());
97  }
98 
99  public:
100  virtual std::map<unsigned int, lc::geo::Coordinate> dragPoints() const override;
101  virtual CADEntity_CSPtr setDragPoints(std::map<unsigned int, lc::geo::Coordinate> dragPoints) const override;
102 
103  private:
104  Arc(const builder::ArcBuilder& builder);
105  };
106 
108  }
109 }
Arc(const geo::Coordinate &center, double radius, double startAngle, double endAngle, bool CCW, const Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo=nullptr, const Block_CSPtr block=nullptr)
Arc, Arc constructor.
Definition: arc.cpp:6
virtual CADEntity_CSPtr setDragPoints(std::map< unsigned int, lc::geo::Coordinate > dragPoints) const override
Return modified entity.
Definition: arc.cpp:158
virtual CADEntity_CSPtr mirror(const geo::Coordinate &axis1, const geo::Coordinate &axis2) const override
Definition: arc.cpp:123
virtual void visit(entity::Line_CSPtr)=0
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override
copy, copies line by an offset
Definition: arc.cpp:100
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: arc.cpp:140
virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override
move, moves by an offset
Definition: arc.cpp:93
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
DECLARE_SHORT_SHARED_PTR(Document)
bool CCW() const
Returns of the arc is in reversed direction.
Definition: geoarc.cpp:126
double endAngle() const
Returns the EndAngle.
Definition: geoarc.cpp:87
Definition: cadentity.h:12
virtual void dispatch(EntityDispatch &ed) const override
Definition: arc.h:95
virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override
rotate, rotate operation
Definition: arc.cpp:106
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: arc.cpp:81
virtual const geo::Area boundingBox() const override
boundingBox of the entity
Definition: arc.cpp:136
Block_CSPtr block() const
Return the current entity block.
Definition: cadentity.cpp:33
virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center, const geo::Coordinate &scale_factor) const override
scale, scales the entity
Definition: arc.cpp:114
virtual void accept(GeoEntityVisitor &v) const override
Definition: arc.h:93
double radius() const
Returns the radius of Arc.
Definition: geoarc.cpp:79
virtual std::map< unsigned int, lc::geo::Coordinate > dragPoints() const override
Get all points of the entity that can be dragged.
Definition: arc.cpp:148
double startAngle() const
Returns the startAngle.
Definition: geoarc.cpp:83
const Coordinate center() const
Returns center of Arc.
Definition: geoarc.cpp:91
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: arc.cpp:27