From 497c1895e8ff24de125d73a05350c95deb7cfe06 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 27 Oct 2021 00:34:36 +0200 Subject: [PATCH] Base: [skip ci] expose Rotation.fromEuler() to Python --- src/Base/RotationPy.xml | 17 ++++++++++++++++- src/Base/RotationPyImp.cpp | 30 +++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/Base/RotationPy.xml b/src/Base/RotationPy.xml index bfb60e2a70..bd06e47d57 100644 --- a/src/Base/RotationPy.xml +++ b/src/Base/RotationPy.xml @@ -83,13 +83,28 @@ + + + + fromEuler(angle1, angle2, angle3) + Set the Euler angles of this rotation + as yaw-pitch-roll in XY'Z'' convention. + or: + fromEuler(seq, angle1, angle2, angle3) + Get the Euler angles in a given sequence for this rotation. + + NOTE: The angles are in degree + + + toEuler() -> list Get the Euler angles of this rotation as yaw-pitch-roll in XY'Z'' convention - + NOTE: The angles are in degree + diff --git a/src/Base/RotationPyImp.cpp b/src/Base/RotationPyImp.cpp index a66997f3b9..556d2731ad 100644 --- a/src/Base/RotationPyImp.cpp +++ b/src/Base/RotationPyImp.cpp @@ -279,10 +279,38 @@ PyObject* RotationPy::slerp(PyObject * args) return new RotationPy(new Rotation(sl)); } +PyObject* RotationPy::fromEuler(PyObject * args) +{ + double A,B,C; + if (PyArg_ParseTuple(args, "ddd", &A, &B, &C)) { + this->getRotationPtr()->setYawPitchRoll(A,B,C); + Py_Return; + } + + PyErr_Clear(); + const char *seq; + if (PyArg_ParseTuple(args, "sddd", &seq, &A, &B, &C)) { + try { + getRotationPtr()->setEulerAngles( + Rotation::eulerSequenceFromName(seq), A, B, C); + Py_Return; + } + catch (const Base::Exception& e) { + e.setPyException(); + return nullptr; + } + } + + PyErr_SetString(PyExc_TypeError, "Expected arguments:\n" + "- float, float, float or\n" + "- string, float, float, float"); + return nullptr; +} + PyObject* RotationPy::toEuler(PyObject * args) { if (!PyArg_ParseTuple(args, "")) - return NULL; + return nullptr; double A,B,C; this->getRotationPtr()->getYawPitchRoll(A,B,C);