diff --git a/src/Mod/Sketcher/App/GeometryFacade.cpp b/src/Mod/Sketcher/App/GeometryFacade.cpp index 971ffa27ec..a5f0b5bb8d 100644 --- a/src/Mod/Sketcher/App/GeometryFacade.cpp +++ b/src/Mod/Sketcher/App/GeometryFacade.cpp @@ -38,13 +38,13 @@ using namespace Sketcher; TYPESYSTEM_SOURCE(Sketcher::GeometryFacade,Base::BaseClass) -GeometryFacade::GeometryFacade(): Geo(nullptr), SketchGeoExtension(nullptr) +GeometryFacade::GeometryFacade(): Geo(nullptr), OwnerGeo(false), SketchGeoExtension(nullptr) { } GeometryFacade::GeometryFacade(const Part::Geometry * geometry) -: Geo(geometry) +: Geo(geometry), OwnerGeo(false) { if(geometry != nullptr) initExtension(); @@ -53,6 +53,12 @@ GeometryFacade::GeometryFacade(const Part::Geometry * geometry) } +GeometryFacade::~GeometryFacade() +{ + if (OwnerGeo) + delete Geo; +} + std::unique_ptr GeometryFacade::getFacade(Part::Geometry * geometry) { if(geometry != nullptr) diff --git a/src/Mod/Sketcher/App/GeometryFacade.h b/src/Mod/Sketcher/App/GeometryFacade.h index 7fac1e70f4..be8d806c34 100644 --- a/src/Mod/Sketcher/App/GeometryFacade.h +++ b/src/Mod/Sketcher/App/GeometryFacade.h @@ -118,7 +118,11 @@ public: // Utility methods static bool getBlocked(const Part::Geometry * geometry); public: + ~GeometryFacade(); void setGeometry(Part::Geometry *geometry); + void setOwner(bool owner) { + OwnerGeo = owner; + } // Geometry Extension Interface inline virtual long getId() const override {return getGeoExt()->getId();} @@ -198,6 +202,7 @@ private: private: const Part::Geometry * Geo; + bool OwnerGeo; std::shared_ptr SketchGeoExtension; }; diff --git a/src/Mod/Sketcher/App/SketchObjectPyImp.cpp b/src/Mod/Sketcher/App/SketchObjectPyImp.cpp index d466d72cf1..7f9d330a40 100644 --- a/src/Mod/Sketcher/App/SketchObjectPyImp.cpp +++ b/src/Mod/Sketcher/App/SketchObjectPyImp.cpp @@ -1824,6 +1824,7 @@ Py::List SketchObjectPy::getGeometryFacadeList(void) const // we create a python copy and add it to the list std::unique_ptr geofacade = GeometryFacade::getFacade(getSketchObjectPtr()->Geometry[i]->clone()); + geofacade->setOwner(true); Py::Object gfp = Py::Object(new GeometryFacadePy(geofacade.release()),true);