From 3f8dc1a5a8588ddc90910423cef584ea835030e5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 19 Jul 2022 10:40:32 +0200 Subject: [PATCH] Gui: fix crash in ViewProviderLink::currentDraggingPlacement() if there is no active dragger --- src/Gui/ViewProviderLink.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Gui/ViewProviderLink.cpp b/src/Gui/ViewProviderLink.cpp index 851c9d8c85..205f3967d9 100644 --- a/src/Gui/ViewProviderLink.cpp +++ b/src/Gui/ViewProviderLink.cpp @@ -2874,19 +2874,25 @@ void ViewProviderLink::unsetEditViewer(Gui::View3DInventorViewer* viewer) Gui::Control().closeDialog(); } -Base::Placement ViewProviderLink::currentDraggingPlacement() const{ - assert(pcDragger); +Base::Placement ViewProviderLink::currentDraggingPlacement() const +{ + // if there isn't an active dragger return a default placement + if (!pcDragger) + return Base::Placement(); + SbVec3f v; SbRotation r; - if(useCenterballDragger) { + if (useCenterballDragger) { SoCenterballDragger *dragger = static_cast(pcDragger.get()); v = dragger->center.getValue(); r = dragger->rotation.getValue(); - }else{ + } + else { SoFCCSysDragger *dragger = static_cast(pcDragger.get()); v = dragger->translation.getValue(); r = dragger->rotation.getValue(); } + float q1,q2,q3,q4; r.getValue(q1,q2,q3,q4); return Base::Placement(Base::Vector3d(v[0],v[1],v[2]),Base::Rotation(q1,q2,q3,q4));