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