From e4e180337527d2f5efbd3720335b38b9d2e05293 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Sun, 19 Jun 2016 16:28:16 +0000 Subject: [PATCH] EgtGraphics 1.6r10 : - migliorata rotazione vista quando Top. --- EgtGraphics.rc | Bin 11612 -> 11628 bytes SceneCamera.cpp | 22 ++++++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index b14c9a3333bceab46e46bfaf22dea74987557f3d..3e20ea2df07070f5451deee7232c776c5a9c7b26 100644 GIT binary patch delta 131 zcmcZ;^(Jb=A2wz~27}Fi*#wyx4JTjZkepn=DK=R_=-lKBQgxdp&bYj PprWlTIJBxMyKw;ky`Lhi diff --git a/SceneCamera.cpp b/SceneCamera.cpp index ad2f5d7..db95998 100644 --- a/SceneCamera.cpp +++ b/SceneCamera.cpp @@ -44,7 +44,14 @@ Scene::SetCamera( double dAngVertDeg, double dAngOrizzDeg, double dDist) // assegno la direzione e la distanza m_vtDirCamera = FromSpherical( 1, dAngVertDeg, dAngOrizzDeg) ; m_dDistCamera = dDist ; - return VerifyCamera() ; + if ( ! VerifyCamera()) + return false ; + // se vista da sopra, impongo vtUp da angolo orizzontale + if ( abs( dAngVertDeg) < EPS_ANG_SMALL) { + m_vtUp = - FromPolar( 1, dAngOrizzDeg) ; + m_bUpOk = true ; + } + return true ; } //---------------------------------------------------------------------------- @@ -121,8 +128,12 @@ Scene::GetCamera( double* pdAngVertDeg, double* pdAngOrizzDeg, double* pdDist) double dAngVertDeg ; double dAngOrizzDeg ; m_vtDirCamera.ToSpherical( nullptr, &dAngVertDeg, &dAngOrizzDeg) ; - if ( fabs( dAngVertDeg) < EPS_ANG_SMALL) - dAngOrizzDeg = -90 ; + if ( fabs( dAngVertDeg) < EPS_ANG_SMALL) { + if ( m_bUpOk) + (-m_vtUp).ToSpherical( nullptr, nullptr, &dAngOrizzDeg) ; + else + dAngOrizzDeg = -90 ; + } if ( pdAngVertDeg != nullptr) *pdAngVertDeg = dAngVertDeg ; if ( pdAngOrizzDeg != nullptr) @@ -235,9 +246,6 @@ Scene::PanCamera( const Point3d& ptWinOld, const Point3d& ptWinNew) bool Scene::RotateCamera( const Point3d& ptWinOld, const Point3d& ptWinNew) { - const double MIN_ANG_VERT = 0.1 ; - const double MAX_ANG_VERT = 179.9 ; - // angoli correnti della camera double dAngVertDeg ; double dAngOrizzDeg ; @@ -248,6 +256,8 @@ Scene::RotateCamera( const Point3d& ptWinOld, const Point3d& ptWinNew) double dDeltaAngOrizzDeg = ( ptWinNew.x - ptWinOld.x) / m_nViewportW * 360 ; // calcolo nuovi angoli e limitazione dell'angolo verticale + const double MIN_ANG_VERT = 0.0 ; + const double MAX_ANG_VERT = 180.0 ; dAngVertDeg -= dDeltaAngVertDeg ; if ( dAngVertDeg < MIN_ANG_VERT) dAngVertDeg = MIN_ANG_VERT ;