diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 0d97c23..32ac2a0 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ 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 ;