LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
cadentity.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <cad/meta/block.h>
4 #include "cad/const.h"
5 #include "cad/base/id.h"
6 #include "cad/base/metainfo.h"
7 #include "cad/base/visitor.h"
9 #include "cad/meta/layer.h"
10 #include "cad/geometry/geoarea.h"
11 
12 namespace lc {
13  namespace builder {
14  class CADEntityBuilder;
15  }
16  namespace entity {
21  class CADEntity : public ID, virtual public Visitable {
23 
24  public:
26  }
27 
36  CADEntity(Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo = nullptr, const Block_CSPtr block = nullptr);
37 
38  CADEntity(CADEntity_CSPtr cadEntity, bool sameID);
39 
40  CADEntity(CADEntity_CSPtr cadEntity);
41 
42  virtual ~CADEntity() = default;
43 
50  virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const = 0;
51 
58  virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const = 0;
59 
66  virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center,
67  const double rotation_angle) const = 0;
68 
76  virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center,
77  const geo::Coordinate &scale_factor) const = 0;
78 
79  virtual CADEntity_CSPtr mirror(const geo::Coordinate& axis1,
80  const geo::Coordinate& axis2) const = 0;
81 
91  virtual const geo::Area boundingBox() const = 0;
92 
98  virtual CADEntity_CSPtr modify(Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo, Block_CSPtr block) const = 0;
99 
105  Layer_CSPtr layer() const;
106 
112  template<typename T>
113  const std::shared_ptr<const T> metaInfo(std::string metaName) const {
114  if (_metaInfo && (_metaInfo->find(metaName) != _metaInfo->end())) {
115  auto a=_metaInfo->at(metaName);
116  auto b=std::dynamic_pointer_cast<const T>(a);
117  return b;
118  }
119 
120  return nullptr;
121  }
122 
123  MetaInfo_CSPtr metaInfo() const {
124  return _metaInfo;
125  }
126 
127  virtual void accept(GeoEntityVisitor &v) const override { v.visit(*this); }
128 
129  virtual void dispatch(EntityDispatch &) const = 0;
130 
135  Block_CSPtr block() const;
136 
137  protected:
139 
140  private:
141  Layer_CSPtr _layer;
142  MetaInfo_CSPtr _metaInfo;
143  Block_CSPtr _block;
144  };
145 
147  }
148 }
virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center, const geo::Coordinate &scale_factor) const =0
Function implementation for Scale.
virtual ~CADEntity()=default
MetaInfo_CSPtr _metaInfo
Definition: cadentity.h:142
virtual CADEntity_CSPtr mirror(const geo::Coordinate &axis1, const geo::Coordinate &axis2) const =0
Block_CSPtr _block
Definition: cadentity.h:143
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const =0
Function for Move.
virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const =0
Function for Copy.
virtual void dispatch(EntityDispatch &) const =0
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
DECLARE_SHORT_SHARED_PTR(Document)
virtual CADEntity_CSPtr modify(Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo, Block_CSPtr block) const =0
modify Return a new entity with the same ID bit with possible modified metainfo and/pr layer informat...
Definition: cadentity.h:12
virtual void accept(GeoEntityVisitor &v) const override
Definition: cadentity.h:127
const std::shared_ptr< const T > metaInfo(std::string metaName) const
Definition: cadentity.h:113
Definition: id.h:15
Block_CSPtr block() const
Return the current entity block.
Definition: cadentity.cpp:33
virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const =0
Function implementation for rotate.
Layer_CSPtr _layer
Definition: cadentity.h:141
virtual const geo::Area boundingBox() const =0
boundingBox Return the bounding box of this entity. This should be as tight around the entity as poss...