diff --git a/src/Base/PlacementPy.xml b/src/Base/PlacementPy.xml index 79ebff89ed..5063315b41 100644 --- a/src/Base/PlacementPy.xml +++ b/src/Base/PlacementPy.xml @@ -1,21 +1,21 @@ - - - - Base.Placement class.\n + FatherNamespace="Base"> + + + Base.Placement class.\n A Placement defines an orientation (rotation) and a position (base) in 3D space. It is used when no scaling or other distortion is needed.\n The following constructors are supported:\n @@ -41,28 +41,28 @@ define position and rotation. base : Base.Vector axis : Base.Vector angle : float - Placement - + Placement + copy() -> Base.Placement\n Returns a copy of this placement. - - - move(vector) -> None\n + + + move(vector) -> None\n Move the placement along a vector.\n vector : Base.Vector\n Vector by which to move the placement. - - - - - translate(vector) -> None\n + + + + + translate(vector) -> None\n Alias to move(), to be compatible with TopoShape.translate().\n vector : Base.Vector\n Vector by which to move the placement. - - + + rotate(center, axis, angle, comp) -> None\n @@ -79,45 +79,45 @@ behave like TopoShape.rotate() (i.e. the resulting placements are interchangeabl - - multiply(placement) -> Base.Placement\n + + multiply(placement) -> Base.Placement\n Right multiply this placement with another placement. Also available as `*` operator.\n placement : Base.Placement\n Placement by which to multiply this placement. - - + + - - multVec(vector) -> Base.Vector\n + + multVec(vector) -> Base.Vector\n Compute the transformed vector using the placement.\n vector : Base.Vector\n Vector to be transformed. - - + + - - toMatrix() -> Base.Matrix\n + + toMatrix() -> Base.Matrix\n Compute the matrix representation of the placement. - - + + - - inverse() -> Base.Placement\n + + inverse() -> Base.Placement\n Compute the inverse placement. - - + + - - pow(t, shorten=True) -> Base.Placement\n + + pow(t, shorten=True) -> Base.Placement\n Raise this placement to real power using ScLERP interpolation. Also available as `**` operator.\n t : float\n Real power. shorten : bool\n If True, ensures rotation quaternion is net positive to make the path shorter. - - + + - - sclerp(placement2, t, shorten=True) -> Base.Placement\n + + sclerp(placement2, t, shorten=True) -> Base.Placement\n Screw Linear Interpolation (ScLERP) between this placement and `placement2`. Interpolation is a continuous motion along a helical path parametrized by `t` made of equal transforms if discretized. @@ -128,11 +128,11 @@ t : float\n Parameter of helical path. t=0 returns this placement, t=1 return `placement2`. t can also be outside of [0, 1] range for extrapolation. shorten : bool\n If True, the signs are harmonized before interpolation and the interpolation takes the shorter path. - - + + - - slerp(placement2, t) -> Base.Placement\n + + slerp(placement2, t) -> Base.Placement\n Spherical Linear Interpolation (SLERP) between this placement and `placement2`. This function performs independent interpolation of rotation and movement. Result of such interpolation might be not what application expects, thus this tool @@ -140,38 +140,38 @@ might be considered for simple cases or for interpolating between small interval For more complex cases you better use the advanced sclerp() function.\n placement2 : Base.Placement t : float\n Parameter of the path. t=0 returns this placement, t=1 returns `placement2`. - - + + - - isIdentity() -> bool\n + + isIdentity() -> bool\n Returns True if the placement has no displacement and no rotation. Matrix representation is the 4D identity matrix. - - + + - - Vector to the Base Position of the Placement. - - - - - - Orientation of the placement expressed as rotation. - - - - - + + Vector to the Base Position of the Placement. + + + + + + Orientation of the placement expressed as rotation. + + + + + Set/get matrix representation of the placement. - - - + + + public: PlacementPy(const Placement & pla, PyTypeObject *T = &Type) :PyObjectBase(new Placement(pla),T){} Placement value() const { return *(getPlacementPtr()); } - + diff --git a/src/Base/PlacementPyImp.cpp b/src/Base/PlacementPyImp.cpp index 8b62c7ed49..fd80436251 100644 --- a/src/Base/PlacementPyImp.cpp +++ b/src/Base/PlacementPyImp.cpp @@ -39,14 +39,14 @@ using namespace Base; // returns a string which represents the object e.g. when printed in python std::string PlacementPy::representation() const { - double A,B,C; + double yaw{}, pitch{}, roll{}; PlacementPy::PointerType ptr = getPlacementPtr(); std::stringstream str; - ptr->getRotation().getYawPitchRoll(A,B,C); + ptr->getRotation().getYawPitchRoll(yaw, pitch, roll); str << "Placement [Pos=("; str << ptr->getPosition().x << ","<< ptr->getPosition().y << "," << ptr->getPosition().z; - str << "), Yaw-Pitch-Roll=(" << A << "," << B << "," << C << ")]"; + str << "), Yaw-Pitch-Roll=(" << yaw << "," << pitch << "," << roll << ")]"; return str.str(); } @@ -163,17 +163,18 @@ PyObject* PlacementPy::translate(PyObject * args) return move(args); } -PyObject* PlacementPy::rotate(PyObject *args, PyObject *kw) { +PyObject* PlacementPy::rotate(PyObject *args, PyObject *kwds) +{ double angle; char *keywords[] = { "center", "axis", "angle", "comp", nullptr }; Vector3d center; Vector3d axis; PyObject* pyComp = Py_False; - - if (!PyArg_ParseTupleAndKeywords(args, kw, "(ddd)(ddd)d|$O!", keywords, ¢er.x, ¢er.y, ¢er.z, - &axis.x, &axis.y, &axis.z, &angle, &PyBool_Type, &pyComp)) + + if (!PyArg_ParseTupleAndKeywords(args, kwds, "(ddd)(ddd)d|$O!", keywords, ¢er.x, ¢er.y, ¢er.z, + &axis.x, &axis.y, &axis.z, &angle, &PyBool_Type, &pyComp)) return nullptr; - + try { /* * if comp is False, we retain the original behaviour that - contrary to the documentation - generates @@ -192,7 +193,7 @@ PyObject* PlacementPy::rotate(PyObject *args, PyObject *kw) { *getPlacementPtr() = Placement( Vector3d(),Rotation(axis,toRadians(angle)),center) * p; } - + Py_Return; } catch (const Py::Exception&) {