diff --git a/src/Mod/Part/App/PropertyGeometryList.cpp b/src/Mod/Part/App/PropertyGeometryList.cpp index 3a62b6149c..47ec751da8 100644 --- a/src/Mod/Part/App/PropertyGeometryList.cpp +++ b/src/Mod/Part/App/PropertyGeometryList.cpp @@ -164,6 +164,28 @@ void PropertyGeometryList::setPyObject(PyObject *value) } } +void PropertyGeometryList::trySaveGeometry(Geometry * geom, Base::Writer &writer) const +{ + // Not all geometry classes implement Save() and throw an exception instead + try { + geom->Save(writer); + } + catch (const Base::NotImplementedError& e) { + Base::Console().Warning(std::string("PropertyGeometryList"), "Not yet implemented: %s\n", e.what()); + } +} + +void PropertyGeometryList::tryRestoreGeometry(Geometry * geom, Base::XMLReader &reader) +{ + // Not all geometry classes implement Restore() and throw an exception instead + try { + geom->Restore(reader); + } + catch (const Base::NotImplementedError& e) { + Base::Console().Warning(std::string("PropertyGeometryList"), "Not yet implemented: %s\n", e.what()); + } +} + void PropertyGeometryList::Save(Writer &writer) const { writer.Stream() << writer.ind() << "" << endl; @@ -172,7 +194,7 @@ void PropertyGeometryList::Save(Writer &writer) const writer.Stream() << writer.ind() << "getTypeId().getName() << "\">" << endl;; writer.incInd(); - _lValueList[i]->Save(writer); + trySaveGeometry(_lValueList[i], writer); writer.decInd(); writer.Stream() << writer.ind() << "" << endl; } @@ -193,7 +215,7 @@ void PropertyGeometryList::Restore(Base::XMLReader &reader) reader.readElement("Geometry"); const char* TypeName = reader.getAttribute("type"); Geometry *newG = static_cast(Base::Type::fromName(TypeName).createInstance()); - newG->Restore(reader); + tryRestoreGeometry(newG, reader); if(reader.testStatus(Base::XMLReader::ReaderStatus::PartialRestoreInObject)) { Base::Console().Error("Geometry \"%s\" within a PropertyGeometryList was subject to a partial restore.\n",reader.localName()); diff --git a/src/Mod/Part/App/PropertyGeometryList.h b/src/Mod/Part/App/PropertyGeometryList.h index 05fae85a4b..a8aa343512 100644 --- a/src/Mod/Part/App/PropertyGeometryList.h +++ b/src/Mod/Part/App/PropertyGeometryList.h @@ -86,6 +86,10 @@ public: unsigned int getMemSize() const override; +private: + void trySaveGeometry(Geometry * geom, Base::Writer &writer) const; + void tryRestoreGeometry(Geometry * geom, Base::XMLReader &reader); + private: std::vector _lValueList; };