diff --git a/src/Mod/Sketcher/App/GeometryFacade.cpp b/src/Mod/Sketcher/App/GeometryFacade.cpp index a5f0b5bb8d..7e8af8500b 100644 --- a/src/Mod/Sketcher/App/GeometryFacade.cpp +++ b/src/Mod/Sketcher/App/GeometryFacade.cpp @@ -46,11 +46,9 @@ GeometryFacade::GeometryFacade(): Geo(nullptr), OwnerGeo(false), SketchGeoExtens GeometryFacade::GeometryFacade(const Part::Geometry * geometry) : Geo(geometry), OwnerGeo(false) { - if(geometry != nullptr) - initExtension(); - else - THROWM(Base::ValueError, "GeometryFacade initialized with Geometry null pointer"); + assert(geometry != nullptr); // This should never be nullptr, as this constructor is protected + initExtension(); } GeometryFacade::~GeometryFacade() @@ -104,8 +102,8 @@ void GeometryFacade::initExtension() void GeometryFacade::initExtension() const { - if(!Geo->hasExtension(SketchGeometryExtension::getClassTypeId())) - THROWM(Base::ValueError, "GeometryConstFacade for const::Geometry without SketchGeometryExtension"); + // const Geometry without SketchGeometryExtension cannot initiliase a GeometryFacade + assert(Geo->hasExtension(SketchGeometryExtension::getClassTypeId())); auto ext = std::static_pointer_cast(Geo->getExtension(SketchGeometryExtension::getClassTypeId()).lock()); diff --git a/src/Mod/Sketcher/App/GeometryFacade.h b/src/Mod/Sketcher/App/GeometryFacade.h index be8d806c34..dea75d0fdf 100644 --- a/src/Mod/Sketcher/App/GeometryFacade.h +++ b/src/Mod/Sketcher/App/GeometryFacade.h @@ -118,12 +118,25 @@ public: // Utility methods static bool getBlocked(const Part::Geometry * geometry); public: + // Explicit deletion to show intent (not that it is needed) + GeometryFacade(const GeometryFacade&) = delete; + GeometryFacade& operator=(const GeometryFacade&) = delete; + + GeometryFacade(GeometryFacade&&) = default; + GeometryFacade& operator=(GeometryFacade&&) = default; + ~GeometryFacade(); void setGeometry(Part::Geometry *geometry); + void setOwner(bool owner) { OwnerGeo = owner; } + // returns if the facade is the owner of the geometry pointer. + bool getOwner() const { + return OwnerGeo; + } + // Geometry Extension Interface inline virtual long getId() const override {return getGeoExt()->getId();} virtual void setId(long id) override {getGeoExt()->setId(id);} @@ -160,7 +173,7 @@ public: std::is_base_of::type>::value >::type > - GeometryT * getGeometry() const {return dynamic_cast(Geo);} + const GeometryT * getGeometry() const {return dynamic_cast(Geo);} virtual PyObject *getPyObject(void) override;