diff --git a/src/Mod/Part/App/GeometryDefaultExtension.cpp b/src/Mod/Part/App/GeometryDefaultExtension.cpp index 43c906588a..a39137aa1f 100644 --- a/src/Mod/Part/App/GeometryDefaultExtension.cpp +++ b/src/Mod/Part/App/GeometryDefaultExtension.cpp @@ -37,9 +37,9 @@ using namespace Part; //---------- Geometry Extension template -GeometryDefaultExtension::GeometryDefaultExtension(const T& val):value(val) +GeometryDefaultExtension::GeometryDefaultExtension(const T& val, std::string name):value(val) { - + setName(name); } // Persistence implementer @@ -53,13 +53,21 @@ template void GeometryDefaultExtension::Save(Base::Writer &writer) const { - writer.Stream() << writer.ind() << "getTypeId().getName() - << "\" value=\"" << value << "\"/>" << std::endl; + writer.Stream() << writer.ind() << "getTypeId().getName(); + + const std::string name = getName(); + + if(name.size() > 0) + writer.Stream() << "\" name=\"" << name; + + writer.Stream() << "\" value=\"" << value << "\"/>" << std::endl; } template void GeometryDefaultExtension::Restore(Base::XMLReader &reader) { + restoreNameAttribute(reader); + value = reader.getAttribute("value"); } @@ -69,6 +77,7 @@ std::unique_ptr GeometryDefaultExtension::copy(void) std::unique_ptr> cpy = std::make_unique>(); cpy->value = this->value; + cpy->setName(this->getName()); return cpy; // Don't std::move(cpy); RVO optimization Item 25, if the compiler fails to elide, would have to move it anyway @@ -92,12 +101,14 @@ TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryIntExtension,Part::GeometryExtension) template <> PyObject * GeometryDefaultExtension::getPyObject(void) { - return new GeometryIntExtensionPy(new GeometryIntExtension(this->value)); + return new GeometryIntExtensionPy(new GeometryIntExtension(*this)); } template <> void GeometryDefaultExtension::Restore(Base::XMLReader &reader) { + restoreNameAttribute(reader); + value = reader.getAttributeAsInteger("value"); } @@ -107,7 +118,7 @@ TYPESYSTEM_SOURCE_TEMPLATE_T(Part::GeometryStringExtension,Part::GeometryExtensi template <> PyObject * GeometryDefaultExtension::getPyObject(void) { - return new GeometryStringExtensionPy(new GeometryStringExtension(this->value)); + return new GeometryStringExtensionPy(new GeometryStringExtension(*this)); } diff --git a/src/Mod/Part/App/GeometryDefaultExtension.h b/src/Mod/Part/App/GeometryDefaultExtension.h index d8a2726f69..d8640eab30 100644 --- a/src/Mod/Part/App/GeometryDefaultExtension.h +++ b/src/Mod/Part/App/GeometryDefaultExtension.h @@ -35,7 +35,7 @@ namespace Part { TYPESYSTEM_HEADER(); public: GeometryDefaultExtension() = default; - GeometryDefaultExtension(const T& val); + GeometryDefaultExtension(const T& val, std::string name = std::string()); virtual ~GeometryDefaultExtension() = default; inline void setValue(const T& val) {value = val;}; @@ -50,6 +50,9 @@ namespace Part { virtual PyObject *getPyObject(void); + private: + GeometryDefaultExtension(const GeometryDefaultExtension&) = default; + private: T value; }; diff --git a/src/Mod/Part/App/GeometryExtension.cpp b/src/Mod/Part/App/GeometryExtension.cpp index 8a3a910518..a7f9296441 100644 --- a/src/Mod/Part/App/GeometryExtension.cpp +++ b/src/Mod/Part/App/GeometryExtension.cpp @@ -37,6 +37,10 @@ GeometryExtension::GeometryExtension() { } -GeometryExtension::~GeometryExtension() +void GeometryExtension::restoreNameAttribute(Base::XMLReader &reader) { + if(reader.hasAttribute("name")) { + std::string name = reader.getAttribute("name"); + setName(name); + } } diff --git a/src/Mod/Part/App/GeometryExtension.h b/src/Mod/Part/App/GeometryExtension.h index f2a20687b9..7f163f6b6f 100644 --- a/src/Mod/Part/App/GeometryExtension.h +++ b/src/Mod/Part/App/GeometryExtension.h @@ -26,6 +26,7 @@ #include #include +#include namespace std { template @@ -41,7 +42,7 @@ class PartExport GeometryExtension: public Base::Persistence { TYPESYSTEM_HEADER(); public: - virtual ~GeometryExtension(); + virtual ~GeometryExtension() = default; // Persistence implementer --------------------- virtual unsigned int getMemSize(void) const = 0; @@ -51,8 +52,18 @@ public: virtual std::unique_ptr copy(void) const = 0; virtual PyObject *getPyObject(void) = 0; + + inline void setName(const std::string& str) {name = str;} + inline const std::string &getName () const {return name;} + protected: GeometryExtension(); + GeometryExtension(const GeometryExtension &obj) = default; + + void restoreNameAttribute(Base::XMLReader &/*reader*/); + +private: + std::string name; }; } diff --git a/src/Mod/Part/App/GeometryExtensionPy.xml b/src/Mod/Part/App/GeometryExtensionPy.xml index 3b4e08f3e2..3e17b9f680 100644 --- a/src/Mod/Part/App/GeometryExtensionPy.xml +++ b/src/Mod/Part/App/GeometryExtensionPy.xml @@ -20,5 +20,11 @@ Create a copy of this geometry extension. + + + Sets/returns the name of this extension. + + + diff --git a/src/Mod/Part/App/GeometryExtensionPyImp.cpp b/src/Mod/Part/App/GeometryExtensionPyImp.cpp index 2c8747c59e..28a63ebbbc 100644 --- a/src/Mod/Part/App/GeometryExtensionPyImp.cpp +++ b/src/Mod/Part/App/GeometryExtensionPyImp.cpp @@ -76,6 +76,19 @@ PyObject* GeometryExtensionPy::copy(PyObject *args) return cpy; } +Py::String GeometryExtensionPy::getName(void) const +{ + std::string name = this->getGeometryExtensionPtr()->getName(); + + return Py::String(name); +} + +void GeometryExtensionPy::setName(Py::String arg) +{ + std::string name = arg.as_std_string(); + + this->getGeometryExtensionPtr()->setName(name); +} PyObject *GeometryExtensionPy::getCustomAttributes(const char* /*attr*/) const { diff --git a/src/Mod/Part/App/GeometryIntExtensionPyImp.cpp b/src/Mod/Part/App/GeometryIntExtensionPyImp.cpp index e6d7ca43eb..872335ce3e 100644 --- a/src/Mod/Part/App/GeometryIntExtensionPyImp.cpp +++ b/src/Mod/Part/App/GeometryIntExtensionPyImp.cpp @@ -35,7 +35,14 @@ std::string GeometryIntExtensionPy::representation(void) const { std::stringstream str; long id = getGeometryIntExtensionPtr()->getValue(); - str << ""; + str << "getName().size()>0) + str << "\'" << getGeometryIntExtensionPtr()->getName() << "\', "; + + str << id << ") >"; + + return str.str(); } diff --git a/src/Mod/Part/App/GeometryStringExtensionPyImp.cpp b/src/Mod/Part/App/GeometryStringExtensionPyImp.cpp index 3315c4641a..3b4eb41d89 100644 --- a/src/Mod/Part/App/GeometryStringExtensionPyImp.cpp +++ b/src/Mod/Part/App/GeometryStringExtensionPyImp.cpp @@ -38,7 +38,13 @@ using namespace Part; std::string GeometryStringExtensionPy::representation(void) const { std::stringstream str; - str << "getValue() << ") >"; + str << "getName().size()>0) + str << "\'" << getGeometryStringExtensionPtr()->getName() << "\', "; + + str << getGeometryStringExtensionPtr()->getValue() << ") >"; + return str.str(); }