From eeb7dd458a7da274bf79d8d8a58f26609c007aef Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 20 Jan 2017 15:42:50 +0100 Subject: [PATCH] spend own type for Python wrappers of FeaturePrimitive and BodyBase --- src/Mod/Part/App/BodyBase.cpp | 10 ++++++++++ src/Mod/Part/App/BodyBase.h | 1 + src/Mod/PartDesign/App/FeaturePrimitive.cpp | 15 +++++++++++++++ src/Mod/PartDesign/App/FeaturePrimitive.h | 5 +++-- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/Mod/Part/App/BodyBase.cpp b/src/Mod/Part/App/BodyBase.cpp index 789fe43c81d0..462f3588fbda 100644 --- a/src/Mod/Part/App/BodyBase.cpp +++ b/src/Mod/Part/App/BodyBase.cpp @@ -25,6 +25,7 @@ #ifndef _PreComp_ #endif +#include #include #include #include @@ -98,4 +99,13 @@ void BodyBase::onChanged (const App::Property* prop) { Part::Feature::onChanged ( prop ); } +PyObject* BodyBase::getPyObject() +{ + if (PythonObject.is(Py::_None())){ + // ref counter is set to 1 + PythonObject = Py::Object(new BodyBasePy(this),true); + } + return Py::new_reference_to(PythonObject); +} + } /* Part */ diff --git a/src/Mod/Part/App/BodyBase.h b/src/Mod/Part/App/BodyBase.h index cf9675bfb298..6c1584c05c18 100644 --- a/src/Mod/Part/App/BodyBase.h +++ b/src/Mod/Part/App/BodyBase.h @@ -78,6 +78,7 @@ class PartExport BodyBase : public Part::Feature, public App::OriginGroupExtensi * TODO introduce a findBodiesOf() if needed (2015-08-04, Fat-Zer) */ static BodyBase* findBodyOf(const App::DocumentObject* f); + virtual PyObject* getPyObject(); protected: /// If BaseFeature is getting changed and Tip points to it resets the Tip diff --git a/src/Mod/PartDesign/App/FeaturePrimitive.cpp b/src/Mod/PartDesign/App/FeaturePrimitive.cpp index c35530f66263..1fbcabe29322 100644 --- a/src/Mod/PartDesign/App/FeaturePrimitive.cpp +++ b/src/Mod/PartDesign/App/FeaturePrimitive.cpp @@ -30,10 +30,13 @@ #include "DatumPoint.h" #include "DatumCS.h" #include +#include #include #include #include #include +#include + #include #include #include @@ -152,6 +155,18 @@ void FeaturePrimitive::onChanged(const App::Property* prop) FeatureAddSub::onChanged(prop); } +PYTHON_TYPE_DEF(PrimitivePy, Part::PartFeaturePy) +PYTHON_TYPE_IMP(PrimitivePy, Part::PartFeaturePy) + +PyObject* FeaturePrimitive::getPyObject() +{ + if (PythonObject.is(Py::_None())){ + // ref counter is set to 1 + PythonObject = Py::Object(new PrimitivePy(this),true); + } + return Py::new_reference_to(PythonObject); +} + PROPERTY_SOURCE(PartDesign::Box, PartDesign::FeaturePrimitive) Box::Box() diff --git a/src/Mod/PartDesign/App/FeaturePrimitive.h b/src/Mod/PartDesign/App/FeaturePrimitive.h index 2f5a9c98c3fa..9cbaa498f0c1 100644 --- a/src/Mod/PartDesign/App/FeaturePrimitive.h +++ b/src/Mod/PartDesign/App/FeaturePrimitive.h @@ -54,14 +54,15 @@ class PartDesignExport FeaturePrimitive : public PartDesign::FeatureAddSub, publ virtual const char* getViewProviderName(void) const { return "PartDesignGui::ViewProviderPrimitive"; } - Type getPrimitiveType() {return primitiveType;}; + Type getPrimitiveType() {return primitiveType;} TopoDS_Shape refineShapeIfActive(const TopoDS_Shape& oldShape) const; virtual void onChanged(const App::Property* prop); + virtual PyObject* getPyObject(); /// Do nothing, just to suppress warning, must be redefined in derived classes virtual App::DocumentObjectExecReturn* execute() { return PartDesign::FeatureAddSub::execute(); - }; + } protected: //make the boolean ops with the primitives provided by the derived features App::DocumentObjectExecReturn* execute(const TopoDS_Shape& primitiveShape);