diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index ad1cd5b..8b77bab 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ diff --git a/OffsetCurveOnX.cpp b/OffsetCurveOnX.cpp index eddfd85..c3d3d1d 100644 --- a/OffsetCurveOnX.cpp +++ b/OffsetCurveOnX.cpp @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2016-2016 +// EgalTech 2016-2020 //---------------------------------------------------------------------------- -// File : OffsetCurveOnX.cpp Data : 02.04.16 Versione : 1.6o4 +// File : OffsetCurveOnX.cpp Data : 13.02.20 Versione : 2.2b2 // Contenuto : Classe per offset di Curve lungo la sola X. // // @@ -17,8 +17,8 @@ #include "CurveLine.h" #include "CurveArc.h" #include "GeoConst.h" -#include "/EgtDev/Include/EgkOffsetCurveOnX.h" -#include "/EgtDev/Include/EgkIntersCurves.h" +#include "/EgtDev/Include/EGkOffsetCurveOnX.h" +#include "/EgtDev/Include/EGkIntersCurves.h" #include "/EgtDev/Include/EGkDistPointCurve.h" #include "/EgtDev/Include/EgtPointerOwner.h" #include @@ -107,30 +107,20 @@ OffsetCurveOnX::Make( const ICurve* pCrv, double dDist) return false ; // indice della prima curva (1-based, per poter assegnare un significato al segno) int nInd1 = 1 ; - // recupero la prima curva e la processo + // recupero la prima curva PtrOwner pCrv1( ccCopy2.RemoveFirstOrLastCurve( false)) ; - if ( IsNull( pCrv1)) - return false ; - // eseguo semplice offset orizzontale - pCrv1->SetTempProp( nInd1) ; - SimpleOffsetOnX( pCrv1, dDist) ; - // curve successive - PtrOwner pCrv2( ccCopy2.RemoveFirstOrLastCurve( false)) ; - while ( ! IsNull( pCrv2)) { - // eseguo semplice offset - pCrv2->SetTempProp( nInd1 + 1) ; - SimpleOffsetOnX( pCrv2, dDist) ; - // metto in lista curva precedente - m_CrvLst.push_back( Release( pCrv1)) ; - // aggiorno curva precedente - ++ nInd1 ; - pCrv1.Set( Release( pCrv2)) ; + while ( ! IsNull( pCrv1)) { + // eseguo semplice offset orizzontale + pCrv1->SetTempProp( nInd1) ; + if ( SimpleOffsetOnX( pCrv1, dDist)) + // metto in lista + m_CrvLst.push_back( Release( pCrv1)) ; // passo alla curva successiva - pCrv2.Set( ccCopy2.RemoveFirstOrLastCurve( false)) ; + pCrv1.Set( ccCopy2.RemoveFirstOrLastCurve( false)) ; + ++ nInd1 ; } - // Metto in lista l'ultima curva rimasta - if ( ! IsNull( pCrv1)) - m_CrvLst.push_back( Release( pCrv1)) ; + if ( m_CrvLst.empty()) + return false ; // Secondo passo : taglio angoli tipo interni ICurve* pPrev = nullptr ; @@ -387,8 +377,9 @@ SimpleOffsetOnX( ICurve* pCrv, double dDist) Point3d ptStart, ptEnd ; pCrv->GetStartPoint( ptStart) ; pCrv->GetEndPoint( ptEnd) ; - if ( abs( ptStart.y - ptEnd.y) < EPS_SMALL) - ; + if ( abs( ptStart.y - ptEnd.y) < EPS_SMALL) { + return ( abs( ptStart.x - ptEnd.x) > dDist) ; + } else if ( ptStart.y < ptEnd.y) pCrv->Translate( Vector3d( dDist, 0, 0)) ; else