EgtGraphics 2.6b4 :
- aggiunta possibilità di un offset angolare in viste standard.
This commit is contained in:
+31
-21
@@ -83,16 +83,16 @@ Scene::SetCamera( int nDir, double dDist)
|
||||
m_vtDirCamera.Set( 0, 0, -1) ;
|
||||
break ;
|
||||
case CT_ISO_SW :
|
||||
m_vtDirCamera.Set( - SQRT1_3, - SQRT1_3, SQRT1_3) ;
|
||||
m_vtDirCamera.Set( -SQRT1_3, -SQRT1_3, SQRT1_3) ;
|
||||
break ;
|
||||
case CT_ISO_SE :
|
||||
m_vtDirCamera.Set( SQRT1_3, - SQRT1_3, SQRT1_3) ;
|
||||
m_vtDirCamera.Set( SQRT1_3, -SQRT1_3, SQRT1_3) ;
|
||||
break ;
|
||||
case CT_ISO_NE :
|
||||
m_vtDirCamera.Set( SQRT1_3, SQRT1_3, SQRT1_3) ;
|
||||
break ;
|
||||
case CT_ISO_NW :
|
||||
m_vtDirCamera.Set( - SQRT1_3, SQRT1_3, SQRT1_3) ;
|
||||
m_vtDirCamera.Set( -SQRT1_3, SQRT1_3, SQRT1_3) ;
|
||||
break ;
|
||||
case CT_CPLANE :
|
||||
m_vtDirCamera = GetGridFrame().VersZ() ;
|
||||
@@ -101,14 +101,15 @@ Scene::SetCamera( int nDir, double dDist)
|
||||
return false ;
|
||||
break ;
|
||||
}
|
||||
if ( nDir != CT_CPLANE)
|
||||
m_vtDirCamera.Rotate( Z_AX, m_nOrizzOffsCamera * ANG_RIGHT) ;
|
||||
m_dDistCamera = dDist ;
|
||||
|
||||
return VerifyCamera() ;
|
||||
return VerifyCamera( nDir != CT_CPLANE) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Scene::VerifyCamera( void)
|
||||
Scene::VerifyCamera( bool bUseOrizzOffsCamera)
|
||||
{
|
||||
// verifico il versore
|
||||
if ( ! m_vtDirCamera.Normalize())
|
||||
@@ -118,12 +119,16 @@ Scene::VerifyCamera( void)
|
||||
m_dDistCamera = STD_DIST_CAMERA ;
|
||||
else
|
||||
m_dDistCamera = max( m_dDistCamera, MIN_DIST_CAMERA) ;
|
||||
// invalido Up e ExtView
|
||||
// ricalcolo direzione Up
|
||||
m_bUpOk = false ;
|
||||
if ( ! CalcDirUp( bUseOrizzOffsCamera))
|
||||
return false ;
|
||||
// ricalcolo ExtView
|
||||
m_bExtViewOk = false ;
|
||||
if ( ! CalcExtView())
|
||||
return false ;
|
||||
// calcolo nuovi dati di Z clipping
|
||||
CalcClippingPlanesFromExtView() ;
|
||||
return true ;
|
||||
return CalcClippingPlanesFromExtView() ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -157,25 +162,27 @@ Scene::GetCamera( double* pdAngVertDeg, double* pdAngOrizzDeg, double* pdDist) c
|
||||
int
|
||||
Scene::GetCameraDir( void) const
|
||||
{
|
||||
if ( m_vtDirCamera.IsZplus())
|
||||
Vector3d vtDir = m_vtDirCamera ;
|
||||
vtDir.Rotate( Z_AX, - m_nOrizzOffsCamera * ANG_RIGHT) ;
|
||||
if ( vtDir.IsZplus())
|
||||
return CT_TOP ;
|
||||
else if ( m_vtDirCamera.IsYminus())
|
||||
else if ( vtDir.IsYminus())
|
||||
return CT_FRONT ;
|
||||
else if ( m_vtDirCamera.IsXplus())
|
||||
else if ( vtDir.IsXplus())
|
||||
return CT_RIGHT ;
|
||||
else if ( m_vtDirCamera.IsYplus())
|
||||
else if ( vtDir.IsYplus())
|
||||
return CT_BACK ;
|
||||
else if ( m_vtDirCamera.IsXminus())
|
||||
else if ( vtDir.IsXminus())
|
||||
return CT_LEFT ;
|
||||
else if ( m_vtDirCamera.IsZminus())
|
||||
else if ( vtDir.IsZminus())
|
||||
return CT_BOTTOM ;
|
||||
else if ( AreSameVectorApprox( m_vtDirCamera, Vector3d( - SQRT1_3, - SQRT1_3, SQRT1_3)))
|
||||
else if ( AreSameVectorApprox( vtDir, Vector3d( - SQRT1_3, - SQRT1_3, SQRT1_3)))
|
||||
return CT_ISO_SW ;
|
||||
else if ( AreSameVectorApprox( m_vtDirCamera, Vector3d( SQRT1_3, - SQRT1_3, SQRT1_3)))
|
||||
else if ( AreSameVectorApprox( vtDir, Vector3d( SQRT1_3, - SQRT1_3, SQRT1_3)))
|
||||
return CT_ISO_SE ;
|
||||
else if ( AreSameVectorApprox( m_vtDirCamera, Vector3d( SQRT1_3, SQRT1_3, SQRT1_3)))
|
||||
else if ( AreSameVectorApprox( vtDir, Vector3d( SQRT1_3, SQRT1_3, SQRT1_3)))
|
||||
return CT_ISO_NE ;
|
||||
else if ( AreSameVectorApprox( m_vtDirCamera, Vector3d( - SQRT1_3, SQRT1_3, SQRT1_3)))
|
||||
else if ( AreSameVectorApprox( vtDir, Vector3d( - SQRT1_3, SQRT1_3, SQRT1_3)))
|
||||
return CT_ISO_NW ;
|
||||
else
|
||||
return CT_NONE ;
|
||||
@@ -194,7 +201,7 @@ Scene::GetProjectedCenter( void) const
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Scene::CalcDirUp( void)
|
||||
Scene::CalcDirUp( bool bUseOrizzOffsCamera)
|
||||
{
|
||||
// verifico se il calcolo è necessario
|
||||
if ( m_bUpOk)
|
||||
@@ -202,8 +209,11 @@ Scene::CalcDirUp( void)
|
||||
// direzione perpendicolare giacente nel piano XY
|
||||
// ( m_vtDirCamera è opposta alla direzione in cui si guarda)
|
||||
Vector3d vtPerpXY = m_vtDirCamera ^ Z_AX ;
|
||||
if ( ! vtPerpXY.Normalize())
|
||||
if ( ! vtPerpXY.Normalize()) {
|
||||
vtPerpXY = -X_AX ;
|
||||
if ( bUseOrizzOffsCamera)
|
||||
vtPerpXY.Rotate( Z_AX, m_nOrizzOffsCamera * ANG_RIGHT) ;
|
||||
}
|
||||
// direzione Up
|
||||
m_vtUp = vtPerpXY ^ m_vtDirCamera ;
|
||||
m_bUpOk = m_vtUp.Normalize() ;
|
||||
|
||||
Reference in New Issue
Block a user