Prevent ViewProvider at toplevel when adding object to Group in GeoFeatureGroup

This commit is contained in:
Stefan Tröger
2017-08-05 11:34:51 +02:00
committed by wmayer
parent d92b631dad
commit fa273f7307
2 changed files with 2 additions and 41 deletions

View File

@@ -1494,6 +1494,7 @@ void Document::handleChildren3D(ViewProvider* viewProvider)
for (std::list<Gui::BaseView*>::iterator vIt = d->baseViews.begin();vIt != d->baseViews.end();++vIt) {
View3DInventor *activeView = dynamic_cast<View3DInventor *>(*vIt);
if (activeView && activeView->getViewer()->hasViewProvider(ChildViewProvider)) {
// @Note hasViewProvider()
// remove the viewprovider serves the purpose of detaching the inventor nodes from the
// top level root in the viewer. However, if some of the children were grouped beneath the object
@@ -1506,24 +1507,7 @@ void Document::handleChildren3D(ViewProvider* viewProvider)
}
}
}
} else if (viewProvider && viewProvider->isDerivedFrom(ViewProviderDocumentObjectGroup::getClassTypeId())) {
if (viewProvider->hasExtension(ViewProviderDocumentObjectGroup::getExtensionClassTypeId())) {
std::vector<App::DocumentObject*> children = viewProvider->claimChildren();
for (auto& child : children) {
ViewProvider* ChildViewProvider = getViewProvider(child);
if (ChildViewProvider) {
for (BaseView* view : d->baseViews) {
View3DInventor *activeView = dynamic_cast<View3DInventor *>(view);
if (activeView && !activeView->getViewer()->hasViewProvider(ChildViewProvider)) {
activeView->getViewer()->addViewProvider(ChildViewProvider);
}
}
}
}
}
}
}
//find all unclaimed viewproviders and add them back to the document (this happens if a
//viewprovider has been claimed before, but the object droped it.

View File

@@ -643,29 +643,6 @@ void TreeWidget::dropEvent(QDropEvent *event)
Gui::ViewProvider* vpp = static_cast<DocumentObjectItem *>(parent)->object();
vpp->dragObject(obj);
}
//make sure it is not part of a geofeaturegroup anymore. When this has happen we need to handle
//all removed objects
std::vector<Gui::ViewProvider*> vps = {vpc};
auto grp = App::GeoFeatureGroupExtension::getGroupOfObject(obj);
if(grp) {
auto removed = grp->getExtensionByType<App::GeoFeatureGroupExtension>()->removeObject(obj);
for(auto o : removed) {
auto remvp = gui->getViewProvider(o);
if(remvp)
vps.push_back(remvp);
}
}
for(auto vp : vps) {
std::list<MDIView*> baseViews = gui->getMDIViews();
for (MDIView* view : baseViews) {
View3DInventor *activeView = dynamic_cast<View3DInventor *>(view);
if (activeView && !activeView->getViewer()->hasViewProvider(vp)) {
activeView->getViewer()->addViewProvider(vp);
}
}
}
}
gui->commitCommand();
}