EgtGeomKernel :
- correzione nell'offset con Voronoi per archi piccoli.
This commit is contained in:
+18
-8
@@ -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 ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user