diff --git a/src/Gui/ViewProviderPyImp.cpp b/src/Gui/ViewProviderPyImp.cpp index ca40ca0e7..5c2522465 100644 --- a/src/Gui/ViewProviderPyImp.cpp +++ b/src/Gui/ViewProviderPyImp.cpp @@ -245,14 +245,35 @@ PyObject* ViewProviderPy::setTransformation(PyObject *args) return 0; } -PyObject *ViewProviderPy::getCustomAttributes(const char*) const +PyObject *ViewProviderPy::getCustomAttributes(const char* attr) const { - return 0; + // search for dynamic property + App::Property* prop = getViewProviderPtr()->getDynamicPropertyByName(attr); + if (prop) + return prop->getPyObject(); + else + return 0; } -int ViewProviderPy::setCustomAttributes(const char*, PyObject *) +int ViewProviderPy::setCustomAttributes(const char* attr, PyObject* value) { - return 0; + // search for dynamic property + try { + App::Property* prop = getViewProviderPtr()->getDynamicPropertyByName(attr); + if (prop) { + prop->setPyObject(value); + return 1; + } + return 0; + } + catch (Base::Exception &exc) { + PyErr_Format(PyExc_AttributeError, "Attribute (Name: %s) error: '%s' ", attr, exc.what()); + return -1; + } + catch (...) { + PyErr_Format(PyExc_AttributeError, "Unknown error in attribute %s", attr); + return -1; + } } Py::Object ViewProviderPy::getAnnotation(void) const diff --git a/src/Gui/ViewProviderPythonFeaturePyImp.cpp b/src/Gui/ViewProviderPythonFeaturePyImp.cpp index d8d533844..3fe07ae43 100644 --- a/src/Gui/ViewProviderPythonFeaturePyImp.cpp +++ b/src/Gui/ViewProviderPythonFeaturePyImp.cpp @@ -41,43 +41,10 @@ std::string ViewProviderPythonFeaturePy::representation(void) const PyObject *ViewProviderPythonFeaturePy::getCustomAttributes(const char* attr) const { - PY_TRY{ - if (Base::streq(attr, "__dict__")){ - PyObject* dict = ViewProviderDocumentObjectPy::getCustomAttributes(attr); - if (dict){ - std::vector Props = getViewProviderPythonFeaturePtr()->getDynamicPropertyNames(); - for (std::vector::const_iterator it = Props.begin(); it != Props.end(); ++it) - PyDict_SetItem(dict, PyString_FromString(it->c_str()), PyString_FromString("")); - } - return dict; - } - - // search for dynamic property - App::Property* prop = getViewProviderPythonFeaturePtr()->getDynamicPropertyByName(attr); - if (prop) return prop->getPyObject(); - } PY_CATCH; - return 0; } int ViewProviderPythonFeaturePy::setCustomAttributes(const char* attr, PyObject *value) { - // search for dynamic property - App::Property* prop = getViewProviderPythonFeaturePtr()->getDynamicPropertyByName(attr); - - if (!prop) - return ViewProviderDocumentObjectPy::setCustomAttributes(attr, value); - else { - try { - prop->setPyObject(value); - } catch (Base::Exception &exc) { - PyErr_Format(PyExc_AttributeError, "Attribute (Name: %s) error: '%s' ", attr, exc.what()); - return -1; - } catch (...) { - PyErr_Format(PyExc_AttributeError, "Unknown error in attribute %s", attr); - return -1; - } - - return 1; - } + return 0; }