Rotation:
- Add a private attribute Vector to store the direction of the rotation, and manage not to erase this direction when the angle id 0.
- Add a private attribute to store the angle as defined (no modulo etc)
- Keep the quaternion for calculations
PropertyGeo
- Saves the rotation with angle and direction instead of saving the quaternion.
- Attribute name chosen: Ox, Oy and Oz for the coordinates of the axis and A for the angle in radians. This has to be validated.
- Backward compatibility with the saved files with quaternion (test presence of A to determine which of the Quaternion (old way) or the direction and angle is stored (new way). New files can be opened by old FreeCAD and vice-versa.
The only side effect I can imagine is that it was possible to set a vector to 0, 0, 0 if the angle was not 0, what is somehow non sense. Now when setting to 0, 0 0 the last not null vector is kept. The vector can not be null any longer.
The new constructor accepts wanted directions of x,y,z axes of rotated
frame, and a priority string that affects how the vectors are made
perpendicular to each other.
Example - construct placement for sketch on XZ plane:
v = App.Vector
App.Rotation(v(1,0,0),v(0,0,1),v())