LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
line.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <list>
4 #include <cad/base/cadentity.h>
5 #include <cad/base/metainfo.h>
6 
8 
10 #include "cad/geometry/geovector.h"
11 #include "cad/interface/snapable.h"
14 #include "cad/meta/layer.h"
15 #include <cad/builders/line.h>
16 
17 namespace lc {
18  namespace entity {
28  class Line : public std::enable_shared_from_this<Line>, public CADEntity, public geo::Vector, public Snapable, public Draggable {
29  friend class builder::LineBuilder;
30 
31  public:
41  Line(const geo::Coordinate &start,
42  const geo::Coordinate &end,
43  const Layer_CSPtr layer,
44  const MetaInfo_CSPtr metaInfo = nullptr,
45  const Block_CSPtr block = nullptr
46  );
47 
57  Line(const geo::Vector &vector,
58  const Layer_CSPtr layer,
59  const MetaInfo_CSPtr metaInfo = nullptr,
60  const Block_CSPtr block = nullptr);
61 
62  Line(const Line_CSPtr other, bool sameID = false);
63 
64  public:
65  virtual std::vector<EntityCoordinate> snapPoints(const geo::Coordinate &coord, const SimpleSnapConstrain & constrain, double minDistanceToSnap,
66  int maxNumberOfSnapPoints) const override;
67 
68  virtual geo::Coordinate nearestPointOnPath(const geo::Coordinate &coord) const override;
69 
70  public:
71  virtual std::map<unsigned int, lc::geo::Coordinate> dragPoints() const override;
72  virtual CADEntity_CSPtr setDragPoints(std::map<unsigned int, lc::geo::Coordinate> dragPoints) const override;
73 
74  public:
80  virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override;
81 
87  virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override;
88 
95  virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override;
96 
103  virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center,
104  const geo::Coordinate &scale_factor) const override;
105 
106  virtual CADEntity_CSPtr mirror(const geo::Coordinate& axis1,
107  const geo::Coordinate& axis2) const override;
108 
113  virtual const geo::Area boundingBox() const override;
114 
115  virtual CADEntity_CSPtr modify(Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo, Block_CSPtr block) const override;
116 
117  public:
118  virtual void accept(GeoEntityVisitor &v) const override { v.visit(*this); }
119 
120  virtual void dispatch(EntityDispatch &ed) const override {
121  ed.visit(shared_from_this());
122  }
123 
124  private:
125  Line(const builder::LineBuilder& builder);
126  };
127 
129  }
130 }
virtual CADEntity_CSPtr scale(const geo::Coordinate &scale_center, const geo::Coordinate &scale_factor) const override
scale, scales the entity
Definition: line.cpp:94
const Coordinate end() const
Definition: geovector.h:23
virtual void dispatch(EntityDispatch &ed) const override
Definition: line.h:120
virtual CADEntity_CSPtr copy(const geo::Coordinate &offset) const override
copy, copies line by an offset
Definition: line.cpp:75
virtual void visit(entity::Line_CSPtr)=0
Layer_CSPtr layer() const
layer return the layer this entity is placed on
Definition: cadentity.cpp:29
virtual CADEntity_CSPtr rotate(const geo::Coordinate &rotation_center, const double rotation_angle) const override
rotate, rotate operation
Definition: line.cpp:84
MetaInfo_CSPtr metaInfo() const
Definition: cadentity.h:123
DECLARE_SHORT_SHARED_PTR(Document)
Definition: cadentity.h:12
virtual const geo::Area boundingBox() const override
boundingBox of the entity
Definition: line.cpp:115
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: line.cpp:60
virtual std::map< unsigned int, lc::geo::Coordinate > dragPoints() const override
Get all points of the entity that can be dragged.
Definition: line.cpp:132
virtual CADEntity_CSPtr move(const geo::Coordinate &offset) const override
move, moves by an offset
Definition: line.cpp:64
A line that can be put in a drawing.
Definition: line.h:28
Block_CSPtr block() const
Return the current entity block.
Definition: cadentity.cpp:33
virtual CADEntity_CSPtr setDragPoints(std::map< unsigned int, lc::geo::Coordinate > dragPoints) const override
Return modified entity.
Definition: line.cpp:141
virtual CADEntity_CSPtr mirror(const geo::Coordinate &axis1, const geo::Coordinate &axis2) const override
Definition: line.cpp:104
const Coordinate start() const
Definition: geovector.h:20
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...
Definition: line.cpp:34
Line(const geo::Coordinate &start, const geo::Coordinate &end, const Layer_CSPtr layer, const MetaInfo_CSPtr metaInfo=nullptr, const Block_CSPtr block=nullptr)
Construct a new line.
Definition: line.cpp:9
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: line.cpp:119
virtual void accept(GeoEntityVisitor &v) const override
Definition: line.h:118