=============================================================================================
This commits removes the Geometry construction data member and adapts sketcher code to use
GeometryFacade to access construction information via the SketchGeometryExtension.
===================================
Encapsulate Part::Geometry data member copy process in a single function (copyNonTag).
Part::Geometry derived classes need not know the specifics of the data member of Part::Geometry.
Change the delegation of the copy of extensions from clone() to copyNonTag. Because clone() relies on
copy() and now copy() of Part::Geometry data member relies on copyNonTag(), there is no actual change
to the clone() functionality, but the copy() funcionality gains the copy of the extensions via copyNonTag().
+ rename getCurve2dFromGeom2d to makeFromCurve2d
+ add function makeFromCurve and makeFromTrimmedCurve like makeFromSurface
+ implement OffsetCurve.BasisCurve
+ fix memory leak in BRepOffsetAPI_MakePipeShellPy
========================
fixes#4087
Missing "break" in loop after finding the extension was causing segfault because of null pointer access, as the unique pointer had been std:move-d when found and was thus no longer valid.
=======================================
unique_ptr is a move only type. Therefore it may only take an rvalue.
It does not make sense a pass by value for move only types (Item 41).
==============================================================
When the geometry object is destroyed, std::vector's destructor is called, which in turn calls the destructor of the smart pointers.
If a weak_ptr corresponding to one of those shared_ptr is locked (elsewhere, if FC were multithread),
the underlaying resource will not be freed until said locked weak_ptr goes out of scope. It will then.
add a special XMLAttributeError class to indicate an error when accessing a missing attribute
in PropertyContainer::Restore make error handling more flexible
====================================================
Part of the geometry was using CADKernelError and part was using RunTimeError exceptions, so unify criteria.
Runtime is very generic and does not need to stem from OCCT.
- Also rename of a typo basic to basis, to be coherent with OCCT terminology
====================================================
The new hierarchy is as this:
GeomArcOfConic:GeomTrimmedCurve:GeomBoundedCurve:GeomCurve
A bounded curve is one having a start and endpoint, like an arc, a line segment, or a b-spline
A trimmed curve is one arising from trimming a basis curve, line an arc or a line segment, but NOT a b-spline.
An arc of Conic is one arising from a conic section, line an arc, but neither a line segment, nor a b-spline.
This new hierarchy enables a more consistent handling of geometry and it is closer to the OCCT hierarchy.
===============================================
Extrema algorithms sometimes fails when coincident endpoints
I am not sure if it is a bug in OCCT or it is just not intended.
This commits adds an extra check to add endpoints if within tolerance.
https://forum.freecadweb.org/viewtopic.php?f=10&t=31700