From 75f70d2b302f7b4f0f6fef8f8b17d48fa6d59e00 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 29 Aug 2025 19:52:13 +0200 Subject: [PATCH] EgtGeomKernel 2.7h2 : - piccola miglioria in proiezione curve su superfici di Bezier. --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes ProjectCurveSurf.cpp | 49 +++++++++++++++++++++++++++++++------------ 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 0d97c238cd55b1ab06ddb20ea5634256ecd7fda2..32ac2a0a909b2a20eca4ff7ad85b970329731260 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&P_&A-_cnHh~HD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-Vf-5U delta 94 zcmdlNy)SyhFE&QQ&A-_cnHdcyD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-U|t&X diff --git a/ProjectCurveSurf.cpp b/ProjectCurveSurf.cpp index 9944cdd..1c1dd66 100644 --- a/ProjectCurveSurf.cpp +++ b/ProjectCurveSurf.cpp @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2023-2023 +// EgalTech 2023-2025 //---------------------------------------------------------------------------- -// File : ProjectCurveSurfTm.cpp Data : 16.11.23 Versione : 2.5kh3 +// File : ProjectCurveSurfTm.cpp Data : 29.08.25 Versione : 2.7h2 // Contenuto : Implementazione funzioni proiezione curve su superficie Trimesh. // // @@ -40,6 +40,13 @@ const int P5AX_CONC = 3 ; // in angolo concavo const int P5AX_BEFORE_CONC = 4 ; // adiacente ad angolo concavo const int P5AX_AFTER_CONC = 5 ; // adiacente ad angolo concavo +//---------------------------------------------------------------------------- +static double +GetSurfBezierTol( double dLinTol) +{ + return max( dLinTol / 10, EPS_SMALL) ; +} + //---------------------------------------------------------------------------- static bool PointsInTolerance( const PNT5AXVECTOR& vPt5ax, int nPrec, int nCurr, int nNext, double dSqTol) @@ -154,7 +161,8 @@ RemovePointsInExcess( PNT5AXVECTOR& vPt5ax, double dLinTol, double dMaxSegmLen, return true ; } -typedef std::vector INTPARLINESTMPVECTOR ; // vettore di oggetti intersezione massiva rette parallele SurfTM +// --- vettore di oggetti intersezione massiva rette parallele SurfTM -------- +typedef std::vector INTPARLINESTMPVECTOR ; //---------------------------------------------------------------------------- static bool @@ -230,8 +238,11 @@ ProjectCurveOnSurf( const ICurve& crCrv, const CISURFPVECTOR& vpSurf, const Vect pSurfTm = GetBasicSurfTriMesh( vpSurf[i]) ; break ; case SRF_BEZIER : - pSurfTm = GetBasicSurfBezier( vpSurf[i])->GetAuxSurf() ; - break ; + { double dOldLinTol = GetSurfBezierAuxSurfRefinedTol() ; + SetSurfBezierAuxSurfRefinedTol( GetSurfBezierTol( dLinTol)) ; + pSurfTm = GetBasicSurfBezier( vpSurf[i])->GetAuxSurfRefined() ; + SetSurfBezierAuxSurfRefinedTol( dOldLinTol) ; + } break ; case SRF_FLATRGN : pSurfTm = GetBasicSurfFlatRegion( vpSurf[i])->GetAuxSurf() ; break ; @@ -440,8 +451,11 @@ ProjectCurveOnSurf( const ICurve& crCrv, const CISURFPVECTOR& vpSurf, const IGeo pSurfTm = GetBasicSurfTriMesh( vpSurf[i]) ; break ; case SRF_BEZIER : - pSurfTm = GetBasicSurfBezier( vpSurf[i])->GetAuxSurf() ; - break ; + { double dOldLinTol = GetSurfBezierAuxSurfRefinedTol() ; + SetSurfBezierAuxSurfRefinedTol( GetSurfBezierTol( dLinTol)) ; + pSurfTm = GetBasicSurfBezier( vpSurf[i])->GetAuxSurfRefined() ; + SetSurfBezierAuxSurfRefinedTol( dOldLinTol) ; + } break ; case SRF_FLATRGN : pSurfTm = GetBasicSurfFlatRegion( vpSurf[i])->GetAuxSurf() ; break ; @@ -593,8 +607,11 @@ ProjectCurveOnSurf( const ICurve& crCrv, const CISURFPVECTOR& vpSurf, const ICur pSurfTm = GetBasicSurfTriMesh( vpSurf[i]) ; break ; case SRF_BEZIER : - pSurfTm = GetBasicSurfBezier( vpSurf[i])->GetAuxSurf() ; - break ; + { double dOldLinTol = GetSurfBezierAuxSurfRefinedTol() ; + SetSurfBezierAuxSurfRefinedTol( GetSurfBezierTol( dLinTol)) ; + pSurfTm = GetBasicSurfBezier( vpSurf[i])->GetAuxSurfRefined() ; + SetSurfBezierAuxSurfRefinedTol( dOldLinTol) ; + } break ; case SRF_FLATRGN : pSurfTm = GetBasicSurfFlatRegion( vpSurf[i])->GetAuxSurf() ; break ; @@ -804,8 +821,11 @@ ProjectCurveOnSurf( const ICurve& crCrv, const CISURFPVECTOR& vpSurf, const ISur pSurfTm = GetBasicSurfTriMesh( vpSurf[i]) ; break ; case SRF_BEZIER : - pSurfTm = GetBasicSurfBezier( vpSurf[i])->GetAuxSurf() ; - break ; + { double dOldLinTol = GetSurfBezierAuxSurfRefinedTol() ; + SetSurfBezierAuxSurfRefinedTol( GetSurfBezierTol( dLinTol)) ; + pSurfTm = GetBasicSurfBezier( vpSurf[i])->GetAuxSurfRefined() ; + SetSurfBezierAuxSurfRefinedTol( dOldLinTol) ; + } break ; case SRF_FLATRGN : pSurfTm = GetBasicSurfFlatRegion( vpSurf[i])->GetAuxSurf() ; break ; @@ -824,8 +844,11 @@ ProjectCurveOnSurf( const ICurve& crCrv, const CISURFPVECTOR& vpSurf, const ISur pRefTm = GetBasicSurfTriMesh( &sfRef) ; break ; case SRF_BEZIER : - pRefTm = GetBasicSurfBezier( &sfRef)->GetAuxSurf() ; - break ; + { double dOldLinTol = GetSurfBezierAuxSurfRefinedTol() ; + SetSurfBezierAuxSurfRefinedTol( GetSurfBezierTol( dLinTol)) ; + pRefTm = GetBasicSurfBezier( &sfRef)->GetAuxSurfRefined() ; + SetSurfBezierAuxSurfRefinedTol( dOldLinTol) ; + } break ; case SRF_FLATRGN : pRefTm = GetBasicSurfFlatRegion( &sfRef)->GetAuxSurf() ; break ;