diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 198e2041ef..d6e7f88616 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -2413,6 +2413,8 @@ void Document::handleChildren3D(ViewProvider* viewProvider, bool deleting) if (viewProvider && viewProvider->getChildRoot()) { std::vector children = viewProvider->claimChildren3D(); SoGroup* childGroup = viewProvider->getChildRoot(); + SoGroup* frontGroup = viewProvider->getFrontRoot(); + SoGroup* backGroup = viewProvider->getFrontRoot(); // size not the same -> build up the list new if (deleting || childGroup->getNumChildren() != static_cast(children.size())) { @@ -2425,6 +2427,8 @@ void Document::handleChildren3D(ViewProvider* viewProvider, bool deleting) } Gui::coinRemoveAllChildren(childGroup); + Gui::coinRemoveAllChildren(frontGroup); + Gui::coinRemoveAllChildren(backGroup); if(!deleting) { for (std::vector::iterator it=children.begin();it!=children.end();++it) { @@ -2436,6 +2440,14 @@ void Document::handleChildren3D(ViewProvider* viewProvider, bool deleting) SoSeparator* childRootNode = ChildViewProvider->getRoot(); childGroup->addChild(childRootNode); + SoSeparator* childFrontNode = ChildViewProvider->getFrontRoot(); + if (frontGroup && childFrontNode) + frontGroup->addChild(childFrontNode); + + SoSeparator* childBackNode = ChildViewProvider->getBackRoot(); + if (backGroup && childBackNode) + backGroup->addChild(childBackNode); + // cycling to all views of the document to remove the viewprovider from the viewer itself for (std::list::iterator vIt = d->baseViews.begin();vIt != d->baseViews.end();++vIt) { View3DInventor *activeView = dynamic_cast(*vIt); diff --git a/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp b/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp index d52f8ceef4..ffff8894bf 100644 --- a/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp +++ b/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp @@ -24,6 +24,10 @@ #include "PreCompiled.h" +#ifndef _PreComp_ +#include +#endif + #include #include @@ -43,12 +47,20 @@ ViewProviderGeoFeatureGroupExtension::ViewProviderGeoFeatureGroupExtension() pcGroupChildren = new SoFCSelectionRoot; pcGroupChildren->ref(); + pcGroupFront = new SoSeparator(); + pcGroupFront->ref(); + pcGroupBack = new SoSeparator(); + pcGroupBack->ref(); } ViewProviderGeoFeatureGroupExtension::~ViewProviderGeoFeatureGroupExtension() { pcGroupChildren->unref(); pcGroupChildren = nullptr; + pcGroupFront->unref(); + pcGroupFront = nullptr; + pcGroupBack->unref(); + pcGroupBack = nullptr; } diff --git a/src/Gui/ViewProviderGeoFeatureGroupExtension.h b/src/Gui/ViewProviderGeoFeatureGroupExtension.h index d335480a42..8a09fd2246 100644 --- a/src/Gui/ViewProviderGeoFeatureGroupExtension.h +++ b/src/Gui/ViewProviderGeoFeatureGroupExtension.h @@ -42,7 +42,9 @@ public: virtual std::vector extensionClaimChildren3D(void)const override; virtual std::vector< App::DocumentObject* > extensionClaimChildren(void) const override; - virtual SoGroup* extensionGetChildRoot(void) const override {return pcGroupChildren;}; + virtual SoSeparator* extensionGetFrontRoot() const override {return pcGroupFront;} + virtual SoSeparator* extensionGetBackRoot() const override {return pcGroupBack;} + virtual SoGroup* extensionGetChildRoot(void) const override {return pcGroupChildren;} virtual void extensionAttach(App::DocumentObject* pcObject) override; virtual void extensionSetDisplayMode(const char* ModeName) override; virtual std::vector extensionGetDisplayModes(void) const override; @@ -60,6 +62,8 @@ public: virtual void extensionUpdateData(const App::Property*) override; protected: + SoSeparator *pcGroupFront; + SoSeparator *pcGroupBack; SoGroup *pcGroupChildren; };