qline.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/corelib/tools/qline.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2015 The Qt Company Ltd.-
4** Contact: http://www.qt.io/licensing/-
5**-
6** This file is part of the QtCore module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL21$-
9** Commercial License Usage-
10** Licensees holding valid commercial Qt licenses may use this file in-
11** accordance with the commercial license agreement provided with the-
12** Software or, alternatively, in accordance with the terms contained in-
13** a written agreement between you and The Qt Company. For licensing terms-
14** and conditions see http://www.qt.io/terms-conditions. For further-
15** information use the contact form at http://www.qt.io/contact-us.-
16**-
17** GNU Lesser General Public License Usage-
18** Alternatively, this file may be used under the terms of the GNU Lesser-
19** General Public License version 2.1 or version 3 as published by the Free-
20** Software Foundation and appearing in the file LICENSE.LGPLv21 and-
21** LICENSE.LGPLv3 included in the packaging of this file. Please review the-
22** following information to ensure the GNU Lesser General Public License-
23** requirements will be met: https://www.gnu.org/licenses/lgpl.html and-
24** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.-
25**-
26** As a special exception, The Qt Company gives you certain additional-
27** rights. These rights are described in The Qt Company LGPL Exception-
28** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.-
29**-
30** $QT_END_LICENSE$-
31**-
32****************************************************************************/-
33-
34#include "qline.h"-
35#include "qdebug.h"-
36#include "qdatastream.h"-
37#include "qmath.h"-
38#include <private/qnumeric_p.h>-
39-
40QT_BEGIN_NAMESPACE-
41-
42/*!-
43 \class QLine-
44 \inmodule QtCore-
45 \ingroup painting-
46-
47 \brief The QLine class provides a two-dimensional vector using-
48 integer precision.-
49-
50 A QLine describes a finite length line (or a line segment) on a-
51 two-dimensional surface. The start and end points of the line are-
52 specified using integer point accuracy for coordinates. Use the-
53 QLineF constructor to retrieve a floating point copy.-
54-
55 \table-
56 \row-
57 \li \inlineimage qline-point.png-
58 \li \inlineimage qline-coordinates.png-
59 \endtable-
60-
61 The positions of the line's start and end points can be retrieved-
62 using the p1(), x1(), y1(), p2(), x2(), and y2() functions. The-
63 dx() and dy() functions return the horizontal and vertical-
64 components of the line. Use isNull() to determine whether the-
65 QLine represents a valid line or a null line.-
66-
67 Finally, the line can be translated a given offset using the-
68 translate() function.-
69-
70 \sa QLineF, QPolygon, QRect-
71*/-
72-
73/*!-
74 \fn QLine::QLine()-
75-
76 Constructs a null line.-
77*/-
78-
79/*!-
80 \fn QLine::QLine(const QPoint &p1, const QPoint &p2)-
81-
82 Constructs a line object that represents the line between \a p1 and-
83 \a p2.-
84*/-
85-
86/*!-
87 \fn QLine::QLine(int x1, int y1, int x2, int y2)-
88-
89 Constructs a line object that represents the line between (\a x1, \a y1) and-
90 (\a x2, \a y2).-
91*/-
92-
93/*!-
94 \fn bool QLine::isNull() const-
95-
96 Returns \c true if the line is not set up with valid start and end point;-
97 otherwise returns \c false.-
98*/-
99-
100/*!-
101 \fn QPoint QLine::p1() const-
102-
103 Returns the line's start point.-
104-
105 \sa x1(), y1(), p2()-
106*/-
107-
108/*!-
109 \fn QPoint QLine::p2() const-
110-
111 Returns the line's end point.-
112-
113 \sa x2(), y2(), p1()-
114*/-
115-
116/*!-
117 \fn int QLine::x1() const-
118-
119 Returns the x-coordinate of the line's start point.-
120-
121 \sa p1()-
122*/-
123-
124/*!-
125 \fn int QLine::y1() const-
126-
127 Returns the y-coordinate of the line's start point.-
128-
129 \sa p1()-
130*/-
131-
132/*!-
133 \fn int QLine::x2() const-
134-
135 Returns the x-coordinate of the line's end point.-
136-
137 \sa p2()-
138*/-
139-
140/*!-
141 \fn int QLine::y2() const-
142-
143 Returns the y-coordinate of the line's end point.-
144-
145 \sa p2()-
146*/-
147-
148/*!-
149 \fn int QLine::dx() const-
150-
151 Returns the horizontal component of the line's vector.-
152-
153 \sa dy()-
154*/-
155-
156/*!-
157 \fn int QLine::dy() const-
158-
159 Returns the vertical component of the line's vector.-
160-
161 \sa dx()-
162*/-
163-
164/*!-
165 \fn bool QLine::operator!=(const QLine &line) const-
166-
167 Returns \c true if the given \a line is not the same as \e this line.-
168-
169 A line is different from another line if any of their start or-
170 end points differ, or the internal order of the points is different.-
171*/-
172-
173/*!-
174 \fn bool QLine::operator==(const QLine &line) const-
175-
176 Returns \c true if the given \a line is the same as \e this line.-
177-
178 A line is identical to another line if the start and end points-
179 are identical, and the internal order of the points is the same.-
180*/-
181-
182/*!-
183 \fn void QLine::translate(const QPoint &offset)-
184-
185 Translates this line by the given \a offset.-
186*/-
187-
188/*!-
189 \fn void QLine::translate(int dx, int dy)-
190 \overload-
191-
192 Translates this line the distance specified by \a dx and \a dy.-
193*/-
194-
195/*!-
196 \fn QLine QLine::translated(const QPoint &offset) const-
197-
198 \since 4.4-
199-
200 Returns this line translated by the given \a offset.-
201*/-
202-
203/*!-
204 \fn QLine QLine::translated(int dx, int dy) const-
205 \overload-
206 \since 4.4-
207-
208 Returns this line translated the distance specified by \a dx and \a dy.-
209*/-
210-
211-
212/*!-
213 \fn void QLine::setP1(const QPoint &p1)-
214 \since 4.4-
215-
216 Sets the starting point of this line to \a p1.-
217-
218 \sa setP2(), p1()-
219*/-
220-
221-
222/*!-
223 \fn void QLine::setP2(const QPoint &p2)-
224 \since 4.4-
225-
226 Sets the end point of this line to \a p2.-
227-
228 \sa setP1(), p2()-
229*/-
230-
231-
232/*!-
233 \fn void QLine::setPoints(const QPoint &p1, const QPoint &p2)-
234 \since 4.4-
235-
236 Sets the start point of this line to \a p1 and the end point of this line to \a p2.-
237-
238 \sa setP1(), setP2(), p1(), p2()-
239*/-
240-
241-
242/*!-
243 \fn void QLine::setLine(int x1, int y1, int x2, int y2)-
244 \since 4.4-
245-
246 Sets this line to the start in \a x1, \a y1 and end in \a x2, \a y2.-
247-
248 \sa setP1(), setP2(), p1(), p2()-
249*/-
250-
251-
252-
253#ifndef QT_NO_DEBUG_STREAM-
254QDebug operator<<(QDebug dbg, const QLine &p)-
255{-
256 QDebugStateSaver saver(dbg);-
257 dbg.nospace() << "QLine(" << p.p1() << ',' << p.p2() << ')';-
258 return dbg;
executed 2 times by 2 tests: return dbg;
Executed by:
  • tst_QDebug
  • tst_QVariant
2
259}-
260#endif-
261-
262#ifndef QT_NO_DATASTREAM-
263/*!-
264 \relates QLine-
265-
266 Writes the given \a line to the given \a stream and returns a-
267 reference to the stream.-
268-
269 \sa {Serializing Qt Data Types}-
270*/-
271-
272QDataStream &operator<<(QDataStream &stream, const QLine &line)-
273{-
274 stream << line.p1() << line.p2();-
275 return stream;
executed 3 times by 2 tests: return stream;
Executed by:
  • tst_QMetaType
  • tst_QVariant
3
276}-
277-
278/*!-
279 \relates QLine-
280-
281 Reads a line from the given \a stream into the given \a line and-
282 returns a reference to the stream.-
283-
284 \sa {Serializing Qt Data Types}-
285*/-
286-
287QDataStream &operator>>(QDataStream &stream, QLine &line)-
288{-
289 QPoint p1, p2;-
290 stream >> p1;-
291 stream >> p2;-
292 line = QLine(p1, p2);-
293-
294 return stream;
executed 7 times by 2 tests: return stream;
Executed by:
  • tst_QMetaType
  • tst_QVariant
7
295}-
296-
297#endif // QT_NO_DATASTREAM-
298-
299-
300#ifndef M_2PI-
301#define M_2PI 6.28318530717958647692528676655900576-
302#endif-
303-
304/*!-
305 \class QLineF-
306 \inmodule QtCore-
307 \ingroup painting-
308-
309 \brief The QLineF class provides a two-dimensional vector using-
310 floating point precision.-
311-
312 A QLineF describes a finite length line (or line segment) on a-
313 two-dimensional surface. QLineF defines the start and end points-
314 of the line using floating point accuracy for coordinates. Use-
315 the toLine() function to retrieve an integer based copy of this-
316 line.-
317-
318 \table-
319 \row-
320 \li \inlineimage qline-point.png-
321 \li \inlineimage qline-coordinates.png-
322 \endtable-
323-
324 The positions of the line's start and end points can be retrieved-
325 using the p1(), x1(), y1(), p2(), x2(), and y2() functions. The-
326 dx() and dy() functions return the horizontal and vertical-
327 components of the line, respectively.-
328-
329 The line's length can be retrieved using the length() function,-
330 and altered using the setLength() function. Similarly, angle()-
331 and setAngle() are respectively used for retrieving and altering-
332 the angle of the line. Use the isNull()-
333 function to determine whether the QLineF represents a valid line-
334 or a null line.-
335-
336 The intersect() function determines the IntersectType for this-
337 line and a given line, while the angleTo() function returns the-
338 angle between the lines. In addition, the unitVector() function-
339 returns a line that has the same starting point as this line, but-
340 with a length of only 1, while the normalVector() function returns-
341 a line that is perpendicular to this line with the same starting-
342 point and length.-
343-
344 Finally, the line can be translated a given offset using the-
345 translate() function, and can be traversed using the pointAt()-
346 function.-
347-
348 \sa QLine, QPolygonF, QRectF-
349*/-
350-
351/*!-
352 \enum QLineF::IntersectType-
353-
354 Describes the intersection between two lines.-
355-
356 \table-
357 \row-
358 \li \inlineimage qlinef-unbounded.png-
359 \li \inlineimage qlinef-bounded.png-
360 \row-
361 \li QLineF::UnboundedIntersection-
362 \li QLineF::BoundedIntersection-
363 \endtable-
364-
365 \value NoIntersection Indicates that the lines do not intersect;-
366 i.e. they are parallel.-
367-
368 \value UnboundedIntersection The two lines intersect, but not-
369 within the range defined by their lengths. This will be the case-
370 if the lines are not parallel.-
371-
372 intersect() will also return this value if the intersect point is-
373 within the start and end point of only one of the lines.-
374-
375 \value BoundedIntersection The two lines intersect with each other-
376 within the start and end points of each line.-
377-
378 \sa intersect()-
379*/-
380-
381/*!-
382 \fn QLineF::QLineF()-
383-
384 Constructs a null line.-
385*/-
386-
387/*!-
388 \fn QLineF::QLineF(const QPointF &p1, const QPointF &p2)-
389-
390 Constructs a line object that represents the line between \a p1 and-
391 \a p2.-
392*/-
393-
394/*!-
395 \fn QLineF::QLineF(qreal x1, qreal y1, qreal x2, qreal y2)-
396-
397 Constructs a line object that represents the line between (\a x1, \a y1) and-
398 (\a x2, \a y2).-
399*/-
400-
401/*!-
402 \fn QLineF::QLineF(const QLine &line)-
403-
404 Construct a QLineF object from the given integer-based \a line.-
405-
406 \sa toLine()-
407*/-
408-
409/*!-
410 \fn bool QLineF::isNull() const-
411-
412 Returns \c true if the line is not set up with valid start and end point;-
413 otherwise returns \c false.-
414*/-
415-
416/*!-
417 \fn QPointF QLineF::p1() const-
418-
419 Returns the line's start point.-
420-
421 \sa x1(), y1(), p2()-
422*/-
423-
424/*!-
425 \fn QPointF QLineF::p2() const-
426-
427 Returns the line's end point.-
428-
429 \sa x2(), y2(), p1()-
430*/-
431-
432/*!-
433 \fn QLine QLineF::toLine() const-
434-
435 Returns an integer based copy of this line.-
436-
437 Note that the returned line's start and end points are rounded to-
438 the nearest integer.-
439-
440 \sa QLineF()-
441*/-
442/*!-
443 \fn qreal QLineF::x1() const-
444-
445 Returns the x-coordinate of the line's start point.-
446-
447 \sa p1()-
448*/-
449-
450/*!-
451 \fn qreal QLineF::y1() const-
452-
453 Returns the y-coordinate of the line's start point.-
454-
455 \sa p1()-
456*/-
457-
458/*!-
459 \fn qreal QLineF::x2() const-
460-
461 Returns the x-coordinate of the line's end point.-
462-
463 \sa p2()-
464*/-
465-
466/*!-
467 \fn qreal QLineF::y2() const-
468-
469 Returns the y-coordinate of the line's end point.-
470-
471 \sa p2()-
472*/-
473-
474/*!-
475 \fn qreal QLineF::dx() const-
476-
477 Returns the horizontal component of the line's vector.-
478-
479 \sa dy(), pointAt()-
480*/-
481-
482/*!-
483 \fn qreal QLineF::dy() const-
484-
485 Returns the vertical component of the line's vector.-
486-
487 \sa dx(), pointAt()-
488*/-
489-
490/*!-
491 \fn QLineF::setLength(qreal length)-
492-
493 Sets the length of the line to the given \a length. QLineF will-
494 move the end point - p2() - of the line to give the line its new length.-
495-
496 If the line is a null line, the length will remain zero regardless-
497 of the length specified.-
498-
499 \sa length(), isNull()-
500*/-
501-
502/*!-
503 \fn QLineF QLineF::normalVector() const-
504-
505 Returns a line that is perpendicular to this line with the same starting-
506 point and length.-
507-
508 \image qlinef-normalvector.png-
509-
510 \sa unitVector()-
511*/-
512-
513/*!-
514 \fn bool QLineF::operator!=(const QLineF &line) const-
515-
516 Returns \c true if the given \a line is not the same as \e this line.-
517-
518 A line is different from another line if their start or end points-
519 differ, or the internal order of the points is different.-
520*/-
521-
522/*!-
523 \fn bool QLineF::operator==(const QLineF &line) const-
524-
525 Returns \c true if the given \a line is the same as this line.-
526-
527 A line is identical to another line if the start and end points-
528 are identical, and the internal order of the points is the same.-
529*/-
530-
531/*!-
532 \fn qreal QLineF::pointAt(qreal t) const-
533-
534 Returns the point at the parameterized position specified by \a-
535 t. The function returns the line's start point if t = 0, and its end-
536 point if t = 1.-
537-
538 \sa dx(), dy()-
539*/-
540-
541/*!-
542 Returns the length of the line.-
543-
544 \sa setLength()-
545*/-
546qreal QLineF::length() const-
547{-
548 qreal x = pt2.x() - pt1.x();-
549 qreal y = pt2.y() - pt1.y();-
550 return qSqrt(x*x + y*y);
executed 133013 times by 21 tests: return qSqrt(x*x + y*y);
Executed by:
  • tst_QAccessibility
  • tst_QBrush
  • tst_QCheckBox
  • tst_QDataStream
  • tst_QGestureRecognizer
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QPrinter
  • tst_QProgressBar
  • tst_QStyle
  • tst_QTreeView
  • tst_QTreeWidget
133013
551}-
552-
553/*!-
554 \since 4.4-
555-
556 Returns the angle of the line in degrees.-
557-
558 The return value will be in the range of values from 0.0 up to but not-
559 including 360.0. The angles are measured counter-clockwise from a point-
560 on the x-axis to the right of the origin (x > 0).-
561-
562 \sa setAngle()-
563*/-
564qreal QLineF::angle() const-
565{-
566 const qreal dx = pt2.x() - pt1.x();-
567 const qreal dy = pt2.y() - pt1.y();-
568-
569 const qreal theta = qAtan2(-dy, dx) * 360.0 / M_2PI;-
570-
571 const qreal theta_normalized = theta < 0 ? theta + 360 : theta;
theta < 0Description
TRUEevaluated 53857 times by 15 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGestureRecognizer
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
FALSEevaluated 54304 times by 10 tests
Evaluated by:
  • tst_QGestureRecognizer
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QPainter
  • tst_QPainterPath
53857-54304
572-
573 if (qFuzzyCompare(theta_normalized, qreal(360)))
qFuzzyCompare(...d, qreal(360))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QLine
FALSEevaluated 108159 times by 15 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGestureRecognizer
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
2-108159
574 return qreal(0);
executed 2 times by 1 test: return qreal(0);
Executed by:
  • tst_QLine
2
575 else-
576 return theta_normalized;
executed 108159 times by 15 tests: return theta_normalized;
Executed by:
  • tst_QCheckBox
  • tst_QGestureRecognizer
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
108159
577}-
578-
579/*!-
580 \since 4.4-
581-
582 Sets the angle of the line to the given \a angle (in degrees).-
583 This will change the position of the second point of the line such that-
584 the line has the given angle.-
585-
586 Positive values for the angles mean counter-clockwise while negative values-
587 mean the clockwise direction. Zero degrees is at the 3 o'clock position.-
588-
589 \sa angle()-
590*/-
591void QLineF::setAngle(qreal angle)-
592{-
593 const qreal angleR = angle * M_2PI / 360.0;-
594 const qreal l = length();-
595-
596 const qreal dx = qCos(angleR) * l;-
597 const qreal dy = -qSin(angleR) * l;-
598-
599 pt2.rx() = pt1.x() + dx;-
600 pt2.ry() = pt1.y() + dy;-
601}
executed 1804 times by 1 test: end of block
Executed by:
  • tst_QLine
