LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dimradial.cpp
Go to the documentation of this file.
2 
3 using namespace lc;
4 using namespace entity;
5 
6 DimRadial::DimRadial(geo::Coordinate const& definitionPoint,
7  geo::Coordinate const& middleOfText,
8  TextConst::AttachmentPoint const& attachmentPoint,
9  double angle,
10  double const lineSpacingFactor,
11  TextConst::LineSpacingStyle const& lineSpacingStyle,
12  std::string const& explicitValue,
13  geo::Coordinate const& definitionPoint2,
14  const double leader,
15  const Layer_CSPtr layer,
16  const MetaInfo_CSPtr metaInfo,
17  const Block_CSPtr block) :
18  CADEntity(layer, metaInfo, block),
19  Dimension(definitionPoint, middleOfText, attachmentPoint, angle, lineSpacingFactor, lineSpacingStyle, explicitValue),
20  _leader(leader),
21  _definitionPoint2(definitionPoint2) {
22 
23 }
24 
25 DimRadial::DimRadial(geo::Coordinate const& definitionPoint,
26  TextConst::AttachmentPoint const& attachmentPoint,
27  double const lineSpacingFactor,
28  TextConst::LineSpacingStyle const& lineSpacingStyle,
29  std::string const& explicitValue,
30  geo::Coordinate const& definitionPoint2,
31  const double leader,
32  const Layer_CSPtr layer,
33  const MetaInfo_CSPtr metaInfo,
34  const Block_CSPtr block):
35  CADEntity(layer, metaInfo, block),
36  Dimension(definitionPoint, definitionPoint.mid(definitionPoint2), attachmentPoint, 0., lineSpacingFactor, lineSpacingStyle, explicitValue),
37  _leader(leader),
38  _definitionPoint2(definitionPoint2) {
39 }
40 
41 DimRadial::DimRadial(const DimRadial_CSPtr other, bool sameID) : CADEntity(other, sameID), Dimension(*other), _leader(other->_leader), _definitionPoint2(other->_definitionPoint2) {
42 
43 }
44 
45 CADEntity_CSPtr DimRadial::move(const geo::Coordinate& offset) const {
46  auto newDimRadial = std::make_shared<DimRadial>(this->definitionPoint() + offset, this->middleOfText() + offset, this->attachmentPoint(), this->textAngle(), this->lineSpacingFactor(), this->lineSpacingStyle(), this->explicitValue(), this->_definitionPoint2 + offset, this->_leader, this->layer(), this->metaInfo());
47  newDimRadial->setID(this->id());
48  return newDimRadial;
49 }
50 
51 CADEntity_CSPtr DimRadial::copy(const geo::Coordinate& offset) const {
52  auto newDimRadial = std::make_shared<DimRadial>(this->definitionPoint() + offset, this->middleOfText() + offset, this->attachmentPoint(), this->textAngle(), this->lineSpacingFactor(), this->lineSpacingStyle(), this->explicitValue(), this->_definitionPoint2 + offset, this->_leader, this->layer(), this->metaInfo());
53  return newDimRadial;
54 }
55 
56 CADEntity_CSPtr DimRadial::rotate(const geo::Coordinate& rotation_center, const double rotation_angle) const {
57  auto newDimRadial = std::make_shared<DimRadial>(this->definitionPoint().rotate(rotation_center, rotation_angle),
58  this->middleOfText().rotate(rotation_center, rotation_angle), this->attachmentPoint(), this->textAngle(), this->lineSpacingFactor(), this->lineSpacingStyle(), this->explicitValue(), this->_definitionPoint2.rotate(rotation_center, rotation_angle), this->_leader, this->layer(), this->metaInfo());
59  return newDimRadial;
60 }
61 
62 CADEntity_CSPtr DimRadial::scale(const geo::Coordinate& scale_center, const geo::Coordinate& scale_factor) const {
63  auto newDimRadial = std::make_shared<DimRadial>(this->definitionPoint().scale(scale_center, scale_factor),
64  this->middleOfText().scale(scale_center, scale_factor), this->attachmentPoint(), this->textAngle(), this->lineSpacingFactor(), this->lineSpacingStyle(), this->explicitValue(), this->_definitionPoint2.scale(scale_center, scale_factor), this->_leader, this->layer(), this->metaInfo());
65  return newDimRadial;
66 }
67 
68 CADEntity_CSPtr DimRadial::mirror(const geo::Coordinate& axis1, const geo::Coordinate& axis2) const {
69  auto newDimRadial = std::make_shared<DimRadial>(this->definitionPoint().mirror(axis1,axis2),
70  this->middleOfText().mirror(axis1,axis2), this->attachmentPoint(), this->textAngle(), this->lineSpacingFactor(), this->lineSpacingStyle(), this->explicitValue(), this->_definitionPoint2.mirror(axis1,axis2), this->_leader, this->layer(), this->metaInfo());
71  return newDimRadial;
72 }
73 
75  // TODO create proper bounding box for DimLinear
76  return geo::Area(this->middleOfText(), 0., 0.);
77 }
78 
79 CADEntity_CSPtr DimRadial::modify(Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo, Block_CSPtr block) const {
80  auto newDimRadial = std::make_shared<DimRadial>(
81  this->definitionPoint(),
82  this->middleOfText(),
83  this->attachmentPoint(),
84  this->textAngle(),
85  this->lineSpacingFactor(),
86  this->lineSpacingStyle(),
87  this->explicitValue(),
88  this->_definitionPoint2,
89  this->_leader,
90  layer,
92  );
93 
94  return newDimRadial;
95 }
96 
97 double DimRadial::leader() const {
98  return _leader;
99 }
100 
102  return _definitionPoint2;
103 }
104 
105 std::map<unsigned int, geo::Coordinate> DimRadial::dragPoints() const {
106  std::map<unsigned int, geo::Coordinate> dragPoints;
107 
108  dragPoints[0] = definitionPoint();
109  dragPoints[1] = middleOfText();
110  dragPoints[2] = _definitionPoint2;
111 
112  return dragPoints;
113 }
114 
115 
116 CADEntity_CSPtr DimRadial::setDragPoints(std::map<unsigned int, lc::geo::Coordinate> dragPoints) const {
117  try {
118  auto newEntity = std::make_shared<DimRadial>(dragPoints.at(0),
119  dragPoints.at(1),
120  attachmentPoint(),
121  textAngle(),
124  explicitValue(),
125  dragPoints.at(2),
126  leader(),
127  layer(),
128  metaInfo());
129  newEntity->setID(id());
130  return newEntity;
131  }
132  catch(std::out_of_range& e) {
133  return shared_from_this();
134  }
135 }
Coordinate mirror(const Coordinate &axis1, const Coordinate &axis2) const
mirror a coordinate
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: dimradial.cpp:79
TextConst::LineSpacingStyle lineSpacingStyle() const
Definition: dimension.cpp:91
const geo::Coordinate _definitionPoint2
Definition: dimradial.h:111
const geo::Coordinate & definitionPoint() const noexcept
move, moves by an offset
Definition: dimension.cpp:71
const double _leader
Definition: dimradial.h:110
virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override
move, moves by an offset
Definition: dimradial.cpp:45
virtual std::map< unsigned int, lc::geo::Coordinate > dragPoints() const override
Get all points of the entity that can be dragged.
Definition: dimradial.cpp:105
virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override
rotate, rotate operation
Definition: dimradial.cpp:56
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
Coordinate scale(const double &scale_factor) const
virtual CADEntity_CSPtr setDragPoints(std::map< unsigned int, lc::geo::Coordinate > dragPoints) const override
Return modified entity.
Definition: dimradial.cpp:116
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
const geo::Coordinate & middleOfText() const noexcept
Definition: dimension.cpp:75
TextConst::AttachmentPoint const & attachmentPoint() const
Definition: dimension.cpp:83
Definition: cadentity.h:12
Coordinate rotate(const Coordinate &angleVector) const
rotate around (0.,0.) with a given angle vector
double lineSpacingFactor() const
Definition: dimension.cpp:87
Block_CSPtr block() const
Return the current entity block.
Definition: cadentity.cpp:33
virtual CADEntity_CSPtr mirror(const geo::Coordinate &axis1, const geo::Coordinate &axis2) const override
Definition: dimradial.cpp:68
double leader() const
Definition: dimradial.cpp:97
virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override
copy, copies by an offset
Definition: dimradial.cpp:51
virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center, const geo::Coordinate &scale_factor) const override
scale, scales the entity
Definition: dimradial.cpp:62
double textAngle() const
Definition: dimension.cpp:79
geo::Coordinate definitionPoint2() const
Definition: dimradial.cpp:101
virtual const geo::Area boundingBox() const override
boundingBox of the entity
Definition: dimradial.cpp:74
DimRadial(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)
DimRadial.
Definition: dimradial.cpp:6