LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
lc::entity::Circle Class Reference

#include <circle.h>

Inheritance diagram for lc::entity::Circle:
Collaboration diagram for lc::entity::Circle:

Public Member Functions

 Circle (const geo::Coordinate &center, double radius, const Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo=nullptr, const Block_CSPtr block=nullptr)
 Circle, Circle Constructor. More...
 
 Circle (const Circle_CSPtr other, bool sameID=false)
 
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, closest to coord and can return multiple snap points. More...
 
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 it can possibly take. More...
 
virtual CADEntity_CSPtr move (const geo::Coordinate &offset) const override
 move, moves by an offset More...
 
virtual CADEntity_CSPtr copy (const geo::Coordinate &offset) const override
 copy, copies by an offset More...
 
virtual CADEntity_CSPtr rotate (const geo::Coordinate &rotation_center, const double rotation_angle) const override
 rotate, rotate operation More...
 
virtual CADEntity_CSPtr scale (const geo::Coordinate &scale_center, const geo::Coordinate &scale_factor) const override
 scale, scales the entity More...
 
virtual CADEntity_CSPtr mirror (const geo::Coordinate &axis1, const geo::Coordinate &axis2) const override
 
virtual const geo::Area boundingBox () const override
 boundingBox of the entity More...
 
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 information #return new entity with same ID More...
 
virtual void accept (GeoEntityVisitor &v) const override
 
virtual void dispatch (EntityDispatch &ed) const override
 
- Public Member Functions inherited from lc::entity::CADEntity
 CADEntity ()
 
 CADEntity (Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo=nullptr, const Block_CSPtr block=nullptr)
 CADEntity Constructor. More...
 
 CADEntity (CADEntity_CSPtr cadEntity, bool sameID)
 
 CADEntity (CADEntity_CSPtr cadEntity)
 
virtual ~CADEntity ()=default
 
Layer_CSPtr layer () const
 layer return the layer this entity is placed on More...
 
template<typename T >
const std::shared_ptr< const T > metaInfo (std::string metaName) const
 
MetaInfo_CSPtr metaInfo () const
 
Block_CSPtr block () const
 Return the current entity block. More...
 
- Public Member Functions inherited from lc::ID
 ID ()
 Default constructor, provides a new unique ID to each entity. More...
 
 ID (ID_DATATYPE)
 
virtual ~ID ()=default
 
ID_DATATYPE id () const
 returns the ID of the entity More...
 
bool operator== (const ID &id) const
 
void setID (ID_DATATYPE id)
 
- Public Member Functions inherited from lc::Visitable
virtual ~Visitable ()=default
 
- Public Member Functions inherited from lc::geo::Circle
 Circle (const Coordinate &center, double radius)
 
const Coordinate center () const
 Returns the Center of circle. More...
 
double radius () const
 returns the radius of the circle. More...
 
Coordinate nearestPointOnPath (const Coordinate &coord) const
 returns the nearest Point On Path More...
 
Coordinate nearestPointOnEntity (const Coordinate &coord) const
 
const maths::Equation equation () const
 Returns equation of the circle. More...
 
virtual std::vector< CoordinatelineTangentPointsOnEntity (const lc::geo::Coordinate &extPoint) override
 Give line tangent points on entity. More...
 
- Public Member Functions inherited from lc::geo::Base
virtual ~Base ()=default
 

Private Member Functions

 Circle (const builder::CircleBuilder &builder)
 

Friends

class builder::CircleBuilder
 

Additional Inherited Members

- Static Public Member Functions inherited from lc::Snapable
static void remove_ifDistanceGreaterThen (std::vector< EntityCoordinate > &points, const geo::Coordinate &reference, const double distance)
 
static void snapPointsCleanup (std::vector< EntityCoordinate > &points, const geo::Coordinate &reference, const unsigned int maxNumberOfSnapPoints, const double minDistanceToSnap)
 
- Static Public Attributes inherited from lc::ID
static std::atomic< ID_DATATYPE__idCounter
 
- Protected Member Functions inherited from lc::entity::CADEntity
 CADEntity (const lc::builder::CADEntityBuilder &builder)
 

Detailed Description

Definition at line 17 of file circle.h.

Constructor & Destructor Documentation

Circle::Circle ( const geo::Coordinate center,
double  radius,
const Layer_CSPtr  layer,
const MetaInfo_CSPtr  metaInfo = nullptr,
const Block_CSPtr  block = nullptr 
)

Circle, Circle Constructor.

Parameters
geo::Coordinatecenter, center of Circle
doubleradius, radius of circle
Layer_CSPtr_layer
MetaTypesmetaTypes

Definition at line 9 of file circle.cpp.

12 }
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
double radius() const
returns the radius of the circle.
Definition: geocircle.cpp:17
Block_CSPtr block() const
Return the current entity block.
Definition: cadentity.cpp:33
Circle::Circle ( const Circle_CSPtr  other,
bool  sameID = false 
)

