From b4a569e013860493a3361cd2c05db3ac0db885db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Thu, 22 Dec 2016 17:18:50 +0100 Subject: [PATCH] PartDesign: Change body viewprovider to group --- src/Mod/Part/App/BodyBase.cpp | 2 + src/Mod/PartDesign/App/Body.cpp | 16 -------- src/Mod/PartDesign/Gui/ViewProviderBody.cpp | 45 ++++++++++++++++----- src/Mod/PartDesign/Gui/ViewProviderBody.h | 11 +++-- 4 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/Mod/Part/App/BodyBase.cpp b/src/Mod/Part/App/BodyBase.cpp index bee0fe71a..789fe43c8 100644 --- a/src/Mod/Part/App/BodyBase.cpp +++ b/src/Mod/Part/App/BodyBase.cpp @@ -41,6 +41,8 @@ BodyBase::BodyBase() { ADD_PROPERTY(Tip , (0) ); ADD_PROPERTY(BaseFeature , (0) ); + + App::OriginGroupExtension::initExtension(this); } BodyBase* BodyBase::findBodyOf(const App::DocumentObject* f) diff --git a/src/Mod/PartDesign/App/Body.cpp b/src/Mod/PartDesign/App/Body.cpp index 81fb3239e..861eadc44 100644 --- a/src/Mod/PartDesign/App/Body.cpp +++ b/src/Mod/PartDesign/App/Body.cpp @@ -439,26 +439,10 @@ void Body::onChanged (const App::Property* prop) { } void Body::setupObject () { - // NOTE: the code shared with App::OriginGroup - App::Document *doc = getDocument (); - - std::string objName = std::string ( getNameInDocument() ).append ( "Origin" ); - - App::DocumentObject *originObj = doc->addObject ( "App::Origin", objName.c_str () ); - - assert ( originObj && originObj->isDerivedFrom ( App::Origin::getClassTypeId () ) ); - Origin.setValue ( originObj ); - Part::BodyBase::setupObject (); } void Body::unsetupObject () { - App::DocumentObject *origin = Origin.getValue (); - - if (origin && !origin->isDeleting ()) { - origin->getDocument ()->remObject (origin->getNameInDocument()); - } - Part::BodyBase::unsetupObject (); } diff --git a/src/Mod/PartDesign/Gui/ViewProviderBody.cpp b/src/Mod/PartDesign/Gui/ViewProviderBody.cpp index c5a99e69e..4ec62cbce 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBody.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderBody.cpp @@ -61,22 +61,20 @@ using namespace PartDesignGui; const char* PartDesignGui::ViewProviderBody::BodyModeEnum[] = {"Through","Tip",NULL}; -PROPERTY_SOURCE(PartDesignGui::ViewProviderBody,PartGui::ViewProviderPart) +PROPERTY_SOURCE_WITH_EXTENSIONS(PartDesignGui::ViewProviderBody,PartGui::ViewProviderPart) ViewProviderBody::ViewProviderBody() { ADD_PROPERTY(DisplayModeBody,((long)0)); DisplayModeBody.setEnums(BodyModeEnum); - - pcBodyChildren = new SoSeparator(); - pcBodyChildren->ref(); sPixmap = "PartDesign_Body_Tree.svg"; + + Gui::ViewProviderOriginGroupExtension::initExtension(this); } ViewProviderBody::~ViewProviderBody() { - pcBodyChildren->unref (); connectChangedObjectApp.disconnect(); connectChangedObjectGui.disconnect(); } @@ -85,9 +83,9 @@ void ViewProviderBody::attach(App::DocumentObject *pcFeat) { // call parent attach method ViewProviderPart::attach(pcFeat); - - addDisplayMaskMode(pcBodyChildren, "Through"); - setDisplayMaskMode("Through"); + + //set default display mode + onChanged(&DisplayModeBody); App::Document *adoc = pcObject->getDocument (); Gui::Document *gdoc = Gui::Application::Instance->getDocument ( adoc ) ; @@ -217,26 +215,47 @@ std::vector ViewProviderBody::claimChildren(void)const std::vector ViewProviderBody::claimChildren3D(void)const + { + PartDesign::Body* body = static_cast(getObject()); + + const std::vector & features = body->Group.getValues(); + + std::vector rv; + + if ( body->Origin.getValue() ) { // Add origin + rv.push_back (body->Origin.getValue()); + } + if ( body->BaseFeature.getValue() ) { // Add Base Feature + rv.push_back (body->BaseFeature.getValue()); + } + + // Add all other stuff + std::copy (features.begin(), features.end(), std::back_inserter (rv) ); + + return rv; + } + + // TODO To be deleted (2015-09-08, Fat-Zer) //void ViewProviderBody::updateTree() //{ @@ -408,7 +427,7 @@ void ViewProviderBody::onChanged(const App::Property* prop) { ViewProvider::setOverrideMode("As Is"); overrideMode = mode; } - setDisplayMaskMode("Through"); + setDisplayMaskMode("Group"); } else { if(getOverrideMode() == "As Is") @@ -463,3 +482,11 @@ void ViewProviderBody::setVisualBodyMode(bool bodymode) { } } +std::vector< std::string > ViewProviderBody::getDisplayModes(void) const { + + //we get all dislay modes and remove the "Group" mode, as this is what we use for "Through" + //body display mode + std::vector< std::string > modes = ViewProviderPart::getDisplayModes(); + modes.erase(modes.begin()); + return modes; +} diff --git a/src/Mod/PartDesign/Gui/ViewProviderBody.h b/src/Mod/PartDesign/Gui/ViewProviderBody.h index f6fcc7f52..00e5aa5c0 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBody.h +++ b/src/Mod/PartDesign/Gui/ViewProviderBody.h @@ -25,6 +25,7 @@ #define PARTGUI_ViewProviderBody_H #include +#include #include class SoGroup; @@ -39,10 +40,10 @@ namespace PartDesignGui { * If the Body is not active it shows only the result shape (tip). * \author jriegel */ -class PartDesignGuiExport ViewProviderBody : public PartGui::ViewProviderPart +class PartDesignGuiExport ViewProviderBody : public PartGui::ViewProviderPart, public Gui::ViewProviderOriginGroupExtension { Q_DECLARE_TR_FUNCTIONS(PartDesignGui::ViewProviderBody) - PROPERTY_HEADER(PartDesignGui::ViewProviderBody); + PROPERTY_HEADER_WITH_EXTENSIONS(PartDesignGui::ViewProviderBody); public: /// constructor @@ -59,8 +60,9 @@ public: virtual std::vector claimChildren(void)const; // returns the root node where the children gets collected(3D) - virtual SoGroup* getChildRoot(void) const {return pcBodyChildren;} virtual std::vector claimChildren3D(void)const; + + virtual std::vector< std::string > getDisplayModes(void) const; virtual void setDisplayMode(const char* ModeName); virtual void setOverrideMode(const std::string& mode); @@ -89,9 +91,6 @@ protected: /// Set Feature viewprovider into visual body mode void setVisualBodyMode(bool bodymode); private: - /// group used to store children collected by claimChildren3D() in the through (edit) mode. - SoGroup *pcBodyChildren; - static const char* BodyModeEnum[]; boost::signals::connection connectChangedObjectApp;