Gui: fix visibility of front nodes when moving an object to Part container

This commit is contained in:
wmayer
2022-05-27 17:29:35 +02:00
committed by Uwe
parent 37cd94e4e4
commit 66819f82fd
3 changed files with 29 additions and 1 deletions

View File

@@ -2413,6 +2413,8 @@ void Document::handleChildren3D(ViewProvider* viewProvider, bool deleting)
if (viewProvider && viewProvider->getChildRoot()) {
std::vector<App::DocumentObject*> 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<int>(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<App::DocumentObject*>::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<Gui::BaseView*>::iterator vIt = d->baseViews.begin();vIt != d->baseViews.end();++vIt) {
View3DInventor *activeView = dynamic_cast<View3DInventor *>(*vIt);

View File

@@ -24,6 +24,10 @@
#include "PreCompiled.h"
#ifndef _PreComp_
#include <Inventor/nodes/SoSeparator.h>
#endif
#include <App/DocumentObject.h>
#include <App/GeoFeatureGroupExtension.h>
@@ -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;
}

View File

@@ -42,7 +42,9 @@ public:
virtual std::vector<App::DocumentObject*> 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<std::string> extensionGetDisplayModes(void) const override;
@@ -60,6 +62,8 @@ public:
virtual void extensionUpdateData(const App::Property*) override;
protected:
SoSeparator *pcGroupFront;
SoSeparator *pcGroupBack;
SoGroup *pcGroupChildren;
};