EgtGraphics 1.6r10 :

- migliorata rotazione vista quando Top.
This commit is contained in:
Dario Sassi
2016-06-19 16:28:16 +00:00
parent d35475a6c8
commit e4e1803375
2 changed files with 16 additions and 6 deletions
BIN
View File
Binary file not shown.
+16 -6
View File
@@ -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 ;