EgtGeomKernel 1.5f1 :

- aggiunta entità testo (con font Nfe e di sistema)
- in tutte le rotate ora l'angolo è in gradi
- aggiunta trasformazione Shear (scorrimento)
- aggiunta trsformazione LocToLoc
- Set/GetInfo specializzate per i diversi tipi di informazioni
- Copy e Relocate con possibilità di indicare l'entità di riferimento rispetto a cui inserire
- aggiunte trasformazioni a PolyLine.
This commit is contained in:
Dario Sassi
2014-06-03 13:19:54 +00:00
parent a52d73aa7a
commit 41a38fef3b
44 changed files with 3257 additions and 248 deletions
+72 -8
View File
@@ -117,6 +117,39 @@ Frame3d::Set( const Point3d& ptOrig, const Vector3d& vtDirZ)
return true ;
}
//----------------------------------------------------------------------------
bool
Frame3d::Set( const Point3d& ptOrig, const Vector3d& vtDirZ, const Vector3d& vtNearDirX)
{
// lo inizializzo come errato
m_nType = ERR ;
m_nZType = ERR ;
// origine
m_ptOrig = ptOrig ;
// versore Z
m_vtVersZ = vtDirZ ;
if ( ! m_vtVersZ.Normalize())
return false ;
// versore Y
m_vtVersY = m_vtVersZ ^ vtNearDirX ;
if ( ! m_vtVersY.Normalize())
return false ;
// verzsore X
m_vtVersX = m_vtVersY ^ m_vtVersZ ;
if ( ! m_vtVersX.Normalize())
return false ;
// verifica della ortogonalità dei versori e del senso destrorso
if ( ! Verify())
return false ;
// ne determino il tipo
CalculateType() ;
return true ;
}
//----------------------------------------------------------------------------
bool
Frame3d::Set( const Point3d& ptOrig, Type nType)
@@ -201,8 +234,9 @@ Frame3d::Translate( const Vector3d& vtMove)
//----------------------------------------------------------------------------
bool
Frame3d::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngRad)
Frame3d::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngDeg)
{
double dAngRad = dAngDeg * DEGTORAD ;
return Rotate( ptAx, vtAx, cos( dAngRad), sin( dAngRad)) ;
}
@@ -236,8 +270,8 @@ Frame3d::PseudoScale( const Frame3d& frRef, double dCoeffX, double dCoeffY, doub
{
const double AXIS_LEN = 100 ;
// verifico validità del frame
if ( GetType() == ERR || frRef.GetType() == ERR)
// verifico validità dei frame
if ( m_nType == ERR || frRef.GetType() == ERR)
return false ;
// scalatura dell'origine
@@ -261,17 +295,20 @@ Frame3d::PseudoScale( const Frame3d& frRef, double dCoeffX, double dCoeffY, doub
Point3d ptDirYS = m_ptOrig + AXIS_LEN * m_vtVersY ;
ptDirYS.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ;
Frame3d frRefS ;
if ( frRefS.Set( ptOrigS, ptDirXS, ptDirYS)) {
*this = frRefS ;
return true ;
}
return false ;
if ( ! frRefS.Set( ptOrigS, ptDirXS, ptDirYS))
return false ;
*this = frRefS ;
return true ;
}
//----------------------------------------------------------------------------
bool
Frame3d::PseudoMirror( const Point3d& ptOn, const Vector3d& vtNorm)
{
// verifico validità riferimento
if ( m_nType == ERR)
return false ;
// mirror dell'origine
m_ptOrig.Mirror( ptOn, vtNorm) ;
// mirror dei versori Y e Z
@@ -286,6 +323,33 @@ Frame3d::PseudoMirror( const Point3d& ptOn, const Vector3d& vtNorm)
return true ;
}
//----------------------------------------------------------------------------
bool
Frame3d::PseudoShear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff)
{
const double AXIS_LEN = 100 ;
// verifico validità riferimento
if ( m_nType == ERR)
return false ;
// shear dell'origine e di due punti sugli assi X e Y
Point3d ptOrigS = m_ptOrig ;
ptOrigS.Shear( ptOn, vtNorm, vtDir, dCoeff) ;
Point3d ptDirXS = m_ptOrig + AXIS_LEN * m_vtVersX ;
ptDirXS.Shear( ptOn, vtNorm, vtDir, dCoeff) ;
Point3d ptDirYS = m_ptOrig + AXIS_LEN * m_vtVersY ;
ptDirYS.Shear( ptOn, vtNorm, vtDir, dCoeff) ;
// calcolo di un nuovo riferimento
Frame3d frRefS ;
if ( ! frRefS.Set( ptOrigS, ptDirXS, ptDirYS))
return false ;
// assegnazione del risultato
*this = frRefS ;
return true ;
}
//----------------------------------------------------------------------------
bool
Frame3d::Invert( void)