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:
+24
-8
@@ -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 ;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user