From bd6dc08a1bb152ca5ee7ce20ec9d702feaef207e Mon Sep 17 00:00:00 2001 From: jriegel Date: Sun, 4 Aug 2013 19:22:17 +0200 Subject: [PATCH] Make Fem::Analyses object inheritable to python and some fixes in Material --- src/App/MaterialObject.cpp | 7 ----- src/Mod/Fem/App/AppFem.cpp | 1 + src/Mod/Fem/App/FemAnalysis.cpp | 23 +++++++++++++++++ src/Mod/Fem/App/FemAnalysis.h | 5 ++++ src/Mod/Fem/Gui/AppFemGui.cpp | 3 ++- src/Mod/Fem/Gui/ViewProviderAnalysis.cpp | 33 ++++++++++++++++-------- src/Mod/Fem/Gui/ViewProviderAnalysis.h | 9 ++++--- 7 files changed, 59 insertions(+), 22 deletions(-) diff --git a/src/App/MaterialObject.cpp b/src/App/MaterialObject.cpp index 7e2d7d6c4..bbb845a93 100644 --- a/src/App/MaterialObject.cpp +++ b/src/App/MaterialObject.cpp @@ -52,13 +52,6 @@ PROPERTY_SOURCE_TEMPLATE(App::MaterialObjectPython, App::MaterialObject) template<> const char* App::MaterialObjectPython::getViewProviderName(void) const { return "Gui::ViewProviderMaterialObjectPython"; } -template<> PyObject* App::MaterialObjectPython::getPyObject(void) { - if (PythonObject.is(Py::_None())) { - // ref counter is set to 1 - PythonObject = Py::Object(new App::DocumentObjectPy(this),true); - } - return Py::new_reference_to(PythonObject); -} /// @endcond // explicit template instantiation diff --git a/src/Mod/Fem/App/AppFem.cpp b/src/Mod/Fem/App/AppFem.cpp index d72671f40..5df3e2e79 100755 --- a/src/Mod/Fem/App/AppFem.cpp +++ b/src/Mod/Fem/App/AppFem.cpp @@ -114,6 +114,7 @@ void AppFemExport initFem() // This function is responsible for adding inherited slots from a type's base class. Fem::FemAnalysis ::init(); + Fem::FemAnalysisPython ::init(); Fem::FemMesh ::init(); Fem::FemMeshObject ::init(); Fem::FemMeshShapeObject ::init(); diff --git a/src/Mod/Fem/App/FemAnalysis.cpp b/src/Mod/Fem/App/FemAnalysis.cpp index d3fefd474..39d724000 100644 --- a/src/Mod/Fem/App/FemAnalysis.cpp +++ b/src/Mod/Fem/App/FemAnalysis.cpp @@ -66,3 +66,26 @@ void FemAnalysis::onChanged(const Property* prop) { App::DocumentObject::onChanged(prop); } + + + +// Python feature --------------------------------------------------------- + +namespace App { +/// @cond DOXERR +PROPERTY_SOURCE_TEMPLATE(Fem::FemAnalysisPython, Fem::FemAnalysis) +template<> const char* Fem::FemAnalysisPython::getViewProviderName(void) const { + return "FemGui::ViewProviderFemAnalysisPython"; +} +//template<> PyObject* Fem::FemAnalysisPython::getPyObject(void) { +// if (PythonObject.is(Py::_None())) { +// // ref counter is set to 1 +// PythonObject = Py::Object(new App::DocumentObjectPy(this),true); +// } +// return Py::new_reference_to(PythonObject); +//} +/// @endcond + +// explicit template instantiation +template class AppFemExport FeaturePythonT; +} \ No newline at end of file diff --git a/src/Mod/Fem/App/FemAnalysis.h b/src/Mod/Fem/App/FemAnalysis.h index 270d85075..c44e73bff 100644 --- a/src/Mod/Fem/App/FemAnalysis.h +++ b/src/Mod/Fem/App/FemAnalysis.h @@ -27,6 +27,8 @@ #include #include +#include + namespace Fem @@ -62,6 +64,9 @@ protected: virtual void onChanged (const App::Property* prop); }; +typedef App::FeaturePythonT FemAnalysisPython; + + } //namespace Fem diff --git a/src/Mod/Fem/Gui/AppFemGui.cpp b/src/Mod/Fem/Gui/AppFemGui.cpp index a9d4c2fe7..798384a47 100755 --- a/src/Mod/Fem/Gui/AppFemGui.cpp +++ b/src/Mod/Fem/Gui/AppFemGui.cpp @@ -77,7 +77,8 @@ void FemGuiExport initFemGui() // addition objects FemGui::Workbench ::init(); - FemGui::ViewProviderAnalysis ::init(); + FemGui::ViewProviderFemAnalysis ::init(); + FemGui::ViewProviderFemAnalysisPython ::init(); FemGui::ViewProviderFemMesh ::init(); FemGui::ViewProviderFemMeshShape ::init(); FemGui::ViewProviderFemMeshShapeNetgen ::init(); diff --git a/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp b/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp index 5f60d121d..6dd0d2767 100644 --- a/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp +++ b/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp @@ -45,21 +45,21 @@ using namespace FemGui; -PROPERTY_SOURCE(FemGui::ViewProviderAnalysis, Gui::ViewProviderDocumentObject) +PROPERTY_SOURCE(FemGui::ViewProviderFemAnalysis, Gui::ViewProviderDocumentObject) -ViewProviderAnalysis::ViewProviderAnalysis() +ViewProviderFemAnalysis::ViewProviderFemAnalysis() { } -ViewProviderAnalysis::~ViewProviderAnalysis() +ViewProviderFemAnalysis::~ViewProviderFemAnalysis() { } -bool ViewProviderAnalysis::doubleClicked(void) +bool ViewProviderFemAnalysis::doubleClicked(void) { Gui::Command::assureWorkbench("FemWorkbench"); Gui::Command::addModule(Gui::Command::Gui,"FemGui"); @@ -67,21 +67,21 @@ bool ViewProviderAnalysis::doubleClicked(void) return true; } -std::vector ViewProviderAnalysis::claimChildren(void)const +std::vector ViewProviderFemAnalysis::claimChildren(void)const { std::vector temp(static_cast(getObject())->Member.getValues()); return temp; } -//std::vector ViewProviderAnalysis::claimChildren3D(void)const +//std::vector ViewProviderFemAnalysis::claimChildren3D(void)const //{ // // //return static_cast(getObject())->Constraints.getValues(); // return std::vector (); //} -void ViewProviderAnalysis::setupContextMenu(QMenu* menu, QObject* receiver, const char* member) +void ViewProviderFemAnalysis::setupContextMenu(QMenu* menu, QObject* receiver, const char* member) { //QAction* act; //act = menu->addAction(QObject::tr("Edit pad"), receiver, member); @@ -89,7 +89,7 @@ void ViewProviderAnalysis::setupContextMenu(QMenu* menu, QObject* receiver, cons //PartGui::ViewProviderPart::setupContextMenu(menu, receiver, member); } -bool ViewProviderAnalysis::setEdit(int ModNum) +bool ViewProviderFemAnalysis::setEdit(int ModNum) { if (ModNum == ViewProvider::Default ) { //// When double-clicking on the item for this pad the @@ -128,7 +128,7 @@ bool ViewProviderAnalysis::setEdit(int ModNum) } } -void ViewProviderAnalysis::unsetEdit(int ModNum) +void ViewProviderFemAnalysis::unsetEdit(int ModNum) { if (ModNum == ViewProvider::Default) { // when pressing ESC make sure to close the dialog @@ -139,7 +139,7 @@ void ViewProviderAnalysis::unsetEdit(int ModNum) } } -bool ViewProviderAnalysis::onDelete(const std::vector &) +bool ViewProviderFemAnalysis::onDelete(const std::vector &) { //// get the support and Sketch //PartDesign::Pad* pcPad = static_cast(getObject()); @@ -157,4 +157,15 @@ bool ViewProviderAnalysis::onDelete(const std::vector &) // Gui::Application::Instance->getViewProvider(pcSupport)->show(); return true; -} \ No newline at end of file +} + +// Python feature ----------------------------------------------------------------------- + +namespace Gui { +/// @cond DOXERR +PROPERTY_SOURCE_TEMPLATE(FemGui::ViewProviderFemAnalysisPython, FemGui::ViewProviderFemAnalysis) +/// @endcond + +// explicit template instantiation +template class FemGuiExport ViewProviderPythonFeatureT; +} diff --git a/src/Mod/Fem/Gui/ViewProviderAnalysis.h b/src/Mod/Fem/Gui/ViewProviderAnalysis.h index 221bfa39f..096ee7ba5 100644 --- a/src/Mod/Fem/Gui/ViewProviderAnalysis.h +++ b/src/Mod/Fem/Gui/ViewProviderAnalysis.h @@ -26,6 +26,7 @@ #include #include +#include class SoCoordinate3; class SoDrawStyle; @@ -39,16 +40,16 @@ namespace FemGui -class FemGuiExport ViewProviderAnalysis : public Gui::ViewProviderDocumentObject +class FemGuiExport ViewProviderFemAnalysis : public Gui::ViewProviderDocumentObject { PROPERTY_HEADER(FemGui::ViewProviderAnalysis); public: /// constructor. - ViewProviderAnalysis(); + ViewProviderFemAnalysis(); /// destructor. - ~ViewProviderAnalysis(); + ~ViewProviderFemAnalysis(); virtual bool doubleClicked(void); @@ -65,6 +66,8 @@ protected: }; +typedef Gui::ViewProviderPythonFeatureT ViewProviderFemAnalysisPython; + } //namespace FemGui