summaryrefslogtreecommitdiff
path: root/src/positioning/qdoublevector3d_p.h
diff options
context:
space:
mode:
authorAlbin Olsson <albin.olsson@cybercom.com>2013-09-19 16:17:20 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-11 12:18:46 +0200
commit42541b2406f6b35e109ee6bee64283582dfd2adc (patch)
tree96c873be5b39ef46022b72d88c04233578f4457b /src/positioning/qdoublevector3d_p.h
parent7ec8919a055e35232b5127e312a525f61b0bc483 (diff)
downloadqtlocation-42541b2406f6b35e109ee6bee64283582dfd2adc.tar.gz
Make geo coordinates animatable in QML.
Interpolation logic in AnimatableCoordinate has been moved around so that QGeoCoordinates can be animated directly by QPropertyAnimation. A new QML type has been added, 'CoordinateAnimation', for animating coordinates in QML. This type follows the pattern of 'ColorAnimation' and other specializations of 'PropertyAnimation'. QDoubleVector2D, QDoubleVector3D and QGeoProjection has been moved to QtPositioning Testcase for CoordinateAnimation has been added to declarative_ui. AnimatableCoordinate and QGeoCoordinateInterpolator are redundant and have been removed. Change-Id: I0809da566e1800274384f9c5337df65623d1e61a Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
Diffstat (limited to 'src/positioning/qdoublevector3d_p.h')
-rw-r--r--src/positioning/qdoublevector3d_p.h288
1 files changed, 288 insertions, 0 deletions
diff --git a/src/positioning/qdoublevector3d_p.h b/src/positioning/qdoublevector3d_p.h
new file mode 100644
index 00000000..c2033d34
--- /dev/null
+++ b/src/positioning/qdoublevector3d_p.h
@@ -0,0 +1,288 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtPositioning module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDOUBLEVECTOR3D_P_H
+#define QDOUBLEVECTOR3D_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifdef QT_BUILD_LOCATION_LIB
+#include <QVector3D>
+#endif
+
+#include "qpositioningglobal.h"
+#include <QtCore/qmetatype.h>
+
+QT_BEGIN_NAMESPACE
+
+class QDoubleVector2D;
+
+class Q_POSITIONING_EXPORT_PRIVATE QDoubleVector3D
+{
+public:
+ QDoubleVector3D();
+ QDoubleVector3D(double xpos, double ypos, double zpos);
+ QDoubleVector3D(const QDoubleVector2D &vector);
+ QDoubleVector3D(const QDoubleVector2D &vector, double zpos);
+
+#ifdef QT_BUILD_LOCATION_LIB
+ explicit QDoubleVector3D(const QVector3D &vector) : xp(vector.x()), yp(vector.y()), zp(vector.z()) {}
+ operator QVector3D() const { return QVector3D(xp, yp, zp); }
+#endif
+
+ bool isNull() const;
+
+ double x() const;
+ double y() const;
+ double z() const;
+
+ void setX(double x);
+ void setY(double y);
+ void setZ(double z);
+
+ double get(int i) const;
+ void set(int i, double value);
+
+ double length() const;
+ double lengthSquared() const;
+
+ QDoubleVector3D normalized() const;
+ void normalize();
+
+ QDoubleVector3D &operator+=(const QDoubleVector3D &vector);
+ QDoubleVector3D &operator-=(const QDoubleVector3D &vector);
+ QDoubleVector3D &operator*=(double factor);
+ QDoubleVector3D &operator*=(const QDoubleVector3D &vector);
+ QDoubleVector3D &operator/=(double divisor);
+
+ static double dotProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
+ static QDoubleVector3D crossProduct(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
+ static QDoubleVector3D normal(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
+ static QDoubleVector3D normal
+ (const QDoubleVector3D &v1, const QDoubleVector3D &v2, const QDoubleVector3D &v3);
+
+ double distanceToPlane(const QDoubleVector3D &plane, const QDoubleVector3D &normal) const;
+ double distanceToPlane(const QDoubleVector3D &plane1, const QDoubleVector3D &plane2, const QDoubleVector3D &plane3) const;
+ double distanceToLine(const QDoubleVector3D &point, const QDoubleVector3D &direction) const;
+
+ friend inline bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
+ friend inline bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
+ friend inline const QDoubleVector3D operator+(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
+ friend inline const QDoubleVector3D operator-(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
+ friend inline const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector);
+ friend inline const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor);
+ friend const QDoubleVector3D operator*(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
+ friend inline const QDoubleVector3D operator-(const QDoubleVector3D &vector);
+ friend inline const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor);
+
+ friend inline bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2);
+
+ QDoubleVector2D toVector2D() const;
+
+private:
+ double xp, yp, zp;
+
+ friend class QDoubleVector2D;
+};
+
+Q_DECLARE_TYPEINFO(QDoubleVector3D, Q_MOVABLE_TYPE);
+
+inline QDoubleVector3D::QDoubleVector3D() : xp(0.0), yp(0.0), zp(0.0) {}
+
+inline QDoubleVector3D::QDoubleVector3D(double xpos, double ypos, double zpos) : xp(xpos), yp(ypos), zp(zpos) {}
+
+inline bool QDoubleVector3D::isNull() const
+{
+ return qIsNull(xp) && qIsNull(yp) && qIsNull(zp);
+}
+
+inline double QDoubleVector3D::x() const { return xp; }
+inline double QDoubleVector3D::y() const { return yp; }
+inline double QDoubleVector3D::z() const { return zp; }
+
+inline void QDoubleVector3D::setX(double aX) { xp = aX; }
+inline void QDoubleVector3D::setY(double aY) { yp = aY; }
+inline void QDoubleVector3D::setZ(double aZ) { zp = aZ; }
+
+inline double QDoubleVector3D::get(int i) const
+{
+ switch (i) {
+ case 0:
+ return xp;
+ case 1:
+ return yp;
+ case 2:
+ return zp;
+ default:
+ return 0.0;
+ }
+}
+
+inline void QDoubleVector3D::set(int i, double value)
+{
+ switch (i) {
+ case 0:
+ xp = value;
+ break;
+ case 1:
+ yp = value;
+ break;
+ case 2:
+ zp = value;
+ break;
+ default:
+ break;
+ }
+}
+
+inline QDoubleVector3D &QDoubleVector3D::operator+=(const QDoubleVector3D &vector)
+{
+ xp += vector.xp;
+ yp += vector.yp;
+ zp += vector.zp;
+ return *this;
+}
+
+inline QDoubleVector3D &QDoubleVector3D::operator-=(const QDoubleVector3D &vector)
+{
+ xp -= vector.xp;
+ yp -= vector.yp;
+ zp -= vector.zp;
+ return *this;
+}
+
+inline QDoubleVector3D &QDoubleVector3D::operator*=(double factor)
+{
+ xp *= factor;
+ yp *= factor;
+ zp *= factor;
+ return *this;
+}
+
+inline QDoubleVector3D &QDoubleVector3D::operator*=(const QDoubleVector3D &vector)
+{
+ xp *= vector.xp;
+ yp *= vector.yp;
+ zp *= vector.zp;
+ return *this;
+}
+
+inline QDoubleVector3D &QDoubleVector3D::operator/=(double divisor)
+{
+ xp /= divisor;
+ yp /= divisor;
+ zp /= divisor;
+ return *this;
+}
+
+inline bool operator==(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
+{
+ return v1.xp == v2.xp && v1.yp == v2.yp && v1.zp == v2.zp;
+}
+
+inline bool operator!=(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
+{
+ return v1.xp != v2.xp || v1.yp != v2.yp || v1.zp != v2.zp;
+}
+
+inline const QDoubleVector3D operator+(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
+{
+ return QDoubleVector3D(v1.xp + v2.xp, v1.yp + v2.yp, v1.zp + v2.zp);
+}
+
+inline const QDoubleVector3D operator-(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
+{
+ return QDoubleVector3D(v1.xp - v2.xp, v1.yp - v2.yp, v1.zp - v2.zp);
+}
+
+inline const QDoubleVector3D operator*(double factor, const QDoubleVector3D &vector)
+{
+ return QDoubleVector3D(vector.xp * factor, vector.yp * factor, vector.zp * factor);
+}
+
+inline const QDoubleVector3D operator*(const QDoubleVector3D &vector, double factor)
+{
+ return QDoubleVector3D(vector.xp * factor, vector.yp * factor, vector.zp * factor);
+}
+
+inline const QDoubleVector3D operator*(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
+{
+ return QDoubleVector3D(v1.xp * v2.xp, v1.yp * v2.yp, v1.zp * v2.zp);
+}
+
+inline const QDoubleVector3D operator-(const QDoubleVector3D &vector)
+{
+ return QDoubleVector3D(-vector.xp, -vector.yp, -vector.zp);
+}
+
+inline const QDoubleVector3D operator/(const QDoubleVector3D &vector, double divisor)
+{
+ return QDoubleVector3D(vector.xp / divisor, vector.yp / divisor, vector.zp / divisor);
+}
+
+inline bool qFuzzyCompare(const QDoubleVector3D &v1, const QDoubleVector3D &v2)
+{
+ return qFuzzyCompare(v1.xp, v2.xp) &&
+ qFuzzyCompare(v1.yp, v2.yp) &&
+ qFuzzyCompare(v1.zp, v2.zp);
+}
+
+#ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug dbg, const QDoubleVector3D &vector);
+#endif
+
+#ifndef QT_NO_DATASTREAM
+QDataStream &operator<<(QDataStream &, const QDoubleVector3D &);
+QDataStream &operator>>(QDataStream &, QDoubleVector3D &);
+#endif
+
+QT_END_NAMESPACE
+
+#endif