diff options
-rw-r--r-- | sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml | 25 | ||||
-rw-r--r-- | sources/pyside6/PySide6/glue/qtgui.cpp | 18 | ||||
-rw-r--r-- | sources/pyside6/tests/QtGui/qtransform_test.py | 8 |
3 files changed, 46 insertions, 5 deletions
diff --git a/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml b/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml index 7aaa6fe2c..98f1b0a37 100644 --- a/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml +++ b/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml @@ -2385,10 +2385,27 @@ </inject-code> </add-function> - <!-- Qt5.5: XXX support the output variables! For now, I just suppressed the new methods. --> - <modify-function signature="getAxisAndAngle(float*,float*,float*,float*)const"/> - <modify-function signature="getAxisAndAngle(QVector3D*,float*)const"/> - <modify-function signature="getEulerAngles(float*,float*,float*)const"/> + <!-- There can be only one return type. --> + <modify-function signature="getAxisAndAngle(float*,float*,float*,float*)const" remove="all"/> + <modify-function signature="getAxisAndAngle(QVector3D*,float*)const"> + <modify-argument index="return" pyi-type="Tuple[PySide6.QtGui.QVector3D, float]"> + <replace-type modified-type="(QVector3D, float)"/> + </modify-argument> + <modify-argument index="1"><remove-argument/></modify-argument> + <modify-argument index="2"><remove-argument/></modify-argument> + <inject-code class="target" position="beginning" + file="../glue/qtgui.cpp" snippet="qquaternion-getaxisandangle-vector3d-float"/> + </modify-function> + <modify-function signature="getEulerAngles(float*,float*,float*)const"> + <modify-argument index="return" pyi-type="Tuple[float, float, float]"> + <replace-type modified-type="(float, float, float)"/> + </modify-argument> + <modify-argument index="1"><remove-argument/></modify-argument> + <modify-argument index="2"><remove-argument/></modify-argument> + <modify-argument index="3"><remove-argument/></modify-argument> + <inject-code class="target" position="beginning" + file="../glue/qtgui.cpp" snippet="qquaternion-geteulerangles"/> + </modify-function> </value-type> <object-type name="QTouchEvent" since="4.6"> diff --git a/sources/pyside6/PySide6/glue/qtgui.cpp b/sources/pyside6/PySide6/glue/qtgui.cpp index e38684a7f..d7c74018a 100644 --- a/sources/pyside6/PySide6/glue/qtgui.cpp +++ b/sources/pyside6/PySide6/glue/qtgui.cpp @@ -854,6 +854,24 @@ else %PYARG_0 = %CONVERTTOPYTHON[int](cppResult); // @snippet qdrag-exec-arg2 +// @snippet qquaternion-getaxisandangle-vector3d-float +QVector3D outVec{}; +float angle{}; +%CPPSELF.%FUNCTION_NAME(&outVec, &angle); +%PYARG_0 = PyTuple_New(2); +PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[QVector3D](outVec)); +PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[float](angle)); +// @snippet qquaternion-getaxisandangle-vector3d-float + +// @snippet qquaternion-geteulerangles +float pitch{}, yaw{}, roll{}; +%CPPSELF.%FUNCTION_NAME(&pitch, &yaw, &roll); +%PYARG_0 = PyTuple_New(3); +PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[float](pitch)); +PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[float](yaw)); +PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[float](roll)); +// @snippet qquaternion-geteulerangles + // @snippet qregion-len return %CPPSELF.rectCount(); // @snippet qregion-len diff --git a/sources/pyside6/tests/QtGui/qtransform_test.py b/sources/pyside6/tests/QtGui/qtransform_test.py index 053f07331..dc51a74e6 100644 --- a/sources/pyside6/tests/QtGui/qtransform_test.py +++ b/sources/pyside6/tests/QtGui/qtransform_test.py @@ -11,7 +11,7 @@ from init_paths import init_test_paths init_test_paths(False) from PySide6.QtCore import QPointF -from PySide6.QtGui import QTransform, QPolygonF, QPolygonF +from PySide6.QtGui import QTransform, QPolygonF, QPolygonF, QQuaternion, QVector3D class QTransformTest(unittest.TestCase): @@ -78,6 +78,12 @@ class QTransformTest(unittest.TestCase): self.assertEqual(t1, r2) + def testQQuaternion(self): + """Test return tuples.""" + q = QQuaternion(1, 1, 1, 1) + self.assertEqual(len(q.getAxisAndAngle()), 2) + self.assertEqual(len(q.getEulerAngles()), 3) + if __name__ == "__main__": unittest.main() |