From 0bd0b0501df6b41a64f3a9a3f526da60f3c9c4aa Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 21 Feb 2017 19:52:53 +0000 Subject: [PATCH] EgtGeomKernel 1.8b4 : - corretto errore in angoli interni di OffsetCurveOnX. --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes OffsetCurveOnX.cpp | 16 ++++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 5ee6bbf065ab1efe842720e2a1014572464f8fec..ad053115870b73a40b66fbda256b679ec4573181 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&P#&A-_cnHfzcD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-WjGrO delta 94 zcmdlNy)SyhFE&Qw&A-_cnHh~ID{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-W11TR diff --git a/OffsetCurveOnX.cpp b/OffsetCurveOnX.cpp index 9ffc3ca..2e0cb5e 100644 --- a/OffsetCurveOnX.cpp +++ b/OffsetCurveOnX.cpp @@ -245,9 +245,9 @@ OffsetCurveOnX::Make( const ICurve* pCrv, double dDist) for ( auto iIter = m_CrvLst.begin() ; iIter != m_CrvLst.end() ;) { ICurve* pCrv = *iIter ; // distanza minima di alcuni punti interni della curva dalla curva originale - if ( ! SafeDist( dDist, 0.5, pCrv, &ccCopy) || - ! SafeDist( dDist, 0.25, pCrv, &ccCopy) || - ! SafeDist( dDist, 0.75, pCrv, &ccCopy)) { + if ( ! SafeDist( dDist, 0.53, pCrv, &ccCopy) || + ! SafeDist( dDist, 0.13, pCrv, &ccCopy) || + ! SafeDist( dDist, 0.89, pCrv, &ccCopy)) { delete pCrv ; iIter = m_CrvLst.erase( iIter) ; continue ; @@ -452,15 +452,15 @@ SafeDist( double dDist, double dCoeff, ICurve* pCrv1, ICurve* pCrv2) // calcolo il punto e due vicini double dUStart, dUEnd ; pCrv1->GetDomain( dUStart, dUEnd) ; - double dU = dCoeff * dUStart + ( 1 - dCoeff) * dUEnd ; + double dU = ( 1 - dCoeff) * dUStart + dCoeff * dUEnd ; Point3d ptP ; pCrv1->GetPointD1D2( dU, ICurve::FROM_MINUS, ptP) ; Point3d ptPrev, ptNext ; Vector3d vtPrev, vtNext ; - pCrv1->GetPointTang( dU - 100 * EPS_PARAM, ICurve::FROM_MINUS, ptPrev, vtPrev) ; - pCrv1->GetPointTang( dU + 100 * EPS_PARAM, ICurve::FROM_PLUS, ptNext, vtNext) ; - // non si considerano i tratti orizzontali (tolleranza fino a 5deg) - const double SEN_ANG_LIM = 0.0872 ; + pCrv1->GetPointTang( dU - 100 * EPS_PARAM, ICurve::FROM_PLUS, ptPrev, vtPrev) ; + pCrv1->GetPointTang( dU + 100 * EPS_PARAM, ICurve::FROM_MINUS, ptNext, vtNext) ; + // non si considerano i tratti orizzontali (tolleranza fino a 1deg) + const double SEN_ANG_LIM = 0.0175 ; if ( abs( vtPrev.y) < SEN_ANG_LIM || abs( vtNext.y) < SEN_ANG_LIM) return true ; // segmento orizzontale di prova centrato sul punto e lungo dDist + dDist