LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dimdiametric.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "cad/const.h"
5 
7 #include "cad/base/cadentity.h"
9 #include "cad/math/lcmath.h"
10 #include <cad/primitive/point.h>
12 
13 namespace lc {
14  namespace entity {
15  class DimDiametric : public std::enable_shared_from_this<DimDiametric>, public CADEntity, public Dimension, virtual public Visitable, public Draggable {
16  public:
27  double angle,
28  double const lineSpacingFactor,
30  std::string const &explicitValue,
32  const double leader,
33  const Layer_CSPtr layer,
34  const MetaInfo_CSPtr metaInfo = nullptr,
35  const Block_CSPtr block = nullptr
36  );
37 
41  DimDiametric(geo::Coordinate const &definitionPoint,
42  TextConst::AttachmentPoint const &attachmentPoint,
43  double const lineSpacingFactor,
44  TextConst::LineSpacingStyle const &lineSpacingStyle,
45  std::string const &explicitValue,
46  geo::Coordinate const &definitionPoint2,
47  const double leader,
48  const Layer_CSPtr layer,
49  const MetaInfo_CSPtr metaInfo = nullptr,
50  const Block_CSPtr block = nullptr
51  );
52 
53  DimDiametric(const DimDiametric_CSPtr other, bool sameID = false);
54 
55  public:
61  virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override;
62 
68  virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override;
69 
76  virtual CADEntity_CSPtr 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 
94  virtual const geo::Area boundingBox() const override;
95 
96  virtual CADEntity_CSPtr modify(Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo, Block_CSPtr block) const override;
97 
98  double leader() const;
99 
100  geo::Coordinate definitionPoint2() const; // Where definitionPoint is an edge, definitionPoint2 specifies the opposite edge. The mid point would be the center point.
101 
102  protected:
103  const double _leader;
105  public:
106  virtual void accept(GeoEntityVisitor &v) const override { v.visit(*this); }
107 
108  virtual void dispatch(EntityDispatch &ed) const override {
109  ed.visit(shared_from_this());
110  }
111 
112  public:
113  virtual std::map<unsigned int, lc::geo::Coordinate> dragPoints() const override;
114  virtual CADEntity_CSPtr setDragPoints(std::map<unsigned int, lc::geo::Coordinate> dragPoints) const override;
115  };
116 
117  DECLARE_SHORT_SHARED_PTR(DimDiametric)
118  }
119 }
virtual CADEntity_CSPtr setDragPoints(std::map< unsigned int, lc::geo::Coordinate > dragPoints) const override
Return modified entity.
virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override
move, moves by an offset
TextConst::LineSpacingStyle lineSpacingStyle() const
Definition: dimension.cpp:91
const geo::Coordinate & definitionPoint() const noexcept
move, moves by an offset
Definition: dimension.cpp:71
virtual void visit(entity::Line_CSPtr)=0
std::string explicitValue() const
Definition: dimension.cpp:95
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
virtual void dispatch(EntityDispatch &ed) const override
Definition: dimdiametric.h:108
const geo::Coordinate _definitionPoint2
Definition: dimdiametric.h:104
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
DECLARE_SHORT_SHARED_PTR(Document)
virtual CADEntity_CSPtr mirror(const geo::Coordinate &axis1, const geo::Coordinate &axis2) const override
virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center, const geo::Coordinate &scale_factor) const override
scale, scales the entity
const geo::Coordinate & middleOfText() const noexcept
Definition: dimension.cpp:75
virtual std::map< unsigned int, lc::geo::Coordinate > dragPoints() const override
Get all points of the entity that can be dragged.
virtual void accept(GeoEntityVisitor &v) const override
Definition: dimdiametric.h:106
TextConst::AttachmentPoint const & attachmentPoint() const
Definition: dimension.cpp:83
Definition: cadentity.h:12
virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override
rotate, rotate operation
double lineSpacingFactor() const
Definition: dimension.cpp:87
Block_CSPtr block() const
Return the current entity block.
Definition: cadentity.cpp:33
virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override
copy, copies by an offset
DimDiametric(geo::Coordinate const &definitionPoint, geo::Coordinate const &middleOfText, TextConst::AttachmentPoint const &attachmentPoint, double angle, double const lineSpacingFactor, TextConst::LineSpacingStyle const &lineSpacingStyle, std::string const &explicitValue, geo::Coordinate const &definitionPoint2, const double leader, const Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo=nullptr, const Block_CSPtr block=nullptr)
DimDiametric.
Definition: dimdiametric.cpp:6
geo::Coordinate definitionPoint2() const
virtual const geo::Area boundingBox() const override
boundingBox of the entity
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...