diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 5ee6bbf..ad05311 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ 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