Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qdoublevector2d_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QDOUBLEVECTOR2D_P_H
5#define QDOUBLEVECTOR2D_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#ifdef QT_BUILD_LOCATION_LIB
19#include <QVector2D>
20#endif
21
23#include <QtCore/qmetatype.h>
24#include <QPointF>
25
26QT_BEGIN_NAMESPACE
27
28class QDoubleVector3D;
29
30class Q_POSITIONING_EXPORT QDoubleVector2D
31{
32public:
33 Q_DECL_CONSTEXPR inline QDoubleVector2D();
34 Q_DECL_CONSTEXPR inline QDoubleVector2D(double xpos, double ypos);
35 Q_DECL_CONSTEXPR explicit inline QDoubleVector2D(const QPointF &p);
36 explicit QDoubleVector2D(const QDoubleVector3D &vector);
37
38 Q_DECL_CONSTEXPR inline double manhattanLength() const;
39 inline bool isNull() const;
40 inline bool isFinite() const;
41
42 Q_DECL_CONSTEXPR inline double x() const;
43 Q_DECL_CONSTEXPR inline double y() const;
44
45 inline void setX(double x);
46 inline void setY(double y);
47
48 double length() const;
49 Q_DECL_CONSTEXPR inline double lengthSquared() const;
50
51 QDoubleVector2D normalized() const;
52 void normalize();
53
54 inline QDoubleVector2D &operator+=(const QDoubleVector2D &vector);
55 inline QDoubleVector2D &operator-=(const QDoubleVector2D &vector);
56 inline QDoubleVector2D &operator*=(double factor);
57 inline QDoubleVector2D &operator*=(const QDoubleVector2D &vector);
58 inline QDoubleVector2D &operator/=(double divisor);
59 inline QDoubleVector2D &operator/=(const QDoubleVector2D &vector);
60
61 Q_DECL_CONSTEXPR static inline double dotProduct(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
62 { return v1.xp * v2.xp + v1.yp * v2.yp; }
63
64
65 friend Q_DECL_CONSTEXPR inline bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
66 friend Q_DECL_CONSTEXPR inline bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
67 friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator+(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
68 friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
69 friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector);
70 friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &vector, double factor);
71 friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
72 friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &vector);
73 friend Q_DECL_CONSTEXPR inline const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor);
74
75 friend Q_DECL_CONSTEXPR inline bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2);
76
77 QDoubleVector3D toVector3D() const;
78 Q_DECL_CONSTEXPR inline QPointF toPointF() const;
79
80private:
81 double xp, yp;
82
83 friend class QDoubleVector3D;
84};
85
86Q_DECLARE_TYPEINFO(QDoubleVector2D, Q_RELOCATABLE_TYPE);
87
88Q_DECL_CONSTEXPR inline QDoubleVector2D::QDoubleVector2D() : xp(0.0), yp(0.0) {}
89
90Q_DECL_CONSTEXPR inline QDoubleVector2D::QDoubleVector2D(double xpos, double ypos) : xp(xpos), yp(ypos) {}
91
92Q_DECL_CONSTEXPR inline QDoubleVector2D::QDoubleVector2D(const QPointF &p) : xp(p.x()), yp(p.y()) { }
93
94Q_DECL_CONSTEXPR inline double QDoubleVector2D::manhattanLength() const
95{
96 return qAbs(x())+qAbs(y());
97}
98
99inline bool QDoubleVector2D::isNull() const
100{
101 return qIsNull(xp) && qIsNull(yp);
102}
103
104inline bool QDoubleVector2D::isFinite() const
105{
106 return qIsFinite(xp) && qIsFinite(yp);
107}
108
109Q_DECL_CONSTEXPR inline double QDoubleVector2D::x() const { return xp; }
110Q_DECL_CONSTEXPR inline double QDoubleVector2D::y() const { return yp; }
111
112inline void QDoubleVector2D::setX(double aX) { xp = aX; }
113inline void QDoubleVector2D::setY(double aY) { yp = aY; }
114
115Q_DECL_CONSTEXPR inline double QDoubleVector2D::lengthSquared() const
116{ return xp * xp + yp * yp; }
117
118inline QDoubleVector2D &QDoubleVector2D::operator+=(const QDoubleVector2D &vector)
119{
120 xp += vector.xp;
121 yp += vector.yp;
122 return *this;
123}
124
125inline QDoubleVector2D &QDoubleVector2D::operator-=(const QDoubleVector2D &vector)
126{
127 xp -= vector.xp;
128 yp -= vector.yp;
129 return *this;
130}
131
132inline QDoubleVector2D &QDoubleVector2D::operator*=(double factor)
133{
134 xp *= factor;
135 yp *= factor;
136 return *this;
137}
138
139inline QDoubleVector2D &QDoubleVector2D::operator*=(const QDoubleVector2D &vector)
140{
141 xp *= vector.xp;
142 yp *= vector.yp;
143 return *this;
144}
145
146inline QDoubleVector2D &QDoubleVector2D::operator/=(double divisor)
147{
148 xp /= divisor;
149 yp /= divisor;
150 return *this;
151}
152
153inline QDoubleVector2D &QDoubleVector2D::operator/=(const QDoubleVector2D &vector)
154{
155 xp /= vector.xp;
156 yp /= vector.yp;
157 return *this;
158}
159
160Q_DECL_CONSTEXPR inline bool operator==(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
161{
162 return v1.xp == v2.xp && v1.yp == v2.yp;
163}
164
165Q_DECL_CONSTEXPR inline bool operator!=(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
166{
167 return v1.xp != v2.xp || v1.yp != v2.yp;
168}
169
170Q_DECL_CONSTEXPR inline const QDoubleVector2D operator+(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
171{
172 return QDoubleVector2D(v1.xp + v2.xp, v1.yp + v2.yp);
173}
174
175Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
176{
177 return QDoubleVector2D(v1.xp - v2.xp, v1.yp - v2.yp);
178}
179
180Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(double factor, const QDoubleVector2D &vector)
181{
182 return QDoubleVector2D(vector.xp * factor, vector.yp * factor);
183}
184
185Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &vector, double factor)
186{
187 return QDoubleVector2D(vector.xp * factor, vector.yp * factor);
188}
189
190Q_DECL_CONSTEXPR inline const QDoubleVector2D operator*(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
191{
192 return QDoubleVector2D(v1.xp * v2.xp, v1.yp * v2.yp);
193}
194
195Q_DECL_CONSTEXPR inline const QDoubleVector2D operator-(const QDoubleVector2D &vector)
196{
197 return QDoubleVector2D(-vector.xp, -vector.yp);
198}
199
200Q_DECL_CONSTEXPR inline const QDoubleVector2D operator/(const QDoubleVector2D &vector, double divisor)
201{
202 return QDoubleVector2D(vector.xp / divisor, vector.yp / divisor);
203}
204
205Q_DECL_CONSTEXPR inline bool qFuzzyCompare(const QDoubleVector2D &v1, const QDoubleVector2D &v2)
206{
207 return qFuzzyCompare(v1.xp, v2.xp) && qFuzzyCompare(v1.yp, v2.yp);
208}
209
210Q_DECL_CONSTEXPR inline QPointF QDoubleVector2D::toPointF() const
211{
212 return QPointF(qreal(xp), qreal(yp));
213}
214
215#ifndef QT_NO_DEBUG_STREAM
216Q_POSITIONING_EXPORT QDebug operator<<(QDebug dbg, const QDoubleVector2D &vector);
217#endif
218
219#ifndef QT_NO_DATASTREAM
220Q_POSITIONING_EXPORT QDataStream &operator<<(QDataStream &, const QDoubleVector2D &);
221Q_POSITIONING_EXPORT QDataStream &operator>>(QDataStream &, QDoubleVector2D &);
222#endif
223
224QT_END_NAMESPACE
225
226#endif
friend bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are equal, otherwise returns false.
Definition qbytearray.h:807
friend bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are different, otherwise returns false.
Definition qbytearray.h:818
\inmodule QtCore\reentrant
Definition qdatastream.h:49
Combined button and popup list for selecting options.
Q_DECLARE_TYPEINFO(QByteArrayView, Q_PRIMITIVE_TYPE)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2462
QDebug operator<<(QDebug dbg, const QFileInfo &fi)
constexpr bool qFuzzyCompare(const QQuaternion &q1, const QQuaternion &q2) noexcept
QDataStream & operator<<(QDataStream &out, const MyClass &myObj)
[4]
QDataStream & operator>>(QDataStream &in, MyClass &myObj)