From 91ac9d2951ed8aaa43f17a127bcf72123d26b2db Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Sat, 14 Nov 2020 06:54:01 +0100 Subject: [PATCH] Sketcher: SketchGeometryExtension refactor InternalGeometry string conversion ============================================================================= Minor refactoring to centralise string to enum conversion in a single place --- src/Mod/Sketcher/App/GeometryFacadePyImp.cpp | 15 ++++----------- .../Sketcher/App/SketchGeometryExtension.cpp | 18 ++++++++++++++++++ src/Mod/Sketcher/App/SketchGeometryExtension.h | 2 ++ .../App/SketchGeometryExtensionPyImp.cpp | 15 ++++----------- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/Mod/Sketcher/App/GeometryFacadePyImp.cpp b/src/Mod/Sketcher/App/GeometryFacadePyImp.cpp index ba32dd7197..77b118c0dc 100644 --- a/src/Mod/Sketcher/App/GeometryFacadePyImp.cpp +++ b/src/Mod/Sketcher/App/GeometryFacadePyImp.cpp @@ -107,18 +107,11 @@ Py::String GeometryFacadePy::getInternalType(void) const void GeometryFacadePy::setInternalType(Py::String arg) { std::string argstr = arg; + InternalType::InternalType type; - auto pos = std::find_if( SketchGeometryExtension::internaltype2str.begin(), - SketchGeometryExtension::internaltype2str.end(), - [argstr](const char * val) { - return strcmp(val,argstr.c_str())==0;} - ); - - if( pos != SketchGeometryExtension::internaltype2str.end()) { - int index = std::distance( SketchGeometryExtension::internaltype2str.begin(), pos ); - - this->getGeometryFacadePtr()->setInternalType((InternalType::InternalType)index); - return; + if(SketchGeometryExtension::getInternalTypeFromName(argstr, type)) { + this->getGeometryFacadePtr()->setInternalType(type); + return; } throw Py::ValueError("Argument is not a valid internal geometry type."); diff --git a/src/Mod/Sketcher/App/SketchGeometryExtension.cpp b/src/Mod/Sketcher/App/SketchGeometryExtension.cpp index af9fa5d3fd..f03e87baec 100644 --- a/src/Mod/Sketcher/App/SketchGeometryExtension.cpp +++ b/src/Mod/Sketcher/App/SketchGeometryExtension.cpp @@ -98,3 +98,21 @@ PyObject * SketchGeometryExtension::getPyObject(void) return new SketchGeometryExtensionPy(new SketchGeometryExtension(*this)); } +bool SketchGeometryExtension::getInternalTypeFromName(std::string str, InternalType::InternalType &type) +{ + auto pos = std::find_if( SketchGeometryExtension::internaltype2str.begin(), + SketchGeometryExtension::internaltype2str.end(), + [str](const char * val) { + return strcmp(val,str.c_str())==0;} + ); + + if( pos != SketchGeometryExtension::internaltype2str.end()) { + int index = std::distance( SketchGeometryExtension::internaltype2str.begin(), pos ); + + type = static_cast(index); + return true; + } + + return false; +} + diff --git a/src/Mod/Sketcher/App/SketchGeometryExtension.h b/src/Mod/Sketcher/App/SketchGeometryExtension.h index 45c47105ae..187a37abfa 100644 --- a/src/Mod/Sketcher/App/SketchGeometryExtension.h +++ b/src/Mod/Sketcher/App/SketchGeometryExtension.h @@ -86,6 +86,8 @@ public: constexpr static std::array internaltype2str {{ "None", "EllipseMajorDiameter", "EllipseMinorDiameter","EllipseFocus1", "EllipseFocus2", "HyperbolaMajor", "HyperbolaMinor", "HyperbolaFocus", "ParabolaFocus", "BSplineControlPoint", "BSplineKnotPoint" }}; + static bool getInternalTypeFromName(std::string str, InternalType::InternalType &type); + private: SketchGeometryExtension(const SketchGeometryExtension&) = default; diff --git a/src/Mod/Sketcher/App/SketchGeometryExtensionPyImp.cpp b/src/Mod/Sketcher/App/SketchGeometryExtensionPyImp.cpp index 5d2af73898..7eb665745a 100644 --- a/src/Mod/Sketcher/App/SketchGeometryExtensionPyImp.cpp +++ b/src/Mod/Sketcher/App/SketchGeometryExtensionPyImp.cpp @@ -104,18 +104,11 @@ Py::String SketchGeometryExtensionPy::getInternalType(void) const void SketchGeometryExtensionPy::setInternalType(Py::String arg) { std::string argstr = arg; + InternalType::InternalType type; - auto pos = std::find_if(this->getSketchGeometryExtensionPtr()->internaltype2str.begin(), - getSketchGeometryExtensionPtr()->internaltype2str.end(), - [argstr](const char * val) { - return strcmp(val,argstr.c_str())==0;} - ); - - if( pos != getSketchGeometryExtensionPtr()->internaltype2str.end()) { - int index = std::distance( getSketchGeometryExtensionPtr()->internaltype2str.begin(), pos ); - - this->getSketchGeometryExtensionPtr()->setInternalType((InternalType::InternalType)index); - return; + if(SketchGeometryExtension::getInternalTypeFromName(argstr, type)) { + this->getSketchGeometryExtensionPtr()->setInternalType(type); + return; } throw Py::ValueError("Argument is not a valid internal geometry type.");