My Project
ParaLine.h
1 #pragma once
2 #include "ParaPoint.h"
3 
4 namespace ParaEngine
5 {
6  class QLine
7  {
8  public:
9  inline QLine();
10  inline QLine(const QPoint &pt1, const QPoint &pt2);
11  inline QLine(int x1, int y1, int x2, int y2);
12 
13  inline bool isNull() const;
14 
15  inline QPoint p1() const;
16  inline QPoint p2() const;
17 
18  inline int x1() const;
19  inline int y1() const;
20 
21  inline int x2() const;
22  inline int y2() const;
23 
24  inline int dx() const;
25  inline int dy() const;
26 
27  inline void translate(const QPoint &p);
28  inline void translate(int dx, int dy);
29 
30  inline QLine translated(const QPoint &p) const;
31  inline QLine translated(int dx, int dy) const;
32 
33  inline void setP1(const QPoint &p1);
34  inline void setP2(const QPoint &p2);
35  inline void setPoints(const QPoint &p1, const QPoint &p2);
36  inline void setLine(int x1, int y1, int x2, int y2);
37 
38  inline bool operator==(const QLine &d) const;
39  inline bool operator!=(const QLine &d) const { return !(*this == d); }
40 
41  private:
42  QPoint pt1, pt2;
43  };
44 
45  /*******************************************************************************
46  * class QLine inline members
47  *******************************************************************************/
48 
49  inline QLine::QLine() { }
50 
51  inline QLine::QLine(const QPoint &pt1_, const QPoint &pt2_) : pt1(pt1_), pt2(pt2_) { }
52 
53  inline QLine::QLine(int x1pos, int y1pos, int x2pos, int y2pos) : pt1(QPoint(x1pos, y1pos)), pt2(QPoint(x2pos, y2pos)) { }
54 
55  inline bool QLine::isNull() const
56  {
57  return pt1 == pt2;
58  }
59 
60  inline int QLine::x1() const
61  {
62  return pt1.x();
63  }
64 
65  inline int QLine::y1() const
66  {
67  return pt1.y();
68  }
69 
70  inline int QLine::x2() const
71  {
72  return pt2.x();
73  }
74 
75  inline int QLine::y2() const
76  {
77  return pt2.y();
78  }
79 
80  inline QPoint QLine::p1() const
81  {
82  return pt1;
83  }
84 
85  inline QPoint QLine::p2() const
86  {
87  return pt2;
88  }
89 
90  inline int QLine::dx() const
91  {
92  return pt2.x() - pt1.x();
93  }
94 
95  inline int QLine::dy() const
96  {
97  return pt2.y() - pt1.y();
98  }
99 
100  inline void QLine::translate(const QPoint &point)
101  {
102  pt1 += point;
103  pt2 += point;
104  }
105 
106  inline void QLine::translate(int adx, int ady)
107  {
108  this->translate(QPoint(adx, ady));
109  }
110 
111  inline QLine QLine::translated(const QPoint &p) const
112  {
113  return QLine(pt1 + p, pt2 + p);
114  }
115 
116  inline QLine QLine::translated(int adx, int ady) const
117  {
118  return translated(QPoint(adx, ady));
119  }
120 
121  inline void QLine::setP1(const QPoint &aP1)
122  {
123  pt1 = aP1;
124  }
125 
126  inline void QLine::setP2(const QPoint &aP2)
127  {
128  pt2 = aP2;
129  }
130 
131  inline void QLine::setPoints(const QPoint &aP1, const QPoint &aP2)
132  {
133  pt1 = aP1;
134  pt2 = aP2;
135  }
136 
137  inline void QLine::setLine(int aX1, int aY1, int aX2, int aY2)
138  {
139  pt1 = QPoint(aX1, aY1);
140  pt2 = QPoint(aX2, aY2);
141  }
142 
143  inline bool QLine::operator==(const QLine &d) const
144  {
145  return pt1 == d.pt1 && pt2 == d.pt2;
146  }
147 
148  /*******************************************************************************
149  * class QLineF
150  *******************************************************************************/
151  class QLineF {
152  public:
153 
154  enum IntersectType { NoIntersection, BoundedIntersection, UnboundedIntersection };
155 
156  inline QLineF();
157  inline QLineF(const QPointF &pt1, const QPointF &pt2);
158  inline QLineF(float x1, float y1, float x2, float y2);
159  inline QLineF(const QLine &line) : pt1(line.p1()), pt2(line.p2()) { }
160 
161  static QLineF fromPolar(float length, float angle);
162 
163  bool isNull() const;
164 
165  inline QPointF p1() const;
166  inline QPointF p2() const;
167 
168  inline float x1() const;
169  inline float y1() const;
170 
171  inline float x2() const;
172  inline float y2() const;
173 
174  inline float dx() const;
175  inline float dy() const;
176 
177  float length() const;
178  void setLength(float len);
179 
180  float angle() const;
181  void setAngle(float angle);
182 
183  float angleTo(const QLineF &l) const;
184 
185  QLineF unitVector() const;
186  inline QLineF normalVector() const;
187 
188  // ### Qt 6: rename intersects() or intersection() and rename IntersectType IntersectionType
189  IntersectType intersect(const QLineF &l, QPointF *intersectionPoint) const;
190 
191  float angle(const QLineF &l) const;
192 
193  inline QPointF pointAt(float t) const;
194  inline void translate(const QPointF &p);
195  inline void translate(float dx, float dy);
196 
197  inline QLineF translated(const QPointF &p) const;
198  inline QLineF translated(float dx, float dy) const;
199 
200  inline void setP1(const QPointF &p1);
201  inline void setP2(const QPointF &p2);
202  inline void setPoints(const QPointF &p1, const QPointF &p2);
203  inline void setLine(float x1, float y1, float x2, float y2);
204 
205  inline bool operator==(const QLineF &d) const;
206  inline bool operator!=(const QLineF &d) const { return !(*this == d); }
207 
208  QLine toLine() const;
209 
210  private:
211  QPointF pt1, pt2;
212  };
213 
214  /*******************************************************************************
215  * class QLineF inline members
216  *******************************************************************************/
217 
218  inline QLineF::QLineF()
219  {
220  }
221 
222  inline QLineF::QLineF(const QPointF &apt1, const QPointF &apt2)
223  : pt1(apt1), pt2(apt2)
224  {
225  }
226 
227  inline QLineF::QLineF(float x1pos, float y1pos, float x2pos, float y2pos)
228  : pt1(x1pos, y1pos), pt2(x2pos, y2pos)
229  {
230  }
231 
232  inline float QLineF::x1() const
233  {
234  return pt1.x();
235  }
236 
237  inline float QLineF::y1() const
238  {
239  return pt1.y();
240  }
241 
242  inline float QLineF::x2() const
243  {
244  return pt2.x();
245  }
246 
247  inline float QLineF::y2() const
248  {
249  return pt2.y();
250  }
251 
252  inline bool QLineF::isNull() const
253  {
254  return Math::FuzzyCompare(pt1.x(), pt2.x()) && Math::FuzzyCompare(pt1.y(), pt2.y());
255  }
256 
257  inline QPointF QLineF::p1() const
258  {
259  return pt1;
260  }
261 
262  inline QPointF QLineF::p2() const
263  {
264  return pt2;
265  }
266 
267  inline float QLineF::dx() const
268  {
269  return pt2.x() - pt1.x();
270  }
271 
272  inline float QLineF::dy() const
273  {
274  return pt2.y() - pt1.y();
275  }
276 
277  inline QLineF QLineF::normalVector() const
278  {
279  return QLineF(p1(), p1() + QPointF(dy(), -dx()));
280  }
281 
282  inline void QLineF::translate(const QPointF &point)
283  {
284  pt1 += point;
285  pt2 += point;
286  }
287 
288  inline void QLineF::translate(float adx, float ady)
289  {
290  this->translate(QPointF(adx, ady));
291  }
292 
293  inline QLineF QLineF::translated(const QPointF &p) const
294  {
295  return QLineF(pt1 + p, pt2 + p);
296  }
297 
298  inline QLineF QLineF::translated(float adx, float ady) const
299  {
300  return translated(QPointF(adx, ady));
301  }
302 
303  inline void QLineF::setLength(float len)
304  {
305  if (isNull())
306  return;
307  QLineF v = unitVector();
308  pt2 = QPointF(pt1.x() + v.dx() * len, pt1.y() + v.dy() * len);
309  }
310 
311  inline QPointF QLineF::pointAt(float t) const
312  {
313  return QPointF(pt1.x() + (pt2.x() - pt1.x()) * t, pt1.y() + (pt2.y() - pt1.y()) * t);
314  }
315 
316  inline QLine QLineF::toLine() const
317  {
318  return QLine(pt1.toPoint(), pt2.toPoint());
319  }
320 
321 
322  inline void QLineF::setP1(const QPointF &aP1)
323  {
324  pt1 = aP1;
325  }
326 
327  inline void QLineF::setP2(const QPointF &aP2)
328  {
329  pt2 = aP2;
330  }
331 
332  inline void QLineF::setPoints(const QPointF &aP1, const QPointF &aP2)
333  {
334  pt1 = aP1;
335  pt2 = aP2;
336  }
337 
338  inline void QLineF::setLine(float aX1, float aY1, float aX2, float aY2)
339  {
340  pt1 = QPointF(aX1, aY1);
341  pt2 = QPointF(aX2, aY2);
342  }
343 
344 
345  inline bool QLineF::operator==(const QLineF &d) const
346  {
347  return pt1 == d.pt1 && pt2 == d.pt2;
348  }
349 }
Definition: ParaPoint.h:203
different physics engine has different winding order.
Definition: EventBinding.h:32
Definition: ParaLine.h:151
Definition: ParaLine.h:6
Definition: ParaPoint.h:5