From 6fdecb93de1c392e028d0dcf8fd95fe89f2106fc Mon Sep 17 00:00:00 2001 From: Sergo Date: Sat, 3 Dec 2016 23:16:42 -0500 Subject: [PATCH] fixes #0002633 - body disappear if dragged out of Part container --- src/Gui/Document.cpp | 18 ++++++++++++++++++ src/Gui/Tree.cpp | 10 ++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index a8bbe86b6a..82df71cb17 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -62,6 +62,7 @@ #include "View3DInventorViewer.h" #include "BitmapFactory.h" #include "ViewProviderDocumentObject.h" +#include "ViewProviderDocumentObjectGroup.h" #include "Selection.h" #include "WaitCursor.h" #include "Thumbnail.h" @@ -1476,5 +1477,22 @@ void Document::handleChildren3D(ViewProvider* viewProvider) } } } + } else if (viewProvider && viewProvider->isDerivedFrom(ViewProviderDocumentObjectGroup::getClassTypeId())) { + + ViewProviderDocumentObject* vp = static_cast(viewProvider); + auto* ext = vp->getObject()->getExtensionByType(); + std::vector children = ext->getObjects(); + + for (auto& child : children) { + ViewProvider* ChildViewProvider = getViewProvider(child); + if (ChildViewProvider) { + for (BaseView* view : d->baseViews) { + View3DInventor *activeView = dynamic_cast(view); + if (activeView && !activeView->getViewer()->hasViewProvider(ChildViewProvider)) { + activeView->getViewer()->addViewProvider(ChildViewProvider); + } + } + } + } } } diff --git a/src/Gui/Tree.cpp b/src/Gui/Tree.cpp index c1e5a73731..6e36f08e84 100644 --- a/src/Gui/Tree.cpp +++ b/src/Gui/Tree.cpp @@ -53,6 +53,8 @@ #include "MenuManager.h" #include "Application.h" #include "MainWindow.h" +#include "View3DInventor.h" +#include "View3DInventorViewer.h" using namespace Gui; @@ -634,6 +636,14 @@ void TreeWidget::dropEvent(QDropEvent *event) Gui::ViewProvider* vpp = static_cast(parent)->object(); vpp->dragObject(obj); } + + std::list baseViews = gui->getMDIViews(); + for (MDIView* view : baseViews) { + View3DInventor *activeView = dynamic_cast(view); + if (activeView && !activeView->getViewer()->hasViewProvider(vpc)) { + activeView->getViewer()->addViewProvider(vpc); + } + } } gui->commitCommand(); }