In v0.22 a version number -1 is added to the material files to distinguish between old and new project file.
But v0.21 doesn't know about this version number and interprets it as number of elements instead.
Because this value is assigned to an unsigned type the value becomes 2**32 - 1. Now trying to create a container of this size requires > 280 GB
of RAM. On most systems FreeCAD new handler will jump in and raises a memory exception to stop the allocation. But an other systems with
plenty of RAM it's tried to allocate the memory and then may crash at some point.
This PR fixes this regression. It puts the version number to the MaterialList XML element as an optional attribute.
With this change FreeCAD v0.22 is still able to load projects that have been created prior to this change.
Additionally FreeCAD v0.21 can again load project files without crashing.
For more details see: https://forum.freecad.org/viewtopic.php?t=87268
* Fixed a mistake made in getSubObjectListFlatten()
* Applied modifications according to review comments
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Formatted and refactored code imported for the DocumentObject class
* Formatted and refactored code imported for the SubObjectT class
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Added test for SubObjectT::hasSubObject()
* Added test for SubObjectT::hasSubElement()
* Added test for SubObjectT::normalize()
* Added test for SubObjectT::normalized()
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Added SubObjectT methods normalize(), normalized(), hasSubObject() and hasSubElement()
* Updated DocumentObject::getSubObjectList()
* Applied modifications to make the code compile
When synchronizing the Transparency property with the transparency value of the ShapeAppearance property then do not convert between float and
double as otherwise some strange rounding issues can occur.
Example: Set the Transparency property of an object to 35 in the Property Editor. After leaving the editor the value may switch to 34.
* Restored previous logic of GeoFeature::getElementName()
* Added precompiler directive to use the old logic if FC_USE_TNP_FIX isn't defined, otherwise use the new logic
* Reworked SketchObjectTest::getElementName() as a consequence of the previous points
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
Uses new material system for appearance
Each feature object now has a property called ShapeMaterial that
describes its physical properties. If it has a shape, it has a
material.
The ShapeColor attribute is replaced by a ShapeAppearance attribute.
This is a material list that describes all appearance properties, not
just diffuse color. As a list in can be used for all elements of a
shape, such as edges and faces.
A new widget is provided to allow the user to select materials in a
consistent fashion. It can also launch the material editor with its
more advanced capabilities.