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