LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ellipse.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "cad/const.h"
6 
9 #include "cad/base/cadentity.h"
11 
12 #include <cad/meta/layer.h>
13 
14 namespace lc {
15  namespace entity {
27  class Ellipse : public std::enable_shared_from_this<Ellipse>, public CADEntity, public geo::Ellipse, public Snapable {
28  public:
42  const geo::Coordinate &majorP,
43  double minorRadius,
44  double startAngle,
45  double endAngle,
46  bool reversed,
47  const Layer_CSPtr layer,
48  const MetaInfo_CSPtr metaInfo = nullptr,
49  const Block_CSPtr block = nullptr
50  );
51 
52  Ellipse(const Ellipse_CSPtr other, bool sameID = false);
53 
54  public:
60  virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override;
61 
67  virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override;
68 
75  virtual CADEntity_CSPtr
76  rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override;
77 
84  virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center,
85  const geo::Coordinate &scale_factor) const override;
86 
87  virtual CADEntity_CSPtr mirror(const geo::Coordinate &axis1,
88  const geo::Coordinate &axis2) const override;
89 
90 
95  virtual const geo::Area boundingBox() const override;
96 
97  virtual CADEntity_CSPtr
98  modify(Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo, Block_CSPtr block) const override;
99 
100  public:
101 
105  std::vector<lc::geo::Coordinate> findBoxPoints() const;
106 
110  virtual std::vector<EntityCoordinate>
111  snapPoints(const geo::Coordinate &coord, const SimpleSnapConstrain &constrain, double minDistanceToSnap,
112  int maxNumberOfSnapPoints) const override;
113 
114  virtual geo::Coordinate nearestPointOnPath(const geo::Coordinate &coord) const override;
115 
116  public:
117  virtual void accept(GeoEntityVisitor &v) const override { v.visit(*this); }
118 
119  virtual void dispatch(EntityDispatch &ed) const override {
120  ed.visit(shared_from_this());
121  }
122  };
123 
124  DECLARE_SHORT_SHARED_PTR(Ellipse)
125  }
126 }
127 
128 // ELLIPSE_H
virtual std::vector< EntityCoordinate > snapPoints(const geo::Coordinate &coord, const SimpleSnapConstrain &constrain, double minDistanceToSnap, int maxNumberOfSnapPoints) const override
see interface Snapable
Definition: ellipse.cpp:226
virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override
rotate, rotate operation
Definition: ellipse.cpp:54
double startAngle() const
startAngle, Returns Start elliptic!! angle of ellipse
Definition: geoellipse.cpp:32
virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override
copy, copies by an offset
Definition: ellipse.cpp:42
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: ellipse.cpp:282
std::vector< lc::geo::Coordinate > findBoxPoints() const
Definition: ellipse.cpp:158
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: ellipse.cpp:139
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 mirror(const geo::Coordinate &axis1, const geo::Coordinate &axis2) const override
Definition: ellipse.cpp:87
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
DECLARE_SHORT_SHARED_PTR(Document)
Definition: cadentity.h:12
A ellipse that can be put in a drawing.
Definition: ellipse.h:27
virtual void dispatch(EntityDispatch &ed) const override
Definition: ellipse.h:119
Block_CSPtr block() const
Return the current entity block.
Definition: cadentity.cpp:33
virtual const geo::Area boundingBox() const override
boundingBox of the entity
Definition: ellipse.cpp:112
virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center, const geo::Coordinate &scale_factor) const override
scale, scales the entity
Definition: ellipse.cpp:70
double endAngle() const
endAngle, Return the end elliptic!! angle of ellipse
Definition: geoellipse.cpp:189
virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override
move, moves by an offset
Definition: ellipse.cpp:29
virtual void accept(GeoEntityVisitor &v) const override
Definition: ellipse.h:117
Ellipse(const geo::Coordinate &center, const geo::Coordinate &majorP, double minorRadius, double startAngle, double endAngle, bool reversed, const Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo=nullptr, const Block_CSPtr block=nullptr)
Create ellipse.
Definition: ellipse.cpp:9
const Coordinate center() const
center, Returns Center point of Ellipse
Definition: geoellipse.cpp:20
double minorRadius() const
minorRadius, Returns the minor radius of ellipse
Definition: geoellipse.cpp:28
const Coordinate majorP() const
majorP, Returns major point of the ellipse, relative to center
Definition: geoellipse.cpp:24