From c10ddae02f676fce3bb3c9667f460f3f90909769 Mon Sep 17 00:00:00 2001 From: Ian Rees Date: Tue, 29 Jul 2014 11:25:09 +1200 Subject: [PATCH] Bugs in mouse panning when viewport is "portrait" orientation --- src/Gui/NavigationStyle.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Gui/NavigationStyle.cpp b/src/Gui/NavigationStyle.cpp index 48fb8c01e..93a6b9bc9 100644 --- a/src/Gui/NavigationStyle.cpp +++ b/src/Gui/NavigationStyle.cpp @@ -616,6 +616,11 @@ void NavigationStyle::panCamera(SoCamera * cam, float aspectratio, const SbPlane // Find projection points for the last and current mouse coordinates. SbViewVolume vv = cam->getViewVolume(aspectratio); + + // See note in Coin docs for SoCamera::getViewVolume re:viewport mapping + if(aspectratio < 1.0) + vv.scale(1.0 / aspectratio); + SbLine line; vv.projectPointToLine(currpos, line); SbVec3f current_planept; @@ -639,7 +644,13 @@ void NavigationStyle::pan(SoCamera* camera) } else { const SbViewportRegion & vp = viewer->getViewportRegion(); - SbViewVolume vv = camera->getViewVolume(vp.getViewportAspectRatio()); + float aspectratio = vp.getViewportAspectRatio(); + SbViewVolume vv = camera->getViewVolume(aspectratio); + + // See note in Coin docs for SoCamera::getViewVolume re:viewport mapping + if(aspectratio < 1.0) + vv.scale(1.0 / aspectratio); + this->panningplane = vv.getPlane(camera->focalDistance.getValue()); } }