OpenLexocad  28.0
Constraint.h
Go to the documentation of this file.
1 #pragma once
2 
4 #include <Geom/Lin.h>
5 #include <Geom/Lin2d.h>
6 #include <Geom/Pln.h>
7 #include <Geom/Trsf.h>
8 #include <Geom/Trsf2d.h>
9 #include <Geom/Vec.h>
10 
11 
12 namespace Geom
13 {
14 
15 class Dir;
16 
18 {
19 public:
22 
23  void setPoint(const Geom::Pnt& pnt);
24  void setPointAndDir(const Geom::Pnt& pnt, const Geom::Dir& dir);
25  const Geom::Pnt& getSolution() const;
26  bool hasSolution() const;
27 
28  const std::list<Geom::AbstractPointConstraint*>& getConstraints() const;
30  void removeAllConstraints(bool deleting = true);
31  void removePointConstraint(Geom::AbstractPointConstraint* constraint, bool deleting = true);
32 
33 private:
34  std::list<Geom::AbstractPointConstraint*> _constraints;
35  Geom::Pnt _pnt;
36  bool _hasSolution;
37 };
38 
40 {
41 public:
44 
46  void setPoint(const Geom::Pnt& pnt);
47  void setPointAndDir(const Geom::Pnt& pnt, const Geom::Dir& dir);
48  void setTransformation(const Geom::Trsf& t) { _trsf = t; }
49  const Geom::Pnt& getConstraintPoint() const { return _pnt; }
50  const Geom::Lin& getLine() const;
52  bool hasPoint() const { return true; };
54 
55 private:
57  Geom::Pnt _pnt;
58  Geom::Trsf _trsf;
59  Geom::Lin _line;
60 };
61 
63 {
64 public:
65  PointOnTwoLinesConstraint(const Geom::Lin& line1, const Geom::Lin& line2);
67 
69  void setPoint(const Geom::Pnt& pnt);
70  void setPointAndDir(const Geom::Pnt& pnt, const Geom::Dir& dir);
71  void setTransformation(const Geom::Trsf& t) { _trsf = t; }
72  const Geom::Pnt& getConstraintPoint() const { return _pnt; }
73  bool hasPoint() const { return true; };
75 
76 
77 private:
79  Geom::Pnt _pnt;
80  Geom::Trsf _trsf;
81  Geom::Lin _line1, _line2;
82 };
83 
85 {
86 public:
89 
91  void setPoint(const Geom::Pnt& pnt);
92  void setPointAndDir(const Geom::Pnt& pnt, const Geom::Dir& dir);
93  void setTransformation(const Geom::Trsf& t) { _trsf = t; }
94  const Geom::Pnt& getConstraintPoint() const { return _pnt; }
95  const Geom::Pln& getPlane() const;
97  bool hasPoint() const { return true; };
99 
100 private:
102  Geom::Pnt _pnt;
103  Geom::Trsf _trsf;
104  Geom::Pln _plane;
105 };
106 
107 class LX_GEOM_EXPORT PointOnRadius : public Geom::AbstractPointConstraint
108 {
109 public:
110  PointOnRadius(Geom::Pnt firstPoint, Geom::Vec tangent, double radius) : _firstPnt(firstPoint), _tangent(tangent), _radius(radius){};
112 
114  void setPoint(const Geom::Pnt& pnt);
115  void setPointAndDir(const Geom::Pnt& pnt, const Geom::Dir& dir);
116  void setTransformation(const Geom::Trsf& t) { _trsf = t; }
117  const Geom::Pnt& getConstraintPoint() const { return _pnt; }
118 
119 
120  bool hasPoint() const { return true; };
122 
123 private:
124  PointOnRadius() {}
125  Geom::Pnt _pnt;
126  Geom::Trsf _trsf;
127  Geom::Pnt _firstPnt;
128  Geom::Vec _tangent;
129  double _radius;
130 };
131 
133 {
134 public:
135  MidpointConstraint(const Geom::Pnt& secondPnt);
137 
139  void setPoint(const Geom::Pnt& firstPnt);
140  void setPointAndDir(const Geom::Pnt& pnt, const Geom::Dir& dir);
141  void setTransformation(const Geom::Trsf& t) { _trsf = t; }
142  const Geom::Pnt& getConstraintPoint() const { return _pnt; }
143  const Geom::Pnt& getSecondPoint() const;
144  bool hasPoint() const { return true; };
146 
147 private:
148  MidpointConstraint() {}
149  Geom::Pnt _pnt;
150  Geom::Trsf _trsf;
151  Geom::Pnt _secondPnt;
152 };
153 
154 // Returns the static point, setPoint doesn't modify the point.
155 // This is used to force the snapping to fixed user defined point
157 {
158 public:
159  StaticPointConstraint(const Geom::Pnt& staticPnt);
161 
163  void setPoint(const Geom::Pnt& pnt);
164  void setPointAndDir(const Geom::Pnt& pnt, const Geom::Dir& dir);
165  void setTransformation(const Geom::Trsf& t) { _trsf = t; }
166  const Geom::Pnt& getConstraintPoint() const { return _pnt; }
167  const Geom::Pnt& getStaticPoint() const;
168  bool hasPoint() const { return true; };
170 
171 private:
173  Geom::Pnt _staticPnt;
174  Geom::Pnt _pnt;
175  Geom::Trsf _trsf;
176 };
177 
178 
179 
180 // 2d
181 
183 {
184 public:
187 
188  void setPoint2d(const Geom::Pnt2d& pnt);
189  const Geom::Pnt2d& getSolution() const;
190  bool hasSolution() const { return true; };
191 
192  const std::list<Geom::AbstractPoint2dConstraint*>& getConstraints() const;
194  void removeAllConstraints(bool deleting = true);
195 
196 private:
197  std::list<Geom::AbstractPoint2dConstraint*> _constraints;
198  Geom::Pnt2d _pnt;
199 };
200 
202 {
203 public:
206 
208  void setPoint2d(const Geom::Pnt2d& pnt);
209  void setTransformation(const Geom::Trsf2d& t) { _trsf = t; }
210  const Geom::Pnt2d& getConstraintPoint2d() const { return _pnt; }
211  const Geom::Lin2d& getLine2d() const;
213  bool hasPoint() const { return true; };
215 
216 private:
218  Geom::Pnt2d _pnt;
219  Geom::Trsf2d _trsf;
220  Geom::Lin2d _line;
221 };
222 
224 {
225 public:
228 
230  void setPoint2d(const Geom::Pnt2d& firstPnt);
231  void setTransformation(const Geom::Trsf2d& t) { _trsf = t; }
232  const Geom::Pnt2d& getConstraintPoint2d() const { return _pnt; }
234  bool hasPoint() const { return true; };
236 
237 private:
239  Geom::Pnt2d _pnt;
240  Geom::Trsf2d _trsf;
241  Geom::Pnt2d _secondPnt;
242 };
243 
244 // Returns the static point, setPoint doesn't modify the point.
245 // This is used to force the snapping to fixed user defined point
247 {
248 public:
251 
253  void setPoint2d(const Geom::Pnt2d& pnt);
254  void setTransformation(const Geom::Trsf2d& t) { _trsf = t; }
255  const Geom::Pnt2d& getConstraintPoint2d() const { return _pnt; }
257  bool hasPoint() const { return true; };
259 
260 private:
262  Geom::Pnt2d _staticPnt;
263  Geom::Pnt2d _pnt;
264  Geom::Trsf2d _trsf;
265 };
266 
267 // This Class checks that the Point is located in a Rectangle.
268 // There is no Projection or something, the Point must be in Rectangle
270 {
271 public:
272  PointMustBeInRectangleConstraint(const Geom::Pln& plane, double u, double v);
274 
276  void setPoint(const Geom::Pnt& pnt);
277  void setPointAndDir(const Geom::Pnt& pnt, const Geom::Dir& dir);
278  void setTransformation(const Geom::Trsf& t) { _trsf = t; }
280  bool hasPoint() const;
281  void setValues(const Geom::Pln& plane, double u, double v);
283 
284 private:
286  Geom::Pnt _pnt;
287  Geom::Trsf _trsf;
288  Geom::Pln _plane;
289  double _u, _v;
290 };
291 
292 
293 } // namespace Geom
Geom::MidpointConstraint::~MidpointConstraint
~MidpointConstraint(void)
Geom::Point2dOnLine2dConstraint::Point2dOnLine2dConstraint
Point2dOnLine2dConstraint(const Geom::Lin2d &line)
Geom::PointConstraintSolver::setPointAndDir
void setPointAndDir(const Geom::Pnt &pnt, const Geom::Dir &dir)
Geom::MidpointConstraint::MidpointConstraint
MidpointConstraint(const Geom::Pnt &secondPnt)
Geom::PointOnPlaneConstraint::setTransformation
void setTransformation(const Geom::Trsf &t)
Definition: Constraint.h:93
Geom::PointOnLineConstraint::getConstraintPoint
const Geom::Pnt & getConstraintPoint() const
Returns the point based on the applied constraint.
Definition: Constraint.h:49
Vec.h
Trsf.h
Geom::Midpoint2dConstraint::~Midpoint2dConstraint
~Midpoint2dConstraint(void)
Geom::PointMustBeInRectangleConstraint::setPointAndDir
void setPointAndDir(const Geom::Pnt &pnt, const Geom::Dir &dir)
Geom::PointOnPlaneConstraint::getTransformedPlane
Geom::Pln getTransformedPlane() const
Geom::StaticPointConstraint::setTransformation
void setTransformation(const Geom::Trsf &t)
Definition: Constraint.h:165
Geom::Point2dConstraintSolver::setPoint2d
void setPoint2d(const Geom::Pnt2d &pnt)
Geom::Point2dOnLine2dConstraint::getLine2d
const Geom::Lin2d & getLine2d() const
Geom::Point2dConstraintSolver::getSolution
const Geom::Pnt2d & getSolution() const
Geom::StaticPoint2dConstraint::getStaticPoint2d
const Geom::Pnt2d & getStaticPoint2d() const
Geom::PointOnRadius::~PointOnRadius
~PointOnRadius(void)
Geom::Midpoint2dConstraint::clone
Geom::AbstractPoint2dConstraint * clone()
Definition: Constraint.h:235
Geom::Lin
Definition: Lin.h:49
Geom::MidpointConstraint::getConstraintPoint
const Geom::Pnt & getConstraintPoint() const
Returns the point based on the applied constraint.
Definition: Constraint.h:142
Geom::StaticPoint2dConstraint::setTransformation
void setTransformation(const Geom::Trsf2d &t)
Definition: Constraint.h:254
Geom::MidpointConstraint::clone
Geom::AbstractPointConstraint * clone()
Definition: Constraint.h:145
Geom::Point2dOnLine2dConstraint
Definition: Constraint.h:202
Lin.h
Geom::Vec
Defines a non-persistent vector in 3D space.
Definition: Vec.h:41
Geom::StaticPoint2dConstraint::StaticPoint2dConstraint
StaticPoint2dConstraint(const Geom::Pnt2d &staticPnt)
Geom::StaticPointConstraint::clone
Geom::AbstractPointConstraint * clone()
Definition: Constraint.h:169
Geom::PointOnPlaneConstraint::PointOnPlaneConstraint
PointOnPlaneConstraint(const Geom::Pln &plane)
Geom::StaticPointConstraint
Definition: Constraint.h:157
Geom::AbstractPointConstraintSolver
Definition: AbstractConstraint.h:22
Geom::PointOnRadius::setPointAndDir
void setPointAndDir(const Geom::Pnt &pnt, const Geom::Dir &dir)
Geom::StaticPointConstraint::hasPoint
bool hasPoint() const
Definition: Constraint.h:168
Geom::PointOnRadius
Definition: Constraint.h:108
Geom::PointOnPlaneConstraint::getConstraintPoint
const Geom::Pnt & getConstraintPoint() const
Returns the point based on the applied constraint.
Definition: Constraint.h:94
Geom::PointOnTwoLinesConstraint::setTransformation
void setTransformation(const Geom::Trsf &t)
Definition: Constraint.h:71
Geom::PointOnRadius::PointOnRadius
PointOnRadius(Geom::Pnt firstPoint, Geom::Vec tangent, double radius)
Definition: Constraint.h:110
Geom::PointConstraintSolver::~PointConstraintSolver
~PointConstraintSolver()
Geom::MidpointConstraint::getSecondPoint
const Geom::Pnt & getSecondPoint() const
Geom::PointOnLineConstraint::getLine
const Geom::Lin & getLine() const
Geom::PointOnPlaneConstraint::hasPoint
bool hasPoint() const
Definition: Constraint.h:97
Geom::PointOnLineConstraint::setPoint
void setPoint(const Geom::Pnt &pnt)
Throws Base::FailedNotDone.
Trsf2d.h
Geom::PointOnPlaneConstraint::getPlane
const Geom::Pln & getPlane() const
Geom::Point2dOnLine2dConstraint::getConstraintPoint2d
const Geom::Pnt2d & getConstraintPoint2d() const
Returns the point based on the applied constraint.
Definition: Constraint.h:210
Geom::StaticPointConstraint::setPointAndDir
void setPointAndDir(const Geom::Pnt &pnt, const Geom::Dir &dir)
Geom::PointMustBeInRectangleConstraint::setTransformation
void setTransformation(const Geom::Trsf &t)
Definition: Constraint.h:278
Geom::Point2dConstraintSolver::removeAllConstraints
void removeAllConstraints(bool deleting=true)
Geom::Midpoint2dConstraint::Midpoint2dConstraint
Midpoint2dConstraint(const Geom::Pnt2d &secondPnt)
Geom::Point2dConstraintSolver::getConstraints
const std::list< Geom::AbstractPoint2dConstraint * > & getConstraints() const
Geom::PointOnLineConstraint
Definition: Constraint.h:40
Geom::PointOnTwoLinesConstraint::setPointAndDir
void setPointAndDir(const Geom::Pnt &pnt, const Geom::Dir &dir)
Geom::Dir
Definition: Dir.h:45
Geom::PointOnLineConstraint::clone
Geom::AbstractPointConstraint * clone()
Definition: Constraint.h:53
Geom::Point2dConstraintSolver::Point2dConstraintSolver
Point2dConstraintSolver()
Geom::PointOnLineConstraint::PointOnLineConstraint
PointOnLineConstraint(const Geom::Lin &line)
Geom::PointConstraintSolver::PointConstraintSolver
PointConstraintSolver()
Geom::StaticPoint2dConstraint
Definition: Constraint.h:247
Geom::Point2dOnLine2dConstraint::setTransformation
void setTransformation(const Geom::Trsf2d &t)
Definition: Constraint.h:209
Geom::Pln
Definition: Pln.h:52
Geom::MidpointConstraint::setPointAndDir
void setPointAndDir(const Geom::Pnt &pnt, const Geom::Dir &dir)
Geom::PointOnTwoLinesConstraint::clone
Geom::AbstractPointConstraint * clone()
Definition: Constraint.h:74
Geom::Point2dConstraintSolver::addPoint2dConstraint
void addPoint2dConstraint(Geom::AbstractPoint2dConstraint *constraint)
Geom::AbstractPoint2dConstraint
Base class of all 2d point constraints.
Definition: AbstractConstraint.h:67
Geom::PointMustBeInRectangleConstraint::setPoint
void setPoint(const Geom::Pnt &pnt)
Throws Base::FailedNotDone.
Geom::PointOnTwoLinesConstraint
Definition: Constraint.h:63
Geom::PointOnPlaneConstraint::setPointAndDir
void setPointAndDir(const Geom::Pnt &pnt, const Geom::Dir &dir)
Geom::PointOnRadius::setTransformation
void setTransformation(const Geom::Trsf &t)
Definition: Constraint.h:116
Geom::StaticPointConstraint::setPoint
void setPoint(const Geom::Pnt &pnt)
Never throws.
Geom::PointOnPlaneConstraint::clone
Geom::AbstractPointConstraint * clone()
Definition: Constraint.h:98
Geom::PointOnTwoLinesConstraint::getConstraintPoint
const Geom::Pnt & getConstraintPoint() const
Returns the point based on the applied constraint.
Definition: Constraint.h:72
Geom::MidpointConstraint
Definition: Constraint.h:133
Geom::Pnt
Defines a non-persistent 3D Cartesian point.
Definition: Pnt.h:44
Geom::Point2dOnLine2dConstraint::clone
Geom::AbstractPoint2dConstraint * clone()
Definition: Constraint.h:214
Geom::PointOnLineConstraint::setPointAndDir
void setPointAndDir(const Geom::Pnt &pnt, const Geom::Dir &dir)
Geom::PointOnLineConstraint::~PointOnLineConstraint
~PointOnLineConstraint(void)
Geom::PointOnLineConstraint::setTransformation
void setTransformation(const Geom::Trsf &t)
Definition: Constraint.h:48
Geom::AbstractPoint2dConstraintSolver
Definition: AbstractConstraint.h:37
Geom::MidpointConstraint::setTransformation
void setTransformation(const Geom::Trsf &t)
Definition: Constraint.h:141
Geom::StaticPoint2dConstraint::~StaticPoint2dConstraint
~StaticPoint2dConstraint(void)
Geom::PointMustBeInRectangleConstraint::hasPoint
bool hasPoint() const
Geom::Point2dConstraintSolver::hasSolution
bool hasSolution() const
Definition: Constraint.h:190
Geom::PointOnRadius::getConstraintPoint
const Geom::Pnt & getConstraintPoint() const
Returns the point based on the applied constraint.
Definition: Constraint.h:117
Geom::StaticPoint2dConstraint::getConstraintPoint2d
const Geom::Pnt2d & getConstraintPoint2d() const
Returns the point based on the applied constraint.
Definition: Constraint.h:255
Geom::Point2dOnLine2dConstraint::hasPoint
bool hasPoint() const
Definition: Constraint.h:213
Geom::PointOnPlaneConstraint::~PointOnPlaneConstraint
~PointOnPlaneConstraint(void)
Geom::Midpoint2dConstraint::setTransformation
void setTransformation(const Geom::Trsf2d &t)
Definition: Constraint.h:231
Geom::PointOnTwoLinesConstraint::setPoint
void setPoint(const Geom::Pnt &pnt)
Throws Base::FailedNotDone.
Geom::PointConstraintSolver::getSolution
const Geom::Pnt & getSolution() const
Geom::PointMustBeInRectangleConstraint::setValues
void setValues(const Geom::Pln &plane, double u, double v)
Geom::Midpoint2dConstraint
Definition: Constraint.h:224
Geom::Point2dOnLine2dConstraint::~Point2dOnLine2dConstraint
~Point2dOnLine2dConstraint(void)
Geom::Point2dOnLine2dConstraint::setPoint2d
void setPoint2d(const Geom::Pnt2d &pnt)
Throws Base::FailedNotDone.
Geom::PointConstraintSolver::addPointConstraint
void addPointConstraint(Geom::AbstractPointConstraint *constraint)
Geom::AbstractPointConstraint
Base class of all point constraints.
Definition: AbstractConstraint.h:52
Geom::StaticPoint2dConstraint::setPoint2d
void setPoint2d(const Geom::Pnt2d &pnt)
Never throws.
Geom::PointConstraintSolver::getConstraints
const std::list< Geom::AbstractPointConstraint * > & getConstraints() const
Geom::PointOnTwoLinesConstraint::~PointOnTwoLinesConstraint
~PointOnTwoLinesConstraint(void)
Geom::PointConstraintSolver::setPoint
void setPoint(const Geom::Pnt &pnt)
Geom::PointConstraintSolver
Definition: Constraint.h:18
Geom::StaticPointConstraint::getConstraintPoint
const Geom::Pnt & getConstraintPoint() const
Returns the point based on the applied constraint.
Definition: Constraint.h:166
Geom::PointConstraintSolver::hasSolution
bool hasSolution() const
Pln.h
Geom::Point2dConstraintSolver::~Point2dConstraintSolver
~Point2dConstraintSolver()
Geom::PointOnRadius::setPoint
void setPoint(const Geom::Pnt &pnt)
Throws Base::FailedNotDone.
Geom::StaticPointConstraint::getStaticPoint
const Geom::Pnt & getStaticPoint() const
Geom::PointMustBeInRectangleConstraint::PointMustBeInRectangleConstraint
PointMustBeInRectangleConstraint(const Geom::Pln &plane, double u, double v)
Geom::Midpoint2dConstraint::getConstraintPoint2d
const Geom::Pnt2d & getConstraintPoint2d() const
Returns the point based on the applied constraint.
Definition: Constraint.h:232
Geom::PointMustBeInRectangleConstraint::~PointMustBeInRectangleConstraint
virtual ~PointMustBeInRectangleConstraint(void)
Geom::MidpointConstraint::hasPoint
bool hasPoint() const
Definition: Constraint.h:144
Geom::PointConstraintSolver::removeAllConstraints
void removeAllConstraints(bool deleting=true)
Geom::PointOnPlaneConstraint
Definition: Constraint.h:85
Geom::PointOnLineConstraint::hasPoint
bool hasPoint() const
Definition: Constraint.h:52
Geom::Midpoint2dConstraint::hasPoint
bool hasPoint() const
Definition: Constraint.h:234
Geom::PointOnLineConstraint::getTransformedLine
Geom::Lin getTransformedLine() const
Geom::Point2dConstraintSolver
Definition: Constraint.h:183
Geom::StaticPointConstraint::~StaticPointConstraint
~StaticPointConstraint(void)
Geom::PointMustBeInRectangleConstraint::getConstraintPoint
const Geom::Pnt & getConstraintPoint() const
Returns the point based on the applied constraint.
Geom::Trsf
Definition: Trsf.h:58
Geom::PointOnRadius::clone
Geom::AbstractPointConstraint * clone()
Definition: Constraint.h:121
Geom::Pnt2d
Defines a non-persistent 2D cartesian point.
Definition: Pnt2d.h:34
Geom::Trsf2d
Definition: Trsf2d.h:47
Geom::StaticPointConstraint::StaticPointConstraint
StaticPointConstraint(const Geom::Pnt &staticPnt)
Geom::Midpoint2dConstraint::getSecondPoint2d
const Geom::Pnt2d & getSecondPoint2d() const
Geom::PointOnTwoLinesConstraint::hasPoint
bool hasPoint() const
Definition: Constraint.h:73
Lin2d.h
Geom::PointMustBeInRectangleConstraint
Definition: Constraint.h:270
Geom::PointOnRadius::hasPoint
bool hasPoint() const
Definition: Constraint.h:120
Geom::Lin2d
Definition: Lin2d.h:52
Geom::MidpointConstraint::setPoint
void setPoint(const Geom::Pnt &firstPnt)
Never throws.
Geom::PointConstraintSolver::removePointConstraint
void removePointConstraint(Geom::AbstractPointConstraint *constraint, bool deleting=true)
Geom::StaticPoint2dConstraint::hasPoint
bool hasPoint() const
Definition: Constraint.h:257
Geom::PointOnPlaneConstraint::setPoint
void setPoint(const Geom::Pnt &pnt)
Throws Base::FailedNotDone.
Geom::StaticPoint2dConstraint::clone
Geom::AbstractPoint2dConstraint * clone()
Definition: Constraint.h:258
Geom::PointOnTwoLinesConstraint::PointOnTwoLinesConstraint
PointOnTwoLinesConstraint(const Geom::Lin &line1, const Geom::Lin &line2)
Geom::PointMustBeInRectangleConstraint::clone
Geom::AbstractPointConstraint * clone()
Definition: Constraint.h:282
AbstractConstraint.h
Geom::Point2dOnLine2dConstraint::getTransformedLine2d
Geom::Lin2d getTransformedLine2d() const
Geom
Definition: PropertyContainer.h:33
Geom::Midpoint2dConstraint::setPoint2d
void setPoint2d(const Geom::Pnt2d &firstPnt)
Never throws.