From cea869c6eedc94e3dc54e0b1d87a29755e5e619a Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Mon, 27 Apr 2026 15:05:45 +0200 Subject: [PATCH 1/2] EgtGeomKernel : - correzione al commit precedente. --- Trimming.cpp | 102 +++++++++++++++++++++++++-------------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/Trimming.cpp b/Trimming.cpp index ef0431f..ec38924 100644 --- a/Trimming.cpp +++ b/Trimming.cpp @@ -63,7 +63,7 @@ #define DEBUG_EDGES 0 #define DEBUG_SHAPE_STM 0 #define DEBUG_HOLES 0 -#define DEBUG_SMOOTH_CURVATURE 0 +#define DEBUG_SMOOTH_CURVATURE 1 #if DEBUG_BASIC_BORDERS || DEBUG_CHAIN_CURVES || DEBUG_ANG_APPROX || DEBUG_BEZIER_INTERP || \ DEBUG_FACE_SEARCH || DEBUG_FACE_SEARCH_TRIA_MODIF || DEBUG_BRK_POINTS || DEBUG_BRK_THICK || \ DEBUG_BRK || DEBUG_BORDERS_BY_NORMALS || DEBUG_SYNC_POINTS || DEBUG_SYNC_INTERPOLATION || \ @@ -4938,55 +4938,55 @@ FillPntInfo( const PNTVECTOR& vPnt, const ICurveComposite* pCC, PNTINFOVECTOR& v return true ; } -//------------------------------------------------------------------------------ -static bool -RemoveInflexionPoints( PNTVECTOR& vPnt, PNTINFOVECTOR& vPntInfo, PNTINFOVECTOR& vPntRefInfo) -{ - // se trovo tre punti di fila che sono dallo stesso lato, opposto a quello degli altri punti attorno, allora cerco di spostarli lungo la - // normale alla superficie in modo da evitare cambi di concavità - bool bSameSideAsPrev = true ; - for ( int i = 2 ; i < ssize( vPntInfo) - 2 ; ++i) { - int nPrev = vPntInfo[i-1].dDist < EPS_ZERO ? i - 2 : i - 1 ; - double dProj = vPntInfo[i].vtPos * vPntInfo[nPrev].vtPos ; - bSameSideAsPrev = vPntInfo[i].dDist < EPS_ZERO || dProj >= 0 ; - if ( ! bSameSideAsPrev) { - // devo verificare anche che sia diverso anche dal successivo ( o dal quello dopo ancora, se il successivo sta sulla curva) - bool bCurrOrPrev = vPntInfo[i+1].dDist < EPS_ZERO ; - int nFirst, nSecond, nThird ; - if ( bCurrOrPrev) { - nFirst = i ; - nSecond = i + 1 ; - nThird = i + 2 ; - } - else { - nFirst = i - 2 ; - nSecond = i - 1 ; - nThird = i ; - } - int nNext = bCurrOrPrev ? i + 2 : i + 1 ; - // se il successivo è diverso ho un terzetto anomalo da aggiustare - // altrimenti ho un cambio naturale di concavità - if ( vPntInfo[i].vtPos * vPntInfo[nNext].vtPos < 0) { - // ruoto il terzetto fino a matchare la tangente sull'altra curva - Vector3d vtCurr = vPntInfo[nNext].pt - vPntInfo[i].pt ; - Vector3d vtRef = vPntRefInfo[nNext].pt - vPntRefInfo[i].pt ; - Vector3d vtAx = vPntRefInfo[nSecond].pt - vPntInfo[nSecond].pt ; - bool bDet = false ; - double dAng = 0 ; vtCurr.GetRotation(vtRef, vtAx, dAng, bDet) ; - if ( dAng > 170) { - dAng = 180 - dAng ; - // devo capire quale delle due curve ha i punti di controllo incrociati (come conseguenza della correzione precedente) e rimediare - // DA IMPLEMENTARE, eventualmente - } - - vPnt[nFirst].Rotate( vPnt[nSecond], vtAx, dAng) ; - vPnt[nThird].Rotate( vPnt[nSecond], vtAx, dAng) ; - if ( bCurrOrPrev) - i += 2 ; - } - } - } -} +////------------------------------------------------------------------------------ +//static bool +//RemoveInflexionPoints( PNTVECTOR& vPnt, PNTINFOVECTOR& vPntInfo, PNTINFOVECTOR& vPntRefInfo) +//{ +// // se trovo tre punti di fila che sono dallo stesso lato, opposto a quello degli altri punti attorno, allora cerco di spostarli lungo la +// // normale alla superficie in modo da evitare cambi di concavità +// bool bSameSideAsPrev = true ; +// for ( int i = 2 ; i < ssize( vPntInfo) - 2 ; ++i) { +// int nPrev = vPntInfo[i-1].dDist < EPS_ZERO ? i - 2 : i - 1 ; +// double dProj = vPntInfo[i].vtPos * vPntInfo[nPrev].vtPos ; +// bSameSideAsPrev = vPntInfo[i].dDist < EPS_ZERO || dProj >= 0 ; +// if ( ! bSameSideAsPrev) { +// // devo verificare anche che sia diverso anche dal successivo ( o dal quello dopo ancora, se il successivo sta sulla curva) +// bool bCurrOrPrev = vPntInfo[i+1].dDist < EPS_ZERO ; +// int nFirst, nSecond, nThird ; +// if ( bCurrOrPrev) { +// nFirst = i ; +// nSecond = i + 1 ; +// nThird = i + 2 ; +// } +// else { +// nFirst = i - 2 ; +// nSecond = i - 1 ; +// nThird = i ; +// } +// int nNext = bCurrOrPrev ? i + 2 : i + 1 ; +// // se il successivo è diverso ho un terzetto anomalo da aggiustare +// // altrimenti ho un cambio naturale di concavità +// if ( vPntInfo[i].vtPos * vPntInfo[nNext].vtPos < 0) { +// // ruoto il terzetto fino a matchare la tangente sull'altra curva +// Vector3d vtCurr = vPntInfo[nNext].pt - vPntInfo[i].pt ; +// Vector3d vtRef = vPntRefInfo[nNext].pt - vPntRefInfo[i].pt ; +// Vector3d vtAx = vPntRefInfo[nSecond].pt - vPntInfo[nSecond].pt ; +// bool bDet = false ; +// double dAng = 0 ; vtCurr.GetRotation(vtRef, vtAx, dAng, bDet) ; +// if ( dAng > 170) { +// dAng = 180 - dAng ; +// // devo capire quale delle due curve ha i punti di controllo incrociati (come conseguenza della correzione precedente) e rimediare +// // DA IMPLEMENTARE, eventualmente +// } +// +// vPnt[nFirst].Rotate( vPnt[nSecond], vtAx, dAng) ; +// vPnt[nThird].Rotate( vPnt[nSecond], vtAx, dAng) ; +// if ( bCurrOrPrev) +// i += 2 ; +// } +// } +// } +//} //------------------------------------------------------------------------------ // Funzione per la regolarizzazione delle curve di bordo di una lavorazione di trim @@ -5135,7 +5135,7 @@ RegolarizeBordersLocally( const ISurfBezier* pSurfBz, const BIPOINT& bpIsoStart, FillPntInfo( vPnt0, pCC1, vPntInfo1) ; FillPntInfo( vPnt1, pCC2, vPntInfo2) ; - RemoveInflexionPoints( ) ; + //RemoveInflexionPoints( ) ; // se trovo tre punti di fila che sono dallo stesso lato, opposto a quello degli altri punti attorno, allora cerco di spostarli lungo la // normale alla superficie in modo da evitare cambi di concavità From 344f0da7ffabbf458fb619638cb5d9f23553e938 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Mon, 27 Apr 2026 15:06:27 +0200 Subject: [PATCH 2/2] EgtGeomKernel : - tolto flag di debug. --- Trimming.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Trimming.cpp b/Trimming.cpp index ec38924..8c3a93c 100644 --- a/Trimming.cpp +++ b/Trimming.cpp @@ -63,7 +63,7 @@ #define DEBUG_EDGES 0 #define DEBUG_SHAPE_STM 0 #define DEBUG_HOLES 0 -#define DEBUG_SMOOTH_CURVATURE 1 +#define DEBUG_SMOOTH_CURVATURE 0 #if DEBUG_BASIC_BORDERS || DEBUG_CHAIN_CURVES || DEBUG_ANG_APPROX || DEBUG_BEZIER_INTERP || \ DEBUG_FACE_SEARCH || DEBUG_FACE_SEARCH_TRIA_MODIF || DEBUG_BRK_POINTS || DEBUG_BRK_THICK || \ DEBUG_BRK || DEBUG_BORDERS_BY_NORMALS || DEBUG_SYNC_POINTS || DEBUG_SYNC_INTERPOLATION || \