diff --git a/src/App/GeoFeature.cpp b/src/App/GeoFeature.cpp index fc2e766b813e..8142ec1ec1b1 100644 --- a/src/App/GeoFeature.cpp +++ b/src/App/GeoFeature.cpp @@ -27,6 +27,7 @@ #endif #include "GeoFeature.h" +#include using namespace App; @@ -58,3 +59,12 @@ const PropertyComplexGeoData* GeoFeature::getPropertyOfGeometry() const { return nullptr; } + +PyObject* GeoFeature::getPyObject(void) +{ + if (PythonObject.is(Py::_None())) { + // ref counter is set to 1 + PythonObject = Py::Object(new GeoFeaturePy(this),true); + } + return Py::new_reference_to(PythonObject); +} diff --git a/src/App/GeoFeature.h b/src/App/GeoFeature.h index 9ca50968dc37..292d63ca9d89 100644 --- a/src/App/GeoFeature.h +++ b/src/App/GeoFeature.h @@ -61,6 +61,11 @@ class AppExport GeoFeature : public App::DocumentObject * The default implementation returns null. */ virtual const PropertyComplexGeoData* getPropertyOfGeometry() const; + /** + * @brief getPyObject returns the Python binding object + * @return the Python binding object + */ + virtual PyObject* getPyObject(void); }; } //namespace App diff --git a/src/App/GeoFeaturePy.xml b/src/App/GeoFeaturePy.xml index 5874da559396..d2f165ce2a85 100644 --- a/src/App/GeoFeaturePy.xml +++ b/src/App/GeoFeaturePy.xml @@ -15,7 +15,15 @@ - returns all posible paths to the root of the document + returns all possible paths to the root of the document + + + + + Returns the property name of the actual geometry or None. +For example for a part object it returns the value Shape, +for a mesh the value Mesh and so on. +If an object has no such property then None is returned. diff --git a/src/App/GeoFeaturePyImp.cpp b/src/App/GeoFeaturePyImp.cpp index e0d7d26c4f80..9eee2ea81583 100644 --- a/src/App/GeoFeaturePyImp.cpp +++ b/src/App/GeoFeaturePyImp.cpp @@ -28,6 +28,7 @@ // inclusion of the generated files (generated out of GeoFeaturePy.xml) #include "GeoFeaturePy.h" #include "GeoFeaturePy.cpp" +#include using namespace App; @@ -37,17 +38,24 @@ std::string GeoFeaturePy::representation(void) const return std::string(""); } - - PyObject* GeoFeaturePy::getPaths(PyObject * /*args*/) { PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented"); return 0; } - - - +PyObject* GeoFeaturePy::getPropertyNameOfGeometry(PyObject * args) +{ + if (!PyArg_ParseTuple(args, "")) + return 0; + GeoFeature* object = this->getGeoFeaturePtr(); + const PropertyComplexGeoData* prop = object->getPropertyOfGeometry(); + const char* name = prop ? prop->getName() : 0; + if (name) { + return Py::new_reference_to(Py::String(std::string(name))); + } + return Py::new_reference_to(Py::None()); +} PyObject *GeoFeaturePy::getCustomAttributes(const char* /*attr*/) const { @@ -58,5 +66,3 @@ int GeoFeaturePy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/) { return 0; } - - diff --git a/src/Mod/Mesh/App/MeshFeaturePy.xml b/src/Mod/Mesh/App/MeshFeaturePy.xml index 1124f61c2321..24228d2213f8 100644 --- a/src/Mod/Mesh/App/MeshFeaturePy.xml +++ b/src/Mod/Mesh/App/MeshFeaturePy.xml @@ -1,13 +1,13 @@  diff --git a/src/Mod/Part/App/PartFeaturePy.xml b/src/Mod/Part/App/PartFeaturePy.xml index 5be039f396fe..035f3beec60b 100644 --- a/src/Mod/Part/App/PartFeaturePy.xml +++ b/src/Mod/Part/App/PartFeaturePy.xml @@ -1,22 +1,17 @@  This is the father of all shape object classes - - - test - - diff --git a/src/Mod/Part/App/PartFeaturePyImp.cpp b/src/Mod/Part/App/PartFeaturePyImp.cpp index 805787b638cb..64dd2a8c6ea4 100644 --- a/src/Mod/Part/App/PartFeaturePyImp.cpp +++ b/src/Mod/Part/App/PartFeaturePyImp.cpp @@ -46,9 +46,3 @@ int PartFeaturePy::setCustomAttributes(const char* , PyObject *) { return 0; } - -PyObject* PartFeaturePy::test(PyObject * /*args*/) -{ - PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented"); - return 0; -}