Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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
23#include "qdoublevector2d_p.h"
24#include <QtCore/qmetatype.h>
25
27
28class Q_POSITIONING_EXPORT QDoubleVector3D
29{
30public:
32 Q_DECL_CONSTEXPR inline QDoubleVector3D(double xpos, double ypos, double zpos);
34 Q_DECL_CONSTEXPR inline QDoubleVector3D(const QDoubleVector2D &vector, double zpos);
35
36 inline bool isNull() const;
37
38 Q_DECL_CONSTEXPR inline double x() const;
39 Q_DECL_CONSTEXPR inline double y() const;
40 Q_DECL_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 Q_DECL_CONSTEXPR inline double lengthSquared() const;
51
53 void normalize();
54
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 Q_DECL_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
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 Q_DECL_CONSTEXPR inline bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
78 friend Q_DECL_CONSTEXPR inline bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
81 friend Q_DECL_CONSTEXPR inline const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector);
82 friend Q_DECL_CONSTEXPR inline const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor);
85 friend Q_DECL_CONSTEXPR inline const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor);
86
87 friend Q_DECL_CONSTEXPR inline bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
88
90
91private:
92 double xp, yp, zp;
93
94 friend class QDoubleVector2D;
95};
96
98
99Q_DECL_CONSTEXPR inline QDoubleVector3D::QDoubleVector3D() : xp(0.0), yp(0.0), zp(0.0) {}
100
101Q_DECL_CONSTEXPR inline QDoubleVector3D::QDoubleVector3D(double xpos, double ypos, double zpos) : xp(xpos), yp(ypos), zp(zpos) {}
102
104 : xp(v.xp), yp(v.yp), zp(0.0) {}
105
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
114Q_DECL_CONSTEXPR inline double QDoubleVector3D::x() const { return xp; }
115Q_DECL_CONSTEXPR inline double QDoubleVector3D::y() const { return yp; }
116Q_DECL_CONSTEXPR inline double QDoubleVector3D::z() const { return zp; }
117
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
158{
159 xp += vector.xp;
160 yp += vector.yp;
161 zp += vector.zp;
162 return *this;
163}
164
166{
167 xp -= vector.xp;
168 yp -= vector.yp;
169 zp -= vector.zp;
170 return *this;
171}
172
174{
175 xp *= factor;
176 yp *= factor;
177 zp *= factor;
178 return *this;
179}
180
182{
183 xp *= vector.xp;
184 yp *= vector.yp;
185 zp *= vector.zp;
186 return *this;
187}
188
190{
191 xp /= divisor;
192 yp /= divisor;
193 zp /= divisor;
194 return *this;
195}
196
198{
199 return v1.xp == v2.xp && v1.yp == v2.yp && v1.zp == v2.zp;
200}
201
203{
204 return v1.xp != v2.xp || v1.yp != v2.yp || v1.zp != v2.zp;
205}
206
208{
209 return QDoubleVector3D(v1.xp + v2.xp, v1.yp + v2.yp, v1.zp + v2.zp);
210}
211
213{
214 return QDoubleVector3D(v1.xp - v2.xp, v1.yp - v2.yp, v1.zp - v2.zp);
215}
216
218{
219 return QDoubleVector3D(vector.xp * factor, vector.yp * factor, vector.zp * factor);
220}
221
223{
224 return QDoubleVector3D(vector.xp * factor, vector.yp * factor, vector.zp * factor);
225}
226
228{
229 return QDoubleVector3D(v1.xp * v2.xp, v1.yp * v2.yp, v1.zp * v2.zp);
230}
231
233{
234 return QDoubleVector3D(-vector.xp, -vector.yp, -vector.zp);
235}
236
241
243{
244 return qFuzzyCompare(v1.xp, v2.xp) &&
245 qFuzzyCompare(v1.yp, v2.yp) &&
246 qFuzzyCompare(v1.zp, v2.zp);
247}
248
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
265
266#endif
\inmodule QtCore\reentrant
Definition qdatastream.h:46
\inmodule QtCore
friend class QDoubleVector3D
static Q_DECL_CONSTEXPR double dotProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
Q_DECL_CONSTEXPR double x() const
double distanceToPlane(const QDoubleVector3D &plane, const QDoubleVector3D &normal) const
QDoubleVector3D & operator*=(double factor)
Q_DECL_CONSTEXPR QDoubleVector3D()
QDoubleVector3D & operator-=(const QDoubleVector3D &vector)
Q_DECL_CONSTEXPR double y() const
void setZ(double z)
QDoubleVector3D & operator/=(double divisor)
Q_DECL_CONSTEXPR QDoubleVector2D toVector2D() const
Q_DECL_CONSTEXPR double z() const
Q_DECL_CONSTEXPR double lengthSquared() const
friend class QDoubleVector2D
void setX(double x)
void set(int i, double value)
static Q_DECL_CONSTEXPR QDoubleVector3D crossProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
void setY(double y)
QDoubleVector3D & operator+=(const QDoubleVector3D &vector)
double get(int i) const
direction
Combined button and popup list for selecting options.
static QDoubleVector2D toVector2D(const IntPoint &p)
#define Q_DECL_CONSTEXPR
constexpr bool operator!=(const timespec &t1, const timespec &t2)
constexpr timespec operator+(const timespec &t1, const timespec &t2)
constexpr timespec operator*(const timespec &t1, int mul)
constexpr timespec & operator+=(timespec &t1, const timespec &t2)
constexpr timespec operator-(const timespec &t1, const timespec &t2)
static QDBusError::ErrorType get(const char *name)
Q_DECL_CONSTEXPR const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor)
Q_DECL_CONSTEXPR const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector)
Q_DECL_CONSTEXPR const QDoubleVector3D operator+(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
Q_DECL_CONSTEXPR bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
Q_POSITIONING_EXPORT QDataStream & operator>>(QDataStream &, QDoubleVector3D &)
Q_DECL_CONSTEXPR bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
Q_POSITIONING_EXPORT QDebug operator<<(QDebug dbg, const QDoubleVector3D &vector)
Q_DECL_CONSTEXPR const QDoubleVector3D operator-(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
Q_DECL_CONSTEXPR bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
Definition qfloat16.h:333
bool qIsNull(qfloat16 f) noexcept
Definition qfloat16.h:354
constexpr QMargins operator/(const QMargins &margins, int divisor)
Definition qmargins.h:185
GLint GLfloat GLfloat GLfloat v2
GLsizei const GLfloat * v
[13]
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat z
GLint GLint GLint GLint GLint x
[0]
GLuint divisor
GLenum GLuint GLenum GLsizei length
GLint GLfloat GLfloat v1
GLint GLfloat GLfloat GLfloat GLfloat v3
GLint y
GLint GLenum GLboolean normalized
Definition qopenglext.h:752
static void normalize(double &x, double &y)
bool operator==(const QRandomGenerator &rng1, const QRandomGenerator &rng2)
Definition qrandom.cpp:1220
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:158
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:180
QFuture< QSet< QChar > > set
[10]
QList< int > vector
[14]
p setX(p.x()+1)