diff --git a/src/Mod/Sketcher/App/ExternalGeometryExtension.cpp b/src/Mod/Sketcher/App/ExternalGeometryExtension.cpp index aeaa434cd7..754f02cc25 100644 --- a/src/Mod/Sketcher/App/ExternalGeometryExtension.cpp +++ b/src/Mod/Sketcher/App/ExternalGeometryExtension.cpp @@ -85,3 +85,20 @@ PyObject * ExternalGeometryExtension::getPyObject(void) return new ExternalGeometryExtensionPy(new ExternalGeometryExtension(*this)); } +bool ExternalGeometryExtension::getFlagsFromName(std::string str, ExternalGeometryExtension::Flag &flag) +{ + auto pos = std::find_if( ExternalGeometryExtension::flag2str.begin(), + ExternalGeometryExtension::flag2str.end(), + [str](const char * val) { + return strcmp(val,str.c_str())==0;} + ); + + if( pos != ExternalGeometryExtension::flag2str.end()) { + int index = std::distance( ExternalGeometryExtension::flag2str.begin(), pos ); + + flag = static_cast(index); + return true; + } + + return false; +} diff --git a/src/Mod/Sketcher/App/ExternalGeometryExtension.h b/src/Mod/Sketcher/App/ExternalGeometryExtension.h index d6501d829e..1877579fac 100644 --- a/src/Mod/Sketcher/App/ExternalGeometryExtension.h +++ b/src/Mod/Sketcher/App/ExternalGeometryExtension.h @@ -87,6 +87,8 @@ public: virtual const std::string& getRef() const override {return Ref;} virtual void setRef(const std::string & ref) override {Ref = ref;} + static bool getFlagsFromName(std::string str, ExternalGeometryExtension::Flag &flag); + private: ExternalGeometryExtension(const ExternalGeometryExtension&) = default; diff --git a/src/Mod/Sketcher/App/ExternalGeometryExtensionPyImp.cpp b/src/Mod/Sketcher/App/ExternalGeometryExtensionPyImp.cpp index bdf010574c..2336c5f7d2 100644 --- a/src/Mod/Sketcher/App/ExternalGeometryExtensionPyImp.cpp +++ b/src/Mod/Sketcher/App/ExternalGeometryExtensionPyImp.cpp @@ -104,15 +104,10 @@ PyObject* ExternalGeometryExtensionPy::testFlag(PyObject *args) char* flag; if (PyArg_ParseTuple(args, "s",&flag)) { - auto pos = std::find_if(getExternalGeometryExtensionPtr()->flag2str.begin(), - getExternalGeometryExtensionPtr()->flag2str.end(), - [flag](const char * val) { return strcmp(val,flag) == 0;}); + ExternalGeometryExtension::Flag flagtype; - if( pos != getExternalGeometryExtensionPtr()->flag2str.end()) { - int index = std::distance( getExternalGeometryExtensionPtr()->flag2str.begin(), pos ); - - return new_reference_to(Py::Boolean(this->getExternalGeometryExtensionPtr()->testFlag(index))); - } + if(getExternalGeometryExtensionPtr()->getFlagsFromName(flag, flagtype)) + return new_reference_to(Py::Boolean(this->getExternalGeometryExtensionPtr()->testFlag(flagtype))); PyErr_SetString(PyExc_TypeError, "Flag string does not exist."); return NULL; @@ -129,16 +124,11 @@ PyObject* ExternalGeometryExtensionPy::setFlag(PyObject *args) PyObject * bflag = Py_True; if (PyArg_ParseTuple(args, "s|O!", &flag, &PyBool_Type, &bflag)) { - auto pos = std::find_if(getExternalGeometryExtensionPtr()->flag2str.begin(), - getExternalGeometryExtensionPtr()->flag2str.end(), - [flag](const char * val) { - return strcmp(val,flag)==0;} - ); + ExternalGeometryExtension::Flag flagtype; - if( pos != getExternalGeometryExtensionPtr()->flag2str.end()) { - int index = std::distance( getExternalGeometryExtensionPtr()->flag2str.begin(), pos ); + if(getExternalGeometryExtensionPtr()->getFlagsFromName(flag, flagtype)) { - this->getExternalGeometryExtensionPtr()->setFlag(index,PyObject_IsTrue(bflag) ? true : false); + this->getExternalGeometryExtensionPtr()->setFlag(flagtype,PyObject_IsTrue(bflag) ? true : false); Py_Return; }