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
qdoublevector3d_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 QDOUBLEVECTOR3D_P_H
5#define QDOUBLEVECTOR3D_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 <QVector3D>
20#endif
21
24#include <QtCore/qmetatype.h>
25
27
28class Q_POSITIONING_EXPORT QDoubleVector3D
29{
30public:
31 constexpr inline QDoubleVector3D();
32 constexpr inline QDoubleVector3D(double xpos, double ypos, double zpos);
33 constexpr inline QDoubleVector3D(const QDoubleVector2D &vector);
34 constexpr inline QDoubleVector3D(const QDoubleVector2D &vector, double zpos);
35
36 inline bool isNull() const;
37
38 constexpr inline double x() const;
39 constexpr inline double y() const;
40 constexpr inline double z() const;
41
42 inline void setX(double x);
43 inline void setY(double y);
44 inline void setZ(double z);
45
46 inline double get(int i) const;
47 inline void set(int i, double value);
48
49 double length() const;
50 constexpr inline double lengthSquared() const;
51
52 QDoubleVector3D normalized() const;
53 void normalize();
54
55 inline QDoubleVector3D &operator+=(const QDoubleVector3D &vector);
56 inline QDoubleVector3D &operator-=(const QDoubleVector3D &vector);
57 inline QDoubleVector3D &operator*=(double factor);
58 inline QDoubleVector3D &operator*=(const QDoubleVector3D &vector);
59 inline QDoubleVector3D &operator/=(double divisor);
60
61 constexpr static inline double dotProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
62 { return v1.xp * v2.xp + v1.yp * v2.yp + v1.zp * v2.zp; }
63
64 constexpr static inline QDoubleVector3D crossProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
65 { return QDoubleVector3D(v1.yp * v2.zp - v1.zp * v2.yp,
66 v1.zp * v2.xp - v1.xp * v2.zp,
67 v1.xp * v2.yp - v1.yp * v2.xp); }
68
69 static QDoubleVector3D normal(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
70 static QDoubleVector3D normal
71 (const QDoubleVector3D &v1, const QDoubleVector3D &v2, const QDoubleVector3D &v3);
72
73 double distanceToPlane(const QDoubleVector3D &plane, const QDoubleVector3D &normal) const;
74 double distanceToPlane(const QDoubleVector3D &plane1, const QDoubleVector3D &plane2, const QDoubleVector3D &plane3) const;
75 double distanceToLine(const QDoubleVector3D &point, const QDoubleVector3D &direction) const;
76
77 friend constexpr inline bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
78 friend constexpr inline bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
79 friend constexpr inline const QDoubleVector3D operator+(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
80 friend constexpr inline const QDoubleVector3D operator-(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
81 friend constexpr inline const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector);
82 friend constexpr inline const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor);
83 friend constexpr inline const QDoubleVector3D operator*(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
84 friend constexpr inline const QDoubleVector3D operator-(const QDoubleVector3D &vector);
85 friend constexpr inline const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor);
86
87 friend constexpr inline bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
88
89 constexpr inline QDoubleVector2D toVector2D() const;
90
91private:
92 double xp, yp, zp;
93
94 friend class QDoubleVector2D;
95};
96
98
99constexpr inline QDoubleVector3D::QDoubleVector3D() : xp(0.0), yp(0.0), zp(0.0) {}
100
101constexpr inline QDoubleVector3D::QDoubleVector3D(double xpos, double ypos, double zpos) : xp(xpos), yp(ypos), zp(zpos) {}
102
103constexpr inline QDoubleVector3D::QDoubleVector3D(const QDoubleVector2D &v)
104 : xp(v.xp), yp(v.yp), zp(0.0) {}
105
106constexpr inline QDoubleVector3D::QDoubleVector3D(const QDoubleVector2D &v, double zpos)
107 : xp(v.xp), yp(v.yp), zp(zpos) {}
108
109inline bool QDoubleVector3D::isNull() const
110{
111 return qIsNull(xp) && qIsNull(yp) && qIsNull(zp);
112}
113
114constexpr inline double QDoubleVector3D::x() const { return xp; }
115constexpr inline double QDoubleVector3D::y() const { return yp; }
116constexpr inline double QDoubleVector3D::z() const { return zp; }
117
118constexpr inline double QDoubleVector3D::lengthSquared() const
119{ return xp * xp + yp * yp + zp * zp; }
120
121
122inline void QDoubleVector3D::setX(double aX) { xp = aX; }
123inline void QDoubleVector3D::setY(double aY) { yp = aY; }
124inline void QDoubleVector3D::setZ(double aZ) { zp = aZ; }
125
126inline double QDoubleVector3D::get(int i) const
127{
128 switch (i) {
129 case 0:
130 return xp;
131 case 1:
132 return yp;
133 case 2:
134 return zp;
135 default:
136 return 0.0;
137 }
138}
139
140inline void QDoubleVector3D::set(int i, double value)
141{
142 switch (i) {
143 case 0:
144 xp = value;
145 break;
146 case 1:
147 yp = value;
148 break;
149 case 2:
150 zp = value;
151 break;
152 default:
153 break;
154 }
155}
156
157inline QDoubleVector3D &QDoubleVector3D::operator+=(const QDoubleVector3D &vector)
158{
159 xp += vector.xp;
160 yp += vector.yp;
161 zp += vector.zp;
162 return *this;
163}
164
165inline QDoubleVector3D &QDoubleVector3D::operator-=(const QDoubleVector3D &vector)
166{
167 xp -= vector.xp;
168 yp -= vector.yp;
169 zp -= vector.zp;
170 return *this;
171}
172
173inline QDoubleVector3D &QDoubleVector3D::operator*=(double factor)
174{
175 xp *= factor;
176 yp *= factor;
177 zp *= factor;
178 return *this;
179}
180
181inline QDoubleVector3D &QDoubleVector3D::operator*=(const QDoubleVector3D &vector)
182{
183 xp *= vector.xp;
184 yp *= vector.yp;
185 zp *= vector.zp;
186 return *this;
187}
188
189inline QDoubleVector3D &QDoubleVector3D::operator/=(double divisor)
190{
191 xp /= divisor;
192 yp /= divisor;
193 zp /= divisor;
194 return *this;
195}
196
197constexpr inline bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
198{
199 return v1.xp == v2.xp && v1.yp == v2.yp && v1.zp == v2.zp;
200}
201
202constexpr inline bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
203{
204 return v1.xp != v2.xp || v1.yp != v2.yp || v1.zp != v2.zp;
205}
206
207constexpr inline const QDoubleVector3D operator+(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
208{
209 return QDoubleVector3D(v1.xp + v2.xp, v1.yp + v2.yp, v1.zp + v2.zp);
210}
211
212constexpr inline const QDoubleVector3D operator-(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
213{
214 return QDoubleVector3D(v1.xp - v2.xp, v1.yp - v2.yp, v1.zp - v2.zp);
215}
216
217constexpr inline const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector)
218{
219 return QDoubleVector3D(vector.xp * factor, vector.yp * factor, vector.zp * factor);
220}
221
222constexpr inline const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor)
223{
224 return QDoubleVector3D(vector.xp * factor, vector.yp * factor, vector.zp * factor);
225}
226
227constexpr inline const QDoubleVector3D operator*(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
228{
229 return QDoubleVector3D(v1.xp * v2.xp, v1.yp * v2.yp, v1.zp * v2.zp);
230}
231
232constexpr inline const QDoubleVector3D operator-(const QDoubleVector3D &vector)
233{
234 return QDoubleVector3D(-vector.xp, -vector.yp, -vector.zp);
235}
236
237constexpr inline const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor)
238{
239 return QDoubleVector3D(vector.xp / divisor, vector.yp / divisor, vector.zp / divisor);
240}
241
242constexpr inline bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
243{
244 return qFuzzyCompare(v1.xp, v2.xp) &&
245 qFuzzyCompare(v1.yp, v2.yp) &&
246 qFuzzyCompare(v1.zp, v2.zp);
247}
248
249constexpr inline QDoubleVector2D QDoubleVector3D::toVector2D() const
250{
251 return QDoubleVector2D(xp, yp);
252}
253
254
255#ifndef QT_NO_DEBUG_STREAM
256Q_POSITIONING_EXPORT QDebug operator<<(QDebug dbg, const QDoubleVector3D &vector);
257#endif
258
259#ifndef QT_NO_DATASTREAM
260Q_POSITIONING_EXPORT QDataStream &operator<<(QDataStream &, const QDoubleVector3D &);
261Q_POSITIONING_EXPORT QDataStream &operator>>(QDataStream &, QDoubleVector3D &);
262#endif
263
264QT_END_NAMESPACE
265
266#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:801
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:812
\inmodule QtCore\reentrant
Definition qdatastream.h:50
QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
Definition qbytearray.h:699
Q_DECLARE_TYPEINFO(QByteArrayView, Q_PRIMITIVE_TYPE)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2568
QDoubleMatrix4x4 operator/(const QDoubleMatrix4x4 &matrix, double divisor)
QDoubleMatrix4x4 operator*(const QDoubleMatrix4x4 &matrix, double factor)
QDoubleMatrix4x4 operator*(double factor, const QDoubleMatrix4x4 &matrix)
Q_DECLARE_TYPEINFO(QDoubleVector3D, Q_RELOCATABLE_TYPE)
constexpr const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor)
constexpr bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
constexpr const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector)
constexpr const QDoubleVector3D operator-(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
constexpr const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor)
constexpr bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
constexpr const QDoubleVector3D operator-(const QDoubleVector3D &vector)
constexpr const QDoubleVector3D operator*(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
constexpr bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
constexpr const QDoubleVector3D operator+(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
QDebug operator<<(QDebug dbg, const QFileInfo &fi)
bool qFuzzyCompare(const QMatrix4x4 &m1, const QMatrix4x4 &m2) noexcept
QMatrix4x4 operator*(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
Definition qmatrix4x4.h:609
QMatrix4x4 operator-(const QMatrix4x4 &matrix)
Definition qmatrix4x4.h:844
QMatrix4x4 operator-(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
Definition qmatrix4x4.h:587
QDataStream & operator<<(QDataStream &stream, const QImage &image)
[0]
Definition qimage.cpp:4006
QDataStream & operator>>(QDataStream &stream, QImage &image)
Definition qimage.cpp:4032