EgtGeomKernel 1.5h7 :

- modificta gestione versione dei file Nge
- alle curve aggiunti vettore estrusione e spessore
- IsFlat ora tiene conto del vettore estrusione
- a TSC aggiunte CurveModify.EXTRusion e CurveModify.THickness.
This commit is contained in:
Dario Sassi
2014-08-25 17:12:55 +00:00
parent 396d53fc5d
commit c7d10b83e1
19 changed files with 458 additions and 84 deletions
+29 -3
View File
@@ -171,6 +171,10 @@ Vector3d::Normalize( double dEps)
bool
Vector3d::Rotate( const Vector3d& vtAx, double dAngDeg)
{
// se vettore nullo
if ( IsZero())
return true ;
// calcolo ed eseguo rotazione
double dAngRad = dAngDeg * DEGTORAD ;
return Rotate( vtAx, cos( dAngRad), sin( dAngRad)) ;
}
@@ -181,6 +185,10 @@ Vector3d::Rotate( const Vector3d& vtAx, double dAngDeg)
bool
Vector3d::Rotate( const Vector3d& vtAx, double dCosAng, double dSinAng)
{
// se vettore nullo
if ( IsZero())
return true ;
// ricavo versore asse di rotazione
Vector3d vtDirAx = vtAx ;
if ( ! vtDirAx.Normalize())
@@ -274,6 +282,10 @@ Vector3d::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dC
if ( frRef.GetType() == Frame3d::ERR)
return false ;
// se vettore nullo
if ( IsZero())
return true ;
// ricavo le componenti sugli assi di scalatura, le scalo e riassemblo il vettore completo
*this = ( (*this) * frRef.VersX() * dCoeffX) * frRef.VersX() +
( (*this) * frRef.VersY() * dCoeffY) * frRef.VersY() +
@@ -288,6 +300,10 @@ Vector3d::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dC
bool
Vector3d::Mirror( const Vector3d& vtNorm)
{
// se vettore nullo
if ( IsZero())
return true ;
// ricavo versore normale al piano di simmetria
Vector3d vtDirNorm = vtNorm ;
if ( ! vtDirNorm.Normalize())
@@ -308,9 +324,11 @@ Vector3d::Mirror( const Vector3d& vtNorm)
bool
Vector3d::Shear( const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff)
{
// se vettore nullo
if ( IsZero())
return true ;
// costruisco il vettore
*this += dCoeff * ( *this * vtNorm) * vtDir ;
return true ;
}
@@ -324,6 +342,10 @@ Vector3d::ToGlob( const Frame3d& frRef)
if ( frRef.GetType() == Frame3d::ERR)
return false ;
// se vettore nullo o riferimento identità per le rotazioni
if ( IsZero() || frRef.GetType() == Frame3d::TOP)
return true ;
// eseguo trasformazione
if ( frRef.GetType() != Frame3d::TOP) {
Vector3d vtT( x, y, z) ;
@@ -345,6 +367,10 @@ Vector3d::ToLoc( const Frame3d& frRef)
if ( frRef.GetType() == Frame3d::ERR)
return false ;
// se vettore nullo o riferimento identità per le rotazioni
if ( IsZero() || frRef.GetType() == Frame3d::TOP)
return true ;
// eseguo trasformazione
if ( frRef.GetType() != Frame3d::TOP) {
Vector3d vtT( x, y, z) ;
@@ -362,8 +388,8 @@ Vector3d::ToLoc( const Frame3d& frRef)
bool
Vector3d::LocToLoc( const Frame3d& frOri, const Frame3d& frDest)
{
// se i due riferimenti coincidono, non devo fare alcunché
if ( AreSameFrame( frOri, frDest))
// se vettore nullo o i due riferimenti coincidono, non devo fare alcunché
if ( IsZero() || AreSameFrame( frOri, frDest))
return true ;
return ( ToGlob( frOri) && ToLoc( frDest)) ;