Part/Sketcher: GeometryExtension/GeometryPersistentExtension split

==================================================================

GeometryExtension was originally designed to be serializable (save/restore). However,
GeometryMigrationExtension and ViewProviderSketchGeometryExtension have demonstrated the
usefulness of runtime-only GeometryExtensions.

The problem with runtime-only extensions being of a serializable type (GeometryExtension before
this commit) arises when Part::Geometry is to serialize the extensions and serialise the number
of extensions the geometry has. If runtime-only GeometryExtensions do not save a tag, then the
restore mechanism will expect more extensions that are actually in the XML file.

This commit makes GeometryExtension by default not serializable and deriving directly from
Base::BaseClass. A new class GeometryPersistentExtension is created, deriving from GeometryExtension
to provide serialisation. All Extensions requiring serialization derive from GeometryPersistentExtension
and those not requiring it from GeometryExtension directly.

This commit adapts all extensions to the new situation:
Part: GeometryDefaultExtension
Part: GeometryMigrationExtension
Sketcher: ViewProvierSketchGeometryExtension
Sketcher: SketchGeometryExtension and ExternalGeometryExtension
This commit is contained in:
Abdullah Tahiri
2020-12-04 14:52:59 +01:00
committed by abdullahtahiriyo
parent 4e199bd23e
commit 11d4d6c18e
14 changed files with 43 additions and 87 deletions

View File

@@ -45,12 +45,6 @@ GeometryDefaultExtension<T>::GeometryDefaultExtension(const T& val, std::string
}
// Persistence implementer
template <typename T>
unsigned int GeometryDefaultExtension<T>::getMemSize (void) const
{
return 1;
}
template <typename T>
void GeometryDefaultExtension<T>::Save(Base::Writer &writer) const
{
@@ -114,7 +108,7 @@ namespace Part {
//typedef Part::GeometryStringExtension<std::string> GeometryStringExtension;
// ---------- GeometryIntExtension ----------
TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryIntExtension,Part::GeometryExtension)
TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryIntExtension,Part::GeometryPersistenceExtension)
template <>
PyObject * GeometryDefaultExtension<long>::getPyObject(void)
@@ -131,7 +125,7 @@ void GeometryDefaultExtension<long>::Restore(Base::XMLReader &reader)
}
// ---------- GeometryStringExtension ----------
TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryStringExtension,Part::GeometryExtension)
TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryStringExtension,Part::GeometryPersistenceExtension)
template <>
PyObject * GeometryDefaultExtension<std::string>::getPyObject(void)
@@ -140,7 +134,7 @@ PyObject * GeometryDefaultExtension<std::string>::getPyObject(void)
}
// ---------- GeometryBoolExtension ----------
TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryBoolExtension,Part::GeometryExtension)
TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryBoolExtension,Part::GeometryPersistenceExtension)
template <>
PyObject * GeometryDefaultExtension<bool>::getPyObject(void)
@@ -157,7 +151,7 @@ void GeometryDefaultExtension<bool>::Restore(Base::XMLReader &reader)
}
// ---------- GeometryDoubleExtension ----------
TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryDoubleExtension,Part::GeometryExtension)
TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryDoubleExtension,Part::GeometryPersistenceExtension)
template <>
PyObject * GeometryDefaultExtension<double>::getPyObject(void)