From 29f3f0cfc236088d05f310d923b1b0dbf28d7181 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 11 Aug 2014 14:56:30 +0200 Subject: [PATCH] + do not apply corrupted transformation (NaN) from SoCenterballManip --- src/Gui/ViewProviderGeometryObject.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Gui/ViewProviderGeometryObject.cpp b/src/Gui/ViewProviderGeometryObject.cpp index 6da49ea28..348a33b8b 100644 --- a/src/Gui/ViewProviderGeometryObject.cpp +++ b/src/Gui/ViewProviderGeometryObject.cpp @@ -52,6 +52,7 @@ #include "Document.h" #include "Window.h" +#include #include #include #include @@ -62,6 +63,7 @@ #endif #include "SoNavigationDragger.h" #include "SoFCUnifiedSelection.h" +#include using namespace Gui; @@ -190,6 +192,7 @@ void ViewProviderGeometryObject::updateData(const App::Property* prop) pcTransform->rotation.setValue(q0,q1,q2,q3); pcTransform->translation.setValue(px,py,pz); pcTransform->center.setValue(0.0f,0.0f,0.0f); + pcTransform->scaleFactor.setValue(1.0f,1.0f,1.0f); } } @@ -445,6 +448,12 @@ void ViewProviderGeometryObject::dragMotionCallback(void * data, SoDragger * d) SbVec3f center = manip->center.getValue(); manip->rotation.getValue().getValue(q0, q1, q2, q3); + // it can happen that the values of the motion matrix is garbage + if (boost::math::isnan(q0)) { + Base::Console().Warning("NaN values received in ViewProviderGeometryObject::dragMotionCallback\n"); + return; + } + // get the placement ViewProviderGeometryObject* view = reinterpret_cast(data); if (view && view->pcObject && view->pcObject->getTypeId().isDerivedFrom(App::GeoFeature::getClassTypeId())) {