EgtGeomKernel :

- correzione nell'offset con Voronoi per archi piccoli.
This commit is contained in:
SaraP
2025-07-15 11:52:23 +02:00
parent 8b0d5bddbf
commit ee4bb7d7c4
+18 -8
View File
@@ -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 ;
}
}
}