From 28965457aa1e33d7e3427c9f117acd5ec5ee43d2 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 431d2d1a7..cd24b299c 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 aab5fec62..4399e8663 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 ();