Definition at line 15 of file circle.cpp.

15  : CADEntity(other, sameID),
16  geo::Circle(other->center(), other->radius()) {
17 }
Circle::Circle ( const builder::CircleBuilder builder)
private

Definition at line 19 of file circle.cpp.

19  :
20  CADEntity(builder),
21  geo::Circle(builder.center(), builder.radius()) {
22 }
double radius() const
Definition: circle.cpp:21
const geo::Coordinate & center() const
Definition: circle.cpp:12

Member Function Documentation

virtual void lc::entity::Circle::accept ( GeoEntityVisitor v) const
inlineoverridevirtual

Reimplemented from lc::entity::CADEntity.

Definition at line 85 of file circle.h.

85 { v.visit(*this); }
const geo::Area Circle::boundingBox ( ) const
overridevirtual

boundingBox of the entity

Returns
geo::Area area

Implements lc::entity::CADEntity.

Definition at line 96 of file circle.cpp.

96  {
97  return geo::Area(geo::Coordinate(center().x() - radius(), center().y() - radius()),
98  geo::Coordinate(center().x() + radius(), center().y() + radius()));
99 }
double radius() const
returns the radius of the circle.
Definition: geocircle.cpp:17
const Coordinate center() const
Returns the Center of circle.
Definition: geocircle.cpp:14
CADEntity_CSPtr Circle::copy ( const geo::Coordinate offset) const
overridevirtual

copy, copies by an offset

Parameters
geo::Coordinateoffset
Returns
CADEntity_CSPtr copied entity

Implements lc::entity::CADEntity.

Definition at line 68 of file circle.cpp.

68  {
69  auto newCircle = std::make_shared<Circle>(this->center() + offset, this->radius(), layer(), metaInfo());
70  return newCircle;
71 }
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
double radius() const
returns the radius of the circle.
Definition: geocircle.cpp:17
const Coordinate center() const
Returns the Center of circle.
Definition: geocircle.cpp:14
virtual void lc::entity::Circle::dispatch ( EntityDispatch ed) const
inlineoverridevirtual

Implements lc::entity::CADEntity.

Definition at line 87 of file circle.h.

87  {
88  ed.visit(shared_from_this());
89  }
CADEntity_CSPtr Circle::mirror ( const geo::Coordinate axis1,
const geo::Coordinate axis2 
) const
overridevirtual

Implements lc::entity::CADEntity.

Definition at line 89 of file circle.cpp.

89  {
90  auto newCircle = std::make_shared<Circle>(this->center().mirror(axis1, axis2),
91  this->radius(), layer(), metaInfo());
92  newCircle->setID(this->id());
93  return newCircle;
94 }
Coordinate mirror(const Coordinate &axis1, const Coordinate &axis2) const
mirror a coordinate
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
double radius() const
returns the radius of the circle.
Definition: geocircle.cpp:17
const Coordinate center() const
Returns the Center of circle.
Definition: geocircle.cpp:14
CADEntity_CSPtr Circle::modify ( Layer_CSPtr  layer,
const MetaInfo_CSPtr  metaInfo,
Block_CSPtr  block 
) const
overridevirtual

modify Return a new entity with the same ID bit with possible modified metainfo and/pr layer information #return new entity with same ID

Implements lc::entity::CADEntity.

Definition at line 101 of file circle.cpp.

101  {
102  auto newEntity = std::make_shared<Circle>(this->center(), this->radius(), layer, metaInfo, block);
103  newEntity->setID(this->id());
104  return newEntity;
105 }
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
double radius() const
returns the radius of the circle.
Definition: geocircle.cpp:17
Block_CSPtr block() const
Return the current entity block.
Definition: cadentity.cpp:33
const Coordinate center() const
Returns the Center of circle.
Definition: geocircle.cpp:14
CADEntity_CSPtr Circle::move ( const geo::Coordinate offset) const
overridevirtual

move, moves by an offset

Parameters
geo::Coordinateoffset
Returns
CADEntity_CSPtr moved entity

Implements lc::entity::CADEntity.

Definition at line 62 of file circle.cpp.

62  {
63  auto newCircle = std::make_shared<Circle>(this->center() + offset, this->radius(), layer(), metaInfo());
64  newCircle->setID(this->id());
65  return newCircle;
66 }
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
double radius() const
returns the radius of the circle.
Definition: geocircle.cpp:17
const Coordinate center() const
Returns the Center of circle.
Definition: geocircle.cpp:14
geo::Coordinate Circle::nearestPointOnPath ( const geo::Coordinate coord) const
overridevirtual

Find the nearest point on the path for this entity for the coordinate coord The path of a entity that it can possibly take.

For example for any Arc the path is the full circle if the start/stop angle is 0 to 2*pi

Parameters
coordCoordinate to lookup the nearest coordinate from
See also
lc::entity::CADEntity

Implements lc::Snapable.

Definition at line 58 of file circle.cpp.

