From 8cef853ef294c9306443062675fc7355af596a1e Mon Sep 17 00:00:00 2001 From: DarioS Date: Sun, 18 Sep 2022 19:23:24 +0200 Subject: [PATCH] EgtExecutor : - migliorata gestione tolleranze in ExeApproxCurve. --- EXE_Const.h | 4 ++-- EXE_GdbModifyCurve.cpp | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/EXE_Const.h b/EXE_Const.h index c04ac80..4852ddf 100644 --- a/EXE_Const.h +++ b/EXE_Const.h @@ -20,9 +20,9 @@ const double LIN_TOL_STD = 0.1 ; const double LIN_TOL_FINE = 0.01 ; const double LIN_FEA_STD = 20 ; -const double LIN_FEA_MAX = 500 ; +const double LIN_FEA_MAX = 400 ; const double ANG_TOL_STD_DEG = 15 ; -const double ANG_TOL_MAX_DEG = 90 ; +const double ANG_TOL_MAX_DEG = 60 ; // Curve originali di composite o curva originale di area danneggiata const std::string CRV_ORIG = "ORIG" ; diff --git a/EXE_GdbModifyCurve.cpp b/EXE_GdbModifyCurve.cpp index b997fb3..6e88f18 100644 --- a/EXE_GdbModifyCurve.cpp +++ b/EXE_GdbModifyCurve.cpp @@ -199,8 +199,13 @@ ExeApproxCurve( int nId, int nApprType, double dLinTol) } else { // con bi-archi PolyArc PA ; - double dLinFea = ( dLinTol <= LIN_TOL_STD ? LIN_FEA_STD : LIN_FEA_MAX) ; - double dAngTol = ( dLinTol <= LIN_TOL_STD ? ANG_TOL_STD_DEG : ANG_TOL_MAX_DEG) ; + double dLinFea = LIN_FEA_STD ; + double dAngTol = ANG_TOL_STD_DEG ; + if ( dLinTol > LIN_TOL_STD) { + double dCoeff = ( dLinTol - LIN_TOL_STD) / LIN_TOL_STD ; + dLinFea = min( LIN_FEA_STD + 1.0 * dCoeff * LIN_FEA_STD, LIN_FEA_MAX) ; + dAngTol = min( ANG_TOL_STD_DEG + 0.2 * dCoeff * ANG_TOL_STD_DEG, ANG_TOL_MAX_DEG) ; + } bOk = bOk && pCurve->ApproxWithArcsEx( dLinTol, dAngTol, dLinFea, PA) && pCC->FromPolyArc( PA) ; // merge di archi identici di biarchi bOk = bOk && pCC->MergeCurves( 0.5 * dLinTol, dAngTol) ;