EgtGeomKernel 1.4a3 : Migliorata gestione gruppi, aggiunti GdbIterator, GeoFrame3d e IdManager.

This commit is contained in:
Dario Sassi
2013-12-05 07:33:42 +00:00
parent 19e382b435
commit 8e9bc9169c
25 changed files with 1095 additions and 144 deletions
+41 -8
View File
@@ -176,17 +176,16 @@ Frame3d::Translate( const Vector3d& vtMove)
bool
Frame3d::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngRad)
{
double dCosAng ;
double dSinAng ;
return Rotate( ptAx, vtAx, cos( dAngRad), sin( dAngRad)) ;
}
//----------------------------------------------------------------------------
bool
Frame3d::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng)
{
// verifico validità riferimento
if ( m_nType == ERR)
return false ;
// calcolo seno e coseno dell'angolo di rotazione
dCosAng = cos( dAngRad) ;
dSinAng = sin( dAngRad) ;
// controllo solo la prima rotazione, per le altre è lo stesso
if ( ! m_ptOrig.Rotate( ptAx, vtAx, dCosAng, dSinAng)) {
@@ -208,7 +207,7 @@ Frame3d::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngRad)
bool
Frame3d::ToGlob( const Frame3d& frRef)
{
// verifico validità deu frame
// verifico validità del frame
if ( GetType() == ERR || frRef.GetType() == ERR)
return false ;
@@ -303,3 +302,37 @@ Frame3d::CalculateType( void)
m_nType = GEN ;
}
}
//----------------------------------------------------------------------------
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
m_vtVersZ.ToSpherical( nullptr, &dAngVertDeg, &dAngOrizzDeg) ;
dAngADeg = dAngVertDeg ;
// ricavo la prima rotazione attorno a Z
if ( dAngADeg > EPS_ANG_SMALL)
dAngCDeg = dAngOrizzDeg + 90 ;
else
m_vtVersX.ToSpherical( nullptr, nullptr, &dAngCDeg) ;
// calcolo l'asse X senza la rotazione attorno a C'
vtXnoC1.FromPolar( 1, dAngCDeg) ;
// calcolo la rotazione attorno a C'
if ( ! vtXnoC1.GetRotation( m_vtVersX, m_vtVersZ, dAngC1Deg, bDet) || ! bDet)
dAngC1Deg = 0 ;
return true ;
}