EgtGeomKernel :

- a Frame3d aggiunto Set con angolidi eulero (CAC')
- corretta geometria da disegnare per vettore nullo
- ObjUser ora ha anche puntatore a GeomDB.
This commit is contained in:
Dario Sassi
2015-05-31 14:04:45 +00:00
parent dc29bb23af
commit b5e1e40a05
8 changed files with 54 additions and 20 deletions
+24 -8
View File
@@ -204,6 +204,23 @@ Frame3d::Set( const Point3d& ptOrig, Type nType)
return ( m_nType != ERR) ;
}
//----------------------------------------------------------------------------
bool
Frame3d::Set( const Point3d& ptOrig, double dAngCDeg, double dAngADeg, double dAngC1Deg)
{
// imposto riferimento identità
Reset() ;
// rotazioni attorno ad assi fissi, quindi in ordine inverso
Rotate( ORIG, Z_AX, dAngC1Deg) ;
Rotate( ORIG, X_AX, dAngADeg) ;
Rotate( ORIG, Z_AX, dAngCDeg) ;
// imposto l'origine
m_ptOrig = ptOrig ;
// ne determino il tipo
CalculateType() ;
return true ;
}
//----------------------------------------------------------------------------
bool
Frame3d::Reset( void)
@@ -505,30 +522,29 @@ Frame3d::CalculateType( void)
bool
Frame3d::GetRotationsCAC1( double& dAngCDeg, double& dAngADeg, double& dAngC1Deg) const
{
bool bDet ;
double dAngVertDeg ;
double dAngOrizzDeg ;
Vector3d vtXnoC1 ;
// verifico validità riferimento
if ( m_nType == ERR)
return false ;
// calcolo angoli sferici del versore Z
double dAngVertDeg, dAngOrizzDeg ;
m_vtVersZ.ToSpherical( nullptr, &dAngVertDeg, &dAngOrizzDeg) ;
dAngADeg = dAngVertDeg ;
// ricavo la prima rotazione attorno a Z
if ( dAngADeg > EPS_ANG_SMALL)
if ( dAngADeg > EPS_ANG_SMALL) {
dAngCDeg = dAngOrizzDeg + ANG_RIGHT ;
if ( dAngCDeg >= ANG_FULL)
dAngCDeg -= ANG_FULL ;
}
else
m_vtVersX.ToSpherical( nullptr, nullptr, &dAngCDeg) ;
// calcolo l'asse X senza la rotazione attorno a C'
vtXnoC1 = FromPolar( 1, dAngCDeg) ;
Vector3d vtXnoC1 = FromPolar( 1, dAngCDeg) ;
// calcolo la rotazione attorno a C'
bool bDet ;
if ( ! vtXnoC1.GetRotation( m_vtVersX, m_vtVersZ, dAngC1Deg, bDet) || ! bDet)
dAngC1Deg = 0 ;