1804
602-
603/*!-
604 \since 4.4-
605-
606 Returns a QLineF with the given \a length and \a angle.-
607-
608 The first point of the line will be on the origin.-
609-
610 Positive values for the angles mean counter-clockwise while negative values-
611 mean the clockwise direction. Zero degrees is at the 3 o'clock position.-
612*/-
613QLineF QLineF::fromPolar(qreal length, qreal angle)-
614{-
615 const qreal angleR = angle * M_2PI / 360.0;-
616 return QLineF(0, 0, qCos(angleR) * length, -qSin(angleR) * length);
executed 4169 times by 2 tests: return QLineF(0, 0, qCos(angleR) * length, -qSin(angleR) * length);
Executed by:
  • tst_QLine
  • tst_QPainterPath
4169
617}-
618-
619/*!-
620 Returns the unit vector for this line, i.e a line starting at the-
621 same point as \e this line with a length of 1.0.-
622-
623 \sa normalVector()-
624*/-
625QLineF QLineF::unitVector() const-
626{-
627 qreal x = pt2.x() - pt1.x();-
628 qreal y = pt2.y() - pt1.y();-
629-
630 qreal len = qSqrt(x*x + y*y);-
631 QLineF f(p1(), QPointF(pt1.x() + x/len, pt1.y() + y/len));-
632-
633#ifndef QT_NO_DEBUG-
634 if (qAbs(f.length() - 1) >= 0.001)
qAbs(f.length() - 1) >= 0.001Description
TRUEnever evaluated
FALSEevaluated 102525 times by 15 tests
Evaluated by:
  • tst_QAccessibility
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
0-102525
635 qWarning("QLine::unitVector: New line does not have unit length");
never executed: QMessageLogger(__FILE__, 635, __PRETTY_FUNCTION__).warning("QLine::unitVector: New line does not have unit length");
0
636#endif-
637-
638 return f;
executed 102525 times by 15 tests: return f;
Executed by:
  • tst_QAccessibility
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
102525
639}-
640-
641/*!-
642 \fn QLineF::IntersectType QLineF::intersect(const QLineF &line, QPointF *intersectionPoint) const-
643-
644 Returns a value indicating whether or not \e this line intersects-
645 with the given \a line.-
646-
647 The actual intersection point is extracted to \a intersectionPoint-
648 (if the pointer is valid). If the lines are parallel, the-
649 intersection point is undefined.-
650*/-
651-
652QLineF::IntersectType QLineF::intersect(const QLineF &l, QPointF *intersectionPoint) const-
653{-
654 // ipmlementation is based on Graphics Gems III's "Faster Line Segment Intersection"-
655 const QPointF a = pt2 - pt1;-
656 const QPointF b = l.pt1 - l.pt2;-
657 const QPointF c = pt1 - l.pt1;-
658-
659 const qreal denominator = a.y() * b.x() - a.x() * b.y();-
660 if (denominator == 0 || !qt_is_finite(denominator))
denominator == 0Description
TRUEevaluated 3612 times by 8 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsItem
  • tst_QGraphicsScene
  • tst_QGraphicsView
  • tst_QLine
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
FALSEevaluated 53458 times by 14 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
!qt_is_finite(denominator)Description
TRUEnever evaluated
FALSEevaluated 53458 times by 14 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
0-53458
661 return NoIntersection;
executed 3612 times by 8 tests: return NoIntersection;
Executed by:
  • tst_QCheckBox
  • tst_QGraphicsItem
  • tst_QGraphicsScene
  • tst_QGraphicsView
  • tst_QLine
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
3612
662-
663 const qreal reciprocal = 1 / denominator;-
664 const qreal na = (b.y() * c.x() - b.x() * c.y()) * reciprocal;-
665 if (intersectionPoint)
intersectionPointDescription
TRUEevaluated 53458 times by 14 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
FALSEnever evaluated
0-53458
666 *intersectionPoint = pt1 + a * na;
executed 53458 times by 14 tests: *intersectionPoint = pt1 + a * na;
Executed by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
53458
667-
668 if (na < 0 || na > 1)
na < 0Description
TRUEevaluated 35 times by 5 tests
Evaluated by:
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QTreeWidget
FALSEevaluated 53423 times by 14 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
na > 1Description
TRUEevaluated 26225 times by 13 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
FALSEevaluated 27198 times by 14 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
35-53423
669 return UnboundedIntersection;
executed 26260 times by 13 tests: return UnboundedIntersection;
Executed by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
26260
670-
671 const qreal nb = (a.x() * c.y() - a.y() * c.x()) * reciprocal;-
672 if (nb < 0 || nb > 1)
nb < 0Description
TRUEnever evaluated
FALSEevaluated 27198 times by 14 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
nb > 1Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • tst_QLine
FALSEevaluated 27197 times by 14 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
0-27198
673 return UnboundedIntersection;
executed 1 time by 1 test: return UnboundedIntersection;
Executed by:
  • tst_QLine
1
674-
675 return BoundedIntersection;
executed 27197 times by 14 tests: return BoundedIntersection;
Executed by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
27197
676}-
677-
678/*!-
679 \fn void QLineF::translate(const QPointF &offset)-
680-
681 Translates this line by the given \a offset.-
682*/-
683-
684/*!-
685 \fn void QLineF::translate(qreal dx, qreal dy)-
686 \overload-
687-
688 Translates this line the distance specified by \a dx and \a dy.-
689*/-
690-
691/*!-
692 \fn QLineF QLineF::translated(const QPointF &offset) const-
693-
694 \since 4.4-
695-
696 Returns this line translated by the given \a offset.-
697*/-
698-
699/*!-
700 \fn QLineF QLineF::translated(qreal dx, qreal dy) const-
701 \overload-
702 \since 4.4-
703-
704 Returns this line translated the distance specified by \a dx and \a dy.-
705*/-
706-
707/*!-
708 \fn void QLineF::setP1(const QPointF &p1)-
709 \since 4.4-
710-
711 Sets the starting point of this line to \a p1.-
712-
713 \sa setP2(), p1()-
714*/-
715-
716-
717/*!-
718 \fn void QLineF::setP2(const QPointF &p2)-
719 \since 4.4-
720-
721 Sets the end point of this line to \a p2.-
722-
723 \sa setP1(), p2()-
724*/-
725-
726-
727/*!-
728 \fn void QLineF::setPoints(const QPointF &p1, const QPointF &p2)-
729 \since 4.4-
730-
731 Sets the start point of this line to \a p1 and the end point of this line to \a p2.-
732-
733 \sa setP1(), setP2(), p1(), p2()-
734*/-
735-
736-
737/*!-
738 \fn void QLineF::setLine(qreal x1, qreal y1, qreal x2, qreal y2)-
739 \since 4.4-
740-
741 Sets this line to the start in \a x1, \a y1 and end in \a x2, \a y2.-
742-
743 \sa setP1(), setP2(), p1(), p2()-
744*/-
745-
746/*!-
747 \fn qreal QLineF::angleTo(const QLineF &line) const-
748-
749 \since 4.4-
750-
751 Returns the angle (in degrees) from this line to the given \a-
752 line, taking the direction of the lines into account. If the lines-
753 do not intersect within their range, it is the intersection point of-
754 the extended lines that serves as origin (see-
755 QLineF::UnboundedIntersection).-
756-
757 The returned value represents the number of degrees you need to add-
758 to this line to make it have the same angle as the given \a line,-
759 going counter-clockwise.-
760-
761 \sa intersect()-
762*/-
763qreal QLineF::angleTo(const QLineF &l) const-
764{-
765 if (isNull() || l.isNull())
isNull()Description
TRUEnever evaluated
FALSEevaluated 52779 times by 14 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
l.isNull()Description
TRUEnever evaluated
FALSEevaluated 52779 times by 14 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
0-52779
766 return 0;
never executed: return 0;
0
767-
768 const qreal a1 = angle();-
769 const qreal a2 = l.angle();-
770-
771 const qreal delta = a2 - a1;-
772 const qreal delta_normalized = delta < 0 ? delta + 360 : delta;
delta < 0Description
TRUEevaluated 19556 times by 9 tests
Evaluated by:
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QPainter
  • tst_QPainterPath
FALSEevaluated 33223 times by 14 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
19556-33223
773-
774 if (qFuzzyCompare(delta, qreal(360)))
qFuzzyCompare(...a, qreal(360))Description
TRUEnever evaluated
FALSEevaluated 52779 times by 14 tests
Evaluated by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
0-52779
775 return 0;
never executed: return 0;
0
776 else-
777 return delta_normalized;
executed 52779 times by 14 tests: return delta_normalized;
Executed by:
  • tst_QCheckBox
  • tst_QGraphicsEffectSource
  • tst_QGraphicsItem
  • tst_QGraphicsProxyWidget
  • tst_QGraphicsScene
  • tst_QGraphicsSceneIndex
  • tst_QGraphicsView
  • tst_QGraphicsWidget
  • tst_QLine
  • tst_QMdiSubWindow
  • tst_QPainter
  • tst_QPainterPath
  • tst_QTreeView
  • tst_QTreeWidget
52779
778}-
779-
780/*!-
781 \fn qreal QLineF::angle(const QLineF &line) const-
782-
783 \obsolete-
784-
785 Returns the angle (in degrees) between this line and the given \a-
786 line, taking the direction of the lines into account. If the lines-
787 do not intersect within their range, it is the intersection point of-
788 the extended lines that serves as origin (see-
789 QLineF::UnboundedIntersection).-
790-
791 \table-
792 \row-
793 \li \inlineimage qlinef-angle-identicaldirection.png-
794 \li \inlineimage qlinef-angle-oppositedirection.png-
795 \endtable-
796-
797 When the lines are parallel, this function returns 0 if they have-
798 the same direction; otherwise it returns 180.-
799-
800 \sa intersect()-
801*/-
802qreal QLineF::angle(const QLineF &l) const-
803{-
804 if (isNull() || l.isNull())
isNull()Description
TRUEnever evaluated
FALSEevaluated 183 times by 1 test
Evaluated by:
  • tst_QLine
l.isNull()Description
TRUEnever evaluated
FALSEevaluated 183 times by 1 test
Evaluated by:
  • tst_QLine
0-183
805 return 0;
never executed: return 0;
0
806 qreal cos_line = (dx()*l.dx() + dy()*l.dy()) / (length()*l.length());-
807 qreal rad = 0;-
808 // only accept cos_line in the range [-1,1], if it is outside, use 0 (we return 0 rather than PI for those cases)-
809 if (cos_line >= -1.0 && cos_line <= 1.0) rad = qAcos( cos_line );
executed 182 times by 1 test: rad = qAcos( cos_line );
Executed by:
  • tst_QLine
cos_line >= -1.0Description
TRUEevaluated 183 times by 1 test
Evaluated by:
  • tst_QLine
FALSEnever evaluated
cos_line <= 1.0Description
TRUEevaluated 182 times by 1 test
Evaluated by:
  • tst_QLine
FALSEevaluated 1 time by 1 test
Evaluated by:
  • tst_QLine
0-183
810 return rad * 360 / M_2PI;
executed 183 times by 1 test: return rad * 360 / 6.28318530717958647692528676655900576;
Executed by:
  • tst_QLine
183
811}-
812-
813-
814#ifndef QT_NO_DEBUG_STREAM-
815QDebug operator<<(QDebug dbg, const QLineF &p)-
816{-
817 QDebugStateSaver saver(dbg);-
818 dbg.nospace() << "QLineF(" << p.p1() << ',' << p.p2() << ')';-
819 return dbg;
executed 2 times by 2 tests: return dbg;
Executed by:
  • tst_QDebug
  • tst_QVariant
2
820}-
821#endif-
822-
823#ifndef QT_NO_DATASTREAM-
824/*!-
825 \relates QLineF-
826-
827 Writes the given \a line to the given \a stream and returns a-
828 reference to the stream.-
829-
830 \sa {Serializing Qt Data Types}-
831*/-
832-
833QDataStream &operator<<(QDataStream &stream, const QLineF &line)-
834{-
835 stream << line.p1() << line.p2();-
836 return stream;
executed 3 times by 2 tests: return stream;
Executed by:
  • tst_QMetaType
  • tst_QVariant
3
837}-
838-
839/*!-
840 \relates QLineF-
841-
842 Reads a line from the given \a stream into the given \a line and-
843 returns a reference to the stream.-
844-
845 \sa {Serializing Qt Data Types}-
846*/-
847-
848QDataStream &operator>>(QDataStream &stream, QLineF &line)-
849{-
850 QPointF start, end;-
851 stream >> start;-
852 stream >> end;-
853 line = QLineF(start, end);-
854-
855 return stream;
executed 7 times by 2 tests: return stream;
Executed by:
  • tst_QMetaType
  • tst_QVariant
7
856}-
857-
858#endif // QT_NO_DATASTREAM-
859-
860QT_END_NAMESPACE-
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9