1// qquaternion.sip generated by MetaSIP 2// 3// This file is part of the QtGui Python extension module. 4// 5// Copyright (c) 2021 Riverbank Computing Limited <info@riverbankcomputing.com> 6// 7// This file is part of PyQt5. 8// 9// This file may be used under the terms of the GNU General Public License 10// version 3.0 as published by the Free Software Foundation and appearing in 11// the file LICENSE included in the packaging of this file. Please review the 12// following information to ensure the GNU General Public License version 3.0 13// requirements will be met: http://www.gnu.org/copyleft/gpl.html. 14// 15// If you do not wish to use this file under the terms of the GPL version 3.0 16// then you may purchase a commercial license. For more information contact 17// info@riverbankcomputing.com. 18// 19// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 20// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 21 22 23%ModuleCode 24#include <qquaternion.h> 25%End 26 27class QQuaternion 28{ 29%TypeHeaderCode 30#include <qquaternion.h> 31%End 32 33%PickleCode 34 sipRes = Py_BuildValue((char *)"dddd", (double)sipCpp->scalar(), 35 (double)sipCpp->x(), (double)sipCpp->y(), (double)sipCpp->z()); 36%End 37 38public: 39 QQuaternion(); 40 QQuaternion(float aScalar, float xpos, float ypos, float zpos); 41 QQuaternion(float aScalar, const QVector3D &aVector); 42 explicit QQuaternion(const QVector4D &aVector); 43 SIP_PYOBJECT __repr__() const /TypeHint="str"/; 44%MethodCode 45 PyObject *scalar = PyFloat_FromDouble(sipCpp->scalar()); 46 PyObject *x = PyFloat_FromDouble(sipCpp->x()); 47 PyObject *y = PyFloat_FromDouble(sipCpp->y()); 48 PyObject *z = PyFloat_FromDouble(sipCpp->z()); 49 50 if (scalar && x && y && z) 51 { 52 #if PY_MAJOR_VERSION >= 3 53 sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QQuaternion(%R, %R, %R, %R)", 54 scalar, x, y, z); 55 #else 56 sipRes = PyString_FromString("PyQt5.QtGui.QQuaternion("); 57 PyString_ConcatAndDel(&sipRes, PyObject_Repr(scalar)); 58 PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); 59 PyString_ConcatAndDel(&sipRes, PyObject_Repr(x)); 60 PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); 61 PyString_ConcatAndDel(&sipRes, PyObject_Repr(y)); 62 PyString_ConcatAndDel(&sipRes, PyString_FromString(", ")); 63 PyString_ConcatAndDel(&sipRes, PyObject_Repr(z)); 64 PyString_ConcatAndDel(&sipRes, PyString_FromString(")")); 65 #endif 66 } 67 68 Py_XDECREF(scalar); 69 Py_XDECREF(x); 70 Py_XDECREF(y); 71 Py_XDECREF(z); 72%End 73 74 float length() const; 75 float lengthSquared() const; 76 QQuaternion normalized() const; 77 void normalize(); 78 QVector3D rotatedVector(const QVector3D &vector) const; 79 static QQuaternion fromAxisAndAngle(const QVector3D &axis, float angle); 80 static QQuaternion fromAxisAndAngle(float x, float y, float z, float angle); 81 static QQuaternion slerp(const QQuaternion &q1, const QQuaternion &q2, float t); 82 static QQuaternion nlerp(const QQuaternion &q1, const QQuaternion &q2, float t); 83 bool isNull() const; 84 bool isIdentity() const; 85 float x() const; 86 float y() const; 87 float z() const; 88 float scalar() const; 89 void setX(float aX); 90 void setY(float aY); 91 void setZ(float aZ); 92 void setScalar(float aScalar); 93 QQuaternion conjugate() const; 94 QQuaternion &operator+=(const QQuaternion &quaternion); 95 QQuaternion &operator-=(const QQuaternion &quaternion); 96 QQuaternion &operator*=(float factor); 97 QQuaternion &operator*=(const QQuaternion &quaternion); 98 QQuaternion &operator/=(float divisor); 99 void setVector(const QVector3D &aVector); 100 QVector3D vector() const; 101 void setVector(float aX, float aY, float aZ); 102 QVector4D toVector4D() const; 103%If (Qt_5_5_0 -) 104 void getAxisAndAngle(QVector3D *axis /Out/, float *angle) const; 105%End 106%If (Qt_5_5_0 -) 107 void getEulerAngles(float *pitch, float *yaw, float *roll) const; 108%End 109%If (Qt_5_5_0 -) 110 static QQuaternion fromEulerAngles(float pitch, float yaw, float roll); 111%End 112%If (Qt_5_5_0 -) 113 QMatrix3x3 toRotationMatrix() const; 114%End 115%If (Qt_5_5_0 -) 116 static QQuaternion fromRotationMatrix(const QMatrix3x3 &rot3x3); 117%End 118%If (Qt_5_5_0 -) 119 void getAxes(QVector3D *xAxis /Out/, QVector3D *yAxis /Out/, QVector3D *zAxis /Out/) const; 120%End 121%If (Qt_5_5_0 -) 122 static QQuaternion fromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis); 123%End 124%If (Qt_5_5_0 -) 125 static QQuaternion fromDirection(const QVector3D &direction, const QVector3D &up); 126%End 127%If (Qt_5_5_0 -) 128 static QQuaternion rotationTo(const QVector3D &from, const QVector3D &to); 129%End 130%If (Qt_5_5_0 -) 131 static float dotProduct(const QQuaternion &q1, const QQuaternion &q2); 132%End 133%If (Qt_5_5_0 -) 134 QQuaternion inverted() const; 135%End 136%If (Qt_5_5_0 -) 137 QQuaternion conjugated() const; 138%End 139%If (Qt_5_5_0 -) 140 QVector3D toEulerAngles() const; 141%End 142%If (Qt_5_5_0 -) 143 static QQuaternion fromEulerAngles(const QVector3D &eulerAngles); 144%End 145}; 146 147const QQuaternion operator*(const QQuaternion &q1, const QQuaternion &q2); 148bool operator==(const QQuaternion &q1, const QQuaternion &q2); 149bool operator!=(const QQuaternion &q1, const QQuaternion &q2); 150const QQuaternion operator+(const QQuaternion &q1, const QQuaternion &q2); 151const QQuaternion operator-(const QQuaternion &q1, const QQuaternion &q2); 152const QQuaternion operator*(float factor, const QQuaternion &quaternion); 153const QQuaternion operator*(const QQuaternion &quaternion, float factor); 154const QQuaternion operator-(const QQuaternion &quaternion); 155const QQuaternion operator/(const QQuaternion &quaternion, float divisor); 156bool qFuzzyCompare(const QQuaternion &q1, const QQuaternion &q2); 157QDataStream &operator<<(QDataStream &, const QQuaternion & /Constrained/) /ReleaseGIL/; 158QDataStream &operator>>(QDataStream &, QQuaternion & /Constrained/) /ReleaseGIL/; 159%If (Qt_5_5_0 -) 160QVector3D operator*(const QQuaternion &quaternion, const QVector3D &vec); 161%End 162