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// Qt-Security score:significant reason:default
4
5#ifndef QDOUBLEVECTOR3D_P_H
6#define QDOUBLEVECTOR3D_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#ifdef QT_BUILD_LOCATION_LIB
20#include <QVector3D>
21#endif
22
25#include <QtCore/qmetatype.h>
26
28
29class Q_POSITIONING_EXPORT QDoubleVector3D
30{
31public:
32 constexpr inline QDoubleVector3D();
33 constexpr inline QDoubleVector3D(double xpos, double ypos, double zpos);
34 constexpr inline QDoubleVector3D(const QDoubleVector2D &vector);
35 constexpr inline QDoubleVector3D(const QDoubleVector2D &vector, double zpos);
36
37 inline bool isNull() const;
38
39 constexpr inline double x() const;
40 constexpr inline double y() const;
41 constexpr inline double z() const;
42
43 inline void setX(double x);
44 inline void setY(double y);
45 inline void setZ(double z);
46
47 inline double get(int i) const;
48 inline void set(int i, double value);
49
50 double length() const;
51 constexpr inline double lengthSquared() const;
52
53 QDoubleVector3D normalized() const;
54 void normalize();
55
56 inline QDoubleVector3D &operator+=(const QDoubleVector3D &vector);
57 inline QDoubleVector3D &operator-=(const QDoubleVector3D &vector);
58 inline QDoubleVector3D &operator*=(double factor);
59 inline QDoubleVector3D &operator*=(const QDoubleVector3D &vector);
60 inline QDoubleVector3D &operator/=(double divisor);
61
62 constexpr static inline double dotProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
63 { return v1.xp * v2.xp + v1.yp * v2.yp + v1.zp * v2.zp; }
64
65 constexpr static inline QDoubleVector3D crossProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
66 { return QDoubleVector3D(v1.yp * v2.zp - v1.zp * v2.yp,
67 v1.zp * v2.xp - v1.xp * v2.zp,
68 v1.xp * v2.yp - v1.yp * v2.xp); }
69
70 static QDoubleVector3D normal(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
71 static QDoubleVector3D normal
72 (const QDoubleVector3D &v1, const QDoubleVector3D &v2, const QDoubleVector3D &v3);
73
74 double distanceToPlane(const QDoubleVector3D &plane, const QDoubleVector3D &normal) const;
75 double distanceToPlane(const QDoubleVector3D &plane1, const QDoubleVector3D &plane2, const QDoubleVector3D &plane3) const;
76 double distanceToLine(const QDoubleVector3D &point, const QDoubleVector3D &direction) const;
77
78 friend constexpr inline bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
79 friend constexpr inline bool 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-(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
82 friend constexpr inline const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector);
83 friend constexpr inline const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor);
84 friend constexpr inline const QDoubleVector3D operator*(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
85 friend constexpr inline const QDoubleVector3D operator-(const QDoubleVector3D &vector);
86 friend constexpr inline const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor);
87
88 friend constexpr inline bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
89
90 constexpr inline QDoubleVector2D toVector2D() const;
91
92private:
93 double xp, yp, zp;
94
95 friend class QDoubleVector2D;
96};
97
99
100constexpr inline QDoubleVector3D::QDoubleVector3D() : xp(0.0), yp(0.0), zp(0.0) {}
101
102constexpr inline QDoubleVector3D::QDoubleVector3D(double xpos, double ypos, double zpos) : xp(xpos), yp(ypos), zp(zpos) {}
103
104constexpr inline QDoubleVector3D::QDoubleVector3D(const QDoubleVector2D &v)
105 : xp(v.xp), yp(v.yp), zp(0.0) {}
106
107constexpr inline QDoubleVector3D::QDoubleVector3D(const QDoubleVector2D &v, double zpos)
108 : xp(v.xp), yp(v.yp), zp(zpos) {}
109
110inline bool QDoubleVector3D::isNull() const
111{
112 return qIsNull(xp) && qIsNull(yp) && qIsNull(zp);
113}
114
115constexpr inline double QDoubleVector3D::x() const { return xp; }
116constexpr inline double QDoubleVector3D::y() const { return yp; }
117constexpr inline double QDoubleVector3D::z() const { return zp; }
118
119constexpr inline double QDoubleVector3D::lengthSquared() const
120{ return xp * xp + yp * yp + zp * zp; }
121
122
123inline void QDoubleVector3D::setX(double aX) { xp = aX; }
124inline void QDoubleVector3D::setY(double aY) { yp = aY; }
125inline void QDoubleVector3D::setZ(double aZ) { zp = aZ; }
126
127inline double QDoubleVector3D::get(int i) const
128{
129 switch (i) {
130 case 0:
131 return xp;
132 case 1:
133 return yp;
134 case 2:
135 return zp;
136 default:
137 return 0.0;
138 }
139}
140
141inline void QDoubleVector3D::set(int i, double value)
142{
143 switch (i) {
144 case 0:
145 xp = value;
146 break;
147 case 1:
148 yp = value;
149 break;
150 case 2:
151 zp = value;
152 break;
153 default:
154 break;
155 }
156}
157
158inline QDoubleVector3D &QDoubleVector3D::operator+=(const QDoubleVector3D &vector)
159{
160 xp += vector.xp;
161 yp += vector.yp;
162 zp += vector.zp;
163 return *this;
164}
165
166inline QDoubleVector3D &QDoubleVector3D::operator-=(const QDoubleVector3D &vector)
167{
168 xp -= vector.xp;
169 yp -= vector.yp;
170 zp -= vector.zp;
171 return *this;
172}
173
174inline QDoubleVector3D &QDoubleVector3D::operator*=(double factor)
175{
176 xp *= factor;
177 yp *= factor;
178 zp *= factor;
179 return *this;
180}
181
182inline QDoubleVector3D &QDoubleVector3D::operator*=(const QDoubleVector3D &vector)
183{
184 xp *= vector.xp;
185 yp *= vector.yp;
186 zp *= vector.zp;
187 return *this;
188}
189
190inline QDoubleVector3D &QDoubleVector3D::operator/=(double divisor)
191{
192 xp /= divisor;
193 yp /= divisor;
194 zp /= divisor;
195 return *this;
196}
197
198constexpr inline bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
199{
200 return v1.xp == v2.xp && v1.yp == v2.yp && v1.zp == v2.zp;
201}
202
203constexpr inline bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
204{
205 return v1.xp != v2.xp || v1.yp != v2.yp || v1.zp != v2.zp;
206}
207
208constexpr inline const QDoubleVector3D operator+(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
209{
210 return QDoubleVector3D(v1.xp + v2.xp, v1.yp + v2.yp, v1.zp + v2.zp);
211}
212
213constexpr inline const QDoubleVector3D operator-(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
214{
215 return QDoubleVector3D(v1.xp - v2.xp, v1.yp - v2.yp, v1.zp - v2.zp);
216}
217
218constexpr inline const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector)
219{
220 return QDoubleVector3D(vector.xp * factor, vector.yp * factor, vector.zp * factor);
221}
222
223constexpr inline const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor)
224{
225 return QDoubleVector3D(vector.xp * factor, vector.yp * factor, vector.zp * factor);
226}
227
228constexpr inline const QDoubleVector3D operator*(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
229{
230 return QDoubleVector3D(v1.xp * v2.xp, v1.yp * v2.yp, v1.zp * v2.zp);
231}
232
233constexpr inline const QDoubleVector3D operator-(const QDoubleVector3D &vector)
234{
235 return QDoubleVector3D(-vector.xp, -vector.yp, -vector.zp);
236}
237
238constexpr inline const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor)
239{
240 return QDoubleVector3D(vector.xp / divisor, vector.yp / divisor, vector.zp / divisor);
241}
242
243constexpr inline bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
244{
245 return QtPrivate::fuzzyCompare(v1.xp, v2.xp)
246 && QtPrivate::fuzzyCompare(v1.yp, v2.yp)
247 && QtPrivate::fuzzyCompare(v1.zp, v2.zp);
248}
249
250constexpr inline QDoubleVector2D QDoubleVector3D::toVector2D() const
251{
252 return QDoubleVector2D(xp, yp);
253}
254
255
256#ifndef QT_NO_DEBUG_STREAM
257Q_POSITIONING_EXPORT QDebug operator<<(QDebug dbg, const QDoubleVector3D &vector);
258#endif
259
260#ifndef QT_NO_DATASTREAM
261Q_POSITIONING_EXPORT QDataStream &operator<<(QDataStream &, const QDoubleVector3D &);
262Q_POSITIONING_EXPORT QDataStream &operator>>(QDataStream &, QDoubleVector3D &);
263#endif
264
265QT_END_NAMESPACE
266
267#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:802
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:813
\inmodule QtCore\reentrant
Definition qdatastream.h:50
Combined button and popup list for selecting options.
QVariant operator*(const QVariant &arg1, double multiplier)
QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
Definition qbytearray.h:705
Q_DECLARE_TYPEINFO(QByteArrayView, Q_PRIMITIVE_TYPE)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2582
QDoubleMatrix4x4 operator/(const QDoubleMatrix4x4 &matrix, double divisor)
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:612
QMatrix4x4 operator-(const QMatrix4x4 &matrix)
Definition qmatrix4x4.h:860
QMatrix4x4 operator-(const QMatrix4x4 &m1, const QMatrix4x4 &m2)
Definition qmatrix4x4.h:589
QDataStream & operator<<(QDataStream &stream, const QImage &image)
[0]
Definition qimage.cpp:4010
QDataStream & operator>>(QDataStream &stream, QImage &image)
Definition qimage.cpp:4036