From cc94820a06614fd56e7be60b920b6daa1aa93867 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Mon, 1 Nov 2021 18:29:24 +0100 Subject: [PATCH] Sketcher: GeometryFacade Improvements =============================================== 1. Correct GeometryFacade getGeometry for const objects. 2. Modifications to avoid exceptions on the constructors. 3. Add default move constructor and move assignment operator. 4. Delete default copy constructor and copy assigment operator. --- src/Mod/Sketcher/App/GeometryFacade.cpp | 10 ++++------ src/Mod/Sketcher/App/GeometryFacade.h | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 7 deletions(-) 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;