LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dimlinear.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 DimLinear : public std::enable_shared_from_this<DimLinear>, public CADEntity, public Dimension, virtual public Visitable, public Draggable {
16  public:
17 
18 
30  double textAngle,
31  double const lineSpacingFactor,
33  std::string const &explicitValue,
36  const double angle,
37  const double oblique,
38  const Layer_CSPtr layer,
39  const MetaInfo_CSPtr metaInfo = nullptr,
40  const Block_CSPtr block = nullptr
41  );
42 
43 
44  DimLinear(const DimLinear_CSPtr other, bool sameID = false);
45 
49  static DimLinear_SPtr dimAuto(geo::Coordinate const &p1,
50  geo::Coordinate const &p2,
51  geo::Coordinate const &middleOfText,
52  std::string const &explicitValue,
53  const Layer_CSPtr layer,
54  const MetaInfo_CSPtr metaInfo = nullptr,
55  const Block_CSPtr block = nullptr
56  );
57 
58  public:
64  virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override;
65 
71  virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override;
72 
79  virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override;
80 
87  virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center,
88  const geo::Coordinate &scale_factor) const override;
89 
90  virtual CADEntity_CSPtr mirror(const geo::Coordinate& axis1,
91  const geo::Coordinate& axis2) const override {
92  return NULL; // TODO: no return statement, not implemented in dimlinear.cpp
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  // Oblique angle http://www.cad-notes.com/autocad-isometric-text-and-dimension/
103  double oblique() const;
104 
105  // Angle http://www.cad-notes.com/autocad-isometric-text-and-dimension/
106  double angle() const;
107 
108  // Where p2 specifies the first point of the dimension, p3 specifies that second point of the dimension
109  // defPoint specifies where the dimension is specified and notates the horizontal/vertical 'line' between the two points
110  const geo::Coordinate &definitionPoint2() const noexcept;
111 
112  const geo::Coordinate &definitionPoint3() const noexcept;
113 
114  protected:
115  const double _angle;
116  const double _oblique;
117  const geo::Coordinate _definitionPoint2;
118  const geo::Coordinate _definitionPoint3;
119  public:
120  virtual void accept(GeoEntityVisitor &v) const override { v.visit(*this); }
121 
122  virtual void dispatch(EntityDispatch &ed) const override {
123  ed.visit(shared_from_this());
124  }
125 
126  public:
127  virtual std::map<unsigned int, lc::geo::Coordinate> dragPoints() const override;
128  virtual CADEntity_CSPtr setDragPoints(std::map<unsigned int, lc::geo::Coordinate> dragPoints) const override;
129  };
130 
131  DECLARE_SHORT_SHARED_PTR(DimLinear)
132  }
133 }
134 
135 // DIMLINEAR_H
virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override
move, moves by an offset
Definition: dimlinear.cpp:65
TextConst::LineSpacingStyle lineSpacingStyle() const
Definition: dimension.cpp:91
const geo::Coordinate & definitionPoint() const noexcept
move, moves by an offset
Definition: dimension.cpp:71
virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center, const geo::Coordinate &scale_factor) const override
scale, scales the entity
Definition: dimlinear.cpp:82
virtual void visit(entity::Line_CSPtr)=0
virtual void dispatch(EntityDispatch &ed) const override
Definition: dimlinear.h:122
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 CADEntity_CSPtr setDragPoints(std::map< unsigned int, lc::geo::Coordinate > dragPoints) const override
Return modified entity.
Definition: dimlinear.cpp:140
double angle() const
Definition: dimlinear.cpp:114
virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override
copy, copies by an offset
Definition: dimlinear.cpp:71
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
DECLARE_SHORT_SHARED_PTR(Document)
static DimLinear_SPtr dimAuto(geo::Coordinate const &p1, geo::Coordinate const &p2, geo::Coordinate const &middleOfText, std::string const &explicitValue, const Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo=nullptr, const Block_CSPtr block=nullptr)
Definition: dimlinear.cpp:39
const geo::Coordinate & middleOfText() const noexcept
Definition: dimension.cpp:75
TextConst::AttachmentPoint const & attachmentPoint() const
Definition: dimension.cpp:83
Definition: cadentity.h:12
const double _angle
Definition: dimlinear.h:115
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: dimlinear.cpp:93
const geo::Coordinate _definitionPoint3
Definition: dimlinear.h:118
virtual CADEntity_CSPtr mirror(const geo::Coordinate &axis1, const geo::Coordinate &axis2) const override
Definition: dimlinear.h:90
const geo::Coordinate & definitionPoint3() const noexcept
Definition: dimlinear.cpp:124
double oblique() const
Definition: dimlinear.cpp:117
double lineSpacingFactor() const
Definition: dimension.cpp:87
Block_CSPtr block() const
Return the current entity block.
Definition: cadentity.cpp:33
virtual void accept(GeoEntityVisitor &v) const override
Definition: dimlinear.h:120
DimLinear(geo::Coordinate const &definitionPoint, geo::Coordinate const &middleOfText, TextConst::AttachmentPoint const &attachmentPoint, double textAngle, double const lineSpacingFactor, TextConst::LineSpacingStyle const &lineSpacingStyle, std::string const &explicitValue, geo::Coordinate const &definitionPoint2, geo::Coordinate const &definitionPoint3, const double angle, const double oblique, const Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo=nullptr, const Block_CSPtr block=nullptr)
DimLinear, DimLinear constructor with metatypes.
Definition: dimlinear.cpp:6
const geo::Coordinate _definitionPoint2
Definition: dimlinear.h:117
virtual std::map< unsigned int, lc::geo::Coordinate > dragPoints() const override
Get all points of the entity that can be dragged.
Definition: dimlinear.cpp:128
const double _oblique
Definition: dimlinear.h:116
virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override
rotate, rotate operation
Definition: dimlinear.cpp:76
double textAngle() const
Definition: dimension.cpp:79
const geo::Coordinate & definitionPoint2() const noexcept
Definition: dimlinear.cpp:121
virtual const geo::Area boundingBox() const override
boundingBox of the entity
Definition: dimlinear.cpp:88