58  {
59  return geo::Circle::nearestPointOnPath(coord);
60 }
Coordinate nearestPointOnPath(const Coordinate &coord) const
returns the nearest Point On Path
Definition: geocircle.cpp:22
CADEntity_CSPtr Circle::rotate ( const geo::Coordinate rotation_center,
const double  rotation_angle 
) const
overridevirtual

rotate, rotate operation

Parameters
geo::Coordinaterotation_center
doublerotation_angle
Returns
CADEntity_CSPtr rotated entity

Implements lc::entity::CADEntity.

Definition at line 73 of file circle.cpp.

73  {
74  auto newCircle = std::make_shared<Circle>(this->center().rotate(rotation_center, rotation_angle), this->radius(),
75  layer(), metaInfo());
76  newCircle->setID(this->id());
77  return newCircle;
78 }
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
double radius() const
returns the radius of the circle.
Definition: geocircle.cpp:17
Coordinate rotate(const Coordinate &angleVector) const
rotate around (0.,0.) with a given angle vector
const Coordinate center() const
Returns the Center of circle.
Definition: geocircle.cpp:14
CADEntity_CSPtr Circle::scale ( const geo::Coordinate scale_center,
const geo::Coordinate scale_factor 
) const
overridevirtual

scale, scales the entity

Parameters
geo::Coordinatescale_center
doublescale_factor
Returns

Implements lc::entity::CADEntity.

Definition at line 80 of file circle.cpp.

80  {
81  // TODO return ellipse if scalefactor.x != scalefactor.y
82 
83  auto newCircle = std::make_shared<Circle>(this->center().scale(scale_center, scale_factor),
84  this->radius() * fabs(scale_factor.x()), layer(), metaInfo());
85  newCircle->setID(this->id());
86  return newCircle;
87 }
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
Coordinate scale(const double &scale_factor) const
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
double radius() const
returns the radius of the circle.
Definition: geocircle.cpp:17
const Coordinate center() const
Returns the Center of circle.
Definition: geocircle.cpp:14
std::vector< EntityCoordinate > Circle::snapPoints ( const geo::Coordinate coord,
const SimpleSnapConstrain simpleSnapConstrain,
double  minDistanceToSnap,
int  maxNumberOfSnapPoints 
) const
overridevirtual

Find a number of snap points the line has available This function returns a ordered list, closest to coord and can return multiple snap points.

Parameters
coordCoordinate to lookup the nearest coordinate from
minDistanceToSnapMinimum distance to the path to snap into. THis is a hint parameter and we should follow this, but it will be later filtered again
maxNumberOfSnapPointsMaximum number of snappoints that have to be looked up
See also
lc::EntityCoordinate

Implements lc::Snapable.

Definition at line 24 of file circle.cpp.

25  {
26 
27  std::vector<EntityCoordinate> points;
28  if (constrain.constrain() & SimpleSnapConstrain::LOGICAL) {
29  // Add center
30  lc::geo::Coordinate coord = center();
31  points.emplace_back(coord, 0);
32  // Add 4 coordinates
33  // Top Point
34  coord = center() + lc::geo::Coordinate(0., radius());
35  points.emplace_back(coord, 1);
36  // Right Point
37  coord = center() + lc::geo::Coordinate(radius(), 0.);
38  points.emplace_back(coord, 2);
39  // Left Point
40  coord = center() + lc::geo::Coordinate(-radius(), 0.);
41  points.emplace_back(coord, 3);
42  // Bottom Point
43  coord = center() + lc::geo::Coordinate(0., -radius());
44  points.emplace_back(coord, 4);
45  }
46 
47  if (constrain.constrain() & SimpleSnapConstrain::ON_ENTITY ||
48  constrain.constrain() & SimpleSnapConstrain::ON_ENTITYPATH) {
49  geo::Coordinate npoe = nearestPointOnPath(coord);
50  points.emplace_back(npoe, -1);
51  }
52 
53  // Cleanup array of snappoints
54  Snapable::snapPointsCleanup(points, coord, maxNumberOfSnapPoints, minDistanceToSnap);
55  return points;
56 }
static const uint16_t LOGICAL
Definition: snapconstrain.h:22
static const uint16_t ON_ENTITYPATH
Definition: snapconstrain.h:19
double radius() const
returns the radius of the circle.
Definition: geocircle.cpp:17
static const uint16_t ON_ENTITY
Definition: snapconstrain.h:18
static void snapPointsCleanup(std::vector< EntityCoordinate > &points, const geo::Coordinate &reference, const unsigned int maxNumberOfSnapPoints, const double minDistanceToSnap)
Definition: snapable.h:53
const Coordinate center() const
Returns the Center of circle.
Definition: geocircle.cpp:14
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: circle.cpp:58

Friends And Related Function Documentation

friend class builder::CircleBuilder
friend

Definition at line 19 of file circle.h.


The documentation for this class was generated from the following files: