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