+ when reading an enumeration ignore negative indexes and print a warning
+ raise an exception when trying to get the current value of an invalid enumeration
fixes#0002602
Now, it won't bunch up same object entries if they are not adjacent. I.e., same object can appear twice and more, for example:
[(object1, ('Edge2', 'Edge3')), (object2, ('Edge1',)), (object1, ('Edge4', 'Edge5'))]
Complete bunching causes information loss, and it's impossible to fix the bug with keeping the bunching complete.
PropertyContainer uses a static member of type PropertyData to register
static properties. PropertyData uses a short variable to record the
offset of the property against its container.
Because of possible 'short' truncation, when searching of property that
in fact is from another container, we must check if the pointer within
boundary. Otherwise, truncation will result in effectively random
number, and possibly causing a false hit.
I'm still finding typos in the source code. I propose that you keep this PR open prior ro relaese and then merge so that if I find other typos in the meantime they will be part this release.
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.