From ee4bb7d7c4aed936492b0ebfdf76fa57a65b70e0 Mon Sep 17 00:00:00 2001 From: SaraP Date: Tue, 15 Jul 2025 11:52:23 +0200 Subject: [PATCH] EgtGeomKernel : - correzione nell'offset con Voronoi per archi piccoli. --- Voronoi.cpp | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/Voronoi.cpp b/Voronoi.cpp index 4feb971..7388cb1 100644 --- a/Voronoi.cpp +++ b/Voronoi.cpp @@ -610,25 +610,25 @@ Voronoi::CalcOffset( ICURVEPOVECTOR& vOffs, double dOffs, int nType) return false ; // sistemo le curve di offset calcolate con vroni - for ( auto pCrv : OffsList) { + for ( auto pCrv : OffsList) { // seleziono le porzioni dell'offset che si trovano dal lato richiesto ICRVCOMPOPOVECTOR vResult = AdjustOffsetCurves( pCrv, dOffs) ; - + for ( int i = 0 ; i < int( vResult.size()) ; ++ i) { // eventuale inversione if ( dOffs > EPS_SMALL) vResult[i]->Invert() ; - + // sistemo il punto di inizio if ( vResult[i]->IsClosed()) AdjustOffsetStart( vResult[i]) ; - + // identifico i raccordi if ( ( nType & ICurve::OFF_CHAMFER) != 0 || ( nType & ICurve::OFF_EXTEND) != 0) IdentifyFillets( vResult[i], dOffs) ; - + // unisco le parti allineate vResult[i]->MergeCurves( LIN_TOL_MIN, ANG_TOL_STD_DEG, true, true) ; // aggiungo al vettore finale @@ -986,9 +986,19 @@ Voronoi::CalcVroniOffset( ICRVCOMPOPLIST& OffsList, double dOffs) double dAng = pArc->GetAngCenter() ; if ( ( nType == CCW && dAng < - EPS_ANG_SMALL) || ( nType == CW && dAng > EPS_ANG_SMALL)) pArc->ToExplementary() ; - // aggiungo alla composita - if ( ! pCrvOffs->AddCurve( Release( pArc))) - return false ; + // verifico se l'arco degenera in segmento + Vector3d vtS, vtE ; + pArc->GetStartDir( vtS) ; + pArc->GetEndDir( vtE) ; + if ( AreSameVectorApprox( vtS, vtE)) { + if ( ! pCrvOffs->AddLine( ptE)) + return false ; + } + else { + // aggiungo alla composita + if ( ! pCrvOffs->AddCurve( Release( pArc))) + return false ; + } } }