From 252865d43f2a934d26bbe9b51edbbe208c92f0b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Mon, 9 Nov 2015 06:25:42 +0100 Subject: [PATCH] Active view may not be 3d viewer When for example the spreadsheet is open and an recompute is issued, the active view is not the 3d viewer which leads to crash if used for scene graph calculations. --- src/Gui/ViewProviderOriginGroup.cpp | 11 ++++++++++- src/Mod/PartDesign/Gui/ViewProviderBody.cpp | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Gui/ViewProviderOriginGroup.cpp b/src/Gui/ViewProviderOriginGroup.cpp index 431d2d1a71..cd24b299c5 100644 --- a/src/Gui/ViewProviderOriginGroup.cpp +++ b/src/Gui/ViewProviderOriginGroup.cpp @@ -148,7 +148,16 @@ void ViewProviderOriginGroup::updateOriginSize () { return; } - View3DInventorViewer* viewer = static_cast(this->getActiveView())->getViewer(); + + Gui::Document* gdoc = Gui::Application::Instance->getDocument(getObject()->getDocument()); + if(!gdoc) + return; + + Gui::MDIView* view = gdoc->getViewOfViewProvider(this); + if(!view) + return; + + Gui::View3DInventorViewer* viewer = static_cast(view)->getViewer(); SoGetBoundingBoxAction bboxAction(viewer->getSoRenderManager()->getViewportRegion()); // calculate the bounding box for out content diff --git a/src/Mod/PartDesign/Gui/ViewProviderBody.cpp b/src/Mod/PartDesign/Gui/ViewProviderBody.cpp index aab5fec62a..4399e86636 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderBody.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderBody.cpp @@ -307,8 +307,17 @@ void ViewProviderBody::slotChangedObjectGui ( void ViewProviderBody::updateOriginDatumSize () { PartDesign::Body *body = static_cast ( getObject() ); + // Use different bounding boxes for datums and for origins: - Gui::View3DInventorViewer* viewer = static_cast(this->getActiveView())->getViewer(); + Gui::Document* gdoc = Gui::Application::Instance->getDocument(getObject()->getDocument()); + if(!gdoc) + return; + + Gui::MDIView* view = gdoc->getViewOfViewProvider(this); + if(!view) + return; + + Gui::View3DInventorViewer* viewer = static_cast(view)->getViewer(); SoGetBoundingBoxAction bboxAction(viewer->getSoRenderManager()->getViewportRegion()); const auto & model = body->getFullModel ();