EgtGeomKernel 1.4a3 : Migliorata gestione gruppi, aggiunti GdbIterator, GeoFrame3d e IdManager.
This commit is contained in:
+41
-8
@@ -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 ;
|
||||
}
|
||||
Reference in New Issue
Block a user