EgtGeomKernel 1.5l1 :

- aggiornamento a VS2013
- migliorato SimpleOffset e implementato anche per CurveComposite
- il lato di offset ora viene dal segno dello spostamento ( + a destra, - a sinistra)
- il vettore estrusione ora è la normale al piano di offset (se non c'è uso Z+)
- aggiunto a tutte le entità geometriche membro m_nTempProp intero temporaneo
- migliorata DistPointCrvBezier e DistPointArc
- corretta IntersLineArc con linee che non giacciono nel piano XY
- corretta ModifyStart di CurveArc
- a PolyArc aggiunto metodo ParamLinearTransform
- aggiunta gestione riferimento di griglia (CPlane).
This commit is contained in:
Dario Sassi
2014-12-17 15:03:29 +00:00
parent 9347e52d18
commit 3e8e7e2e2a
41 changed files with 1227 additions and 271 deletions
+12 -9
View File
@@ -29,7 +29,7 @@ GEOOBJ_REGISTER( CRV_LINE, NGE_C_LIN, CurveLine) ;
//----------------------------------------------------------------------------
CurveLine::CurveLine( void)
: m_nStatus( TO_VERIFY), m_PtStart(), m_PtEnd(), m_VtExtr(), m_dThick()
: m_nStatus( TO_VERIFY), m_PtStart(), m_PtEnd(), m_VtExtr(), m_dThick(), m_nTempProp()
{
}
@@ -123,6 +123,7 @@ CurveLine::CopyFrom( const CurveLine& clSrc)
return true ;
m_VtExtr = clSrc.m_VtExtr ;
m_dThick = clSrc.m_dThick ;
m_nTempProp = clSrc.m_nTempProp ;
return Set( clSrc.m_PtStart, clSrc.m_PtEnd) ;
}
@@ -515,22 +516,24 @@ CurveLine::Invert( void)
//----------------------------------------------------------------------------
bool
CurveLine::Offset( double dDist, int nSide, int nType)
CurveLine::SimpleOffset( double dDist, int nType)
{
// verifico lo stato
if ( m_nStatus != OK)
return false ;
// calcolo il versore direzione linea nel piano XY
// determinazione versore normale al piano di offset
Vector3d vtNorm = Z_AX ;
if ( ! m_VtExtr.IsSmall())
vtNorm = m_VtExtr ;
// calcolo il versore direzione linea nel piano perpendicolare alla normale
Vector3d vtDir = m_PtEnd - m_PtStart ;
vtDir.z = 0 ;
vtDir -= vtDir * vtNorm * vtNorm ;
if ( ! vtDir.Normalize())
return false ;
// calcolo il versore ortogonale dal lato di offset
if ( nSide != OFF_LEFT)
vtDir.Rotate( Z_AX, 0, -1) ; // rotazione CW di 90 deg
else
vtDir.Rotate( Z_AX, 0, 1) ; // rotazione CCW di 90 deg
// calcolo il versore ortogonale dal lato destro (offset positivo)
vtDir.Rotate( vtNorm, 0, -1) ; // rotazione CW di 90 deg
// sposto i punti
m_PtStart += vtDir * dDist ;