Euler angles in FreeCAD could be specified in many ways (24 if i didn't go wrong), I don't recall well the forum post, but one of the main developer has improved the "euler" angles specifications to include all this
All the thread could be interesting.
To complicate things, if you are copying or doing some operation on a object the Placement position is copied but is set as the Base property so the Placement property will read all zero, not all "trasformations" are doing this "incorporation" but some have this peculiarity, you have to inspect objects for the different things.
Below this line is some mumbling about Rotation, they are an illustration on how to dig into FreeCAD sources to put together some informations.
This is more an illustration of my way of insepcting sources than an autoritathive explnanation. Take it as it is some thingking about an argument, maybe you will find something useful, maybe not.
Placement is somewhat a mess, as it internally store the combination of translation and rotation as a quaternion.
Code: Select all
print(pl)
Placement [Pos=(0,0,0), Yaw-Pitch-Roll=(0,0,0)]
>>> print(pl.Matrix)
Matrix ((1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,0,1))
>>> print(dir(pl.Matrix))
['A', 'A11', 'A12', 'A13', 'A14', 'A21', 'A22', 'A23', 'A24', 'A31', 'A32', 'A33', 'A34', 'A41', 'A42', 'A43', 'A44', '__abs__', '__add__', '__and__', '__bool__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__xor__', 'analyze', 'determinant', 'hasScale', 'inverse', 'invert', 'isOrthogonal', 'move', 'multVec', 'multiply', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'submatrix', 'transform', 'transpose', 'transposed', 'unity']
>>> print(dir(pl.Rotation))
['Angle', 'Axis', 'Q', 'RawAxis', '__abs__', '__add__', '__and__', '__bool__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__xor__', 'invert', 'inverted', 'isIdentity', 'isNull', 'isSame', 'multVec', 'multiply', 'slerp', 'toEuler', 'toMatrix']
>>>
but also in the same file the "help" form the programmer that explains some things.
This is what there is in the source inspected today.
All the documentation on the wiki is to be considered a primer, when doing something more advanced, better to "go to the source", many gems are hidden maybe in a comment or a commented out part of code.
Hope it will help and to add more confusion.
Carlo D.