Merge commit '4748bd5ac888a0ae6b9381c40bad0aaf01df73aa'

This commit is contained in:
Dario Sassi
2024-07-15 17:11:30 +02:00
+5 -39
View File
@@ -1670,39 +1670,6 @@ AdjustContourWithOpenEdges( ICurveComposite* pCrvCompo, ICRVCOMPOPOVECTOR& vCrvI
return true ;
}
//----------------------------------------------------------------------------
static bool
CheckForRemovingIsland( const ICurveComposite* pCrvIslandBorder, double dOffs, bool bRemove)
{
// controllo dei parametri
// NB. La curva dell'isola gira in senso orario, quindi l'offset va fatto in positivo
if ( pCrvIslandBorder == nullptr || ! pCrvIslandBorder->IsValid() || dOffs < EPS_SMALL)
return false ;
bRemove = false ;
// controllo se l'isola è tutta aperta
for ( int u = 0 ; u < pCrvIslandBorder->GetCurveCount() ; ++ u) {
const ICurve* pCrv_u = pCrvIslandBorder->GetCurve( u) ;
if ( pCrv_u == nullptr)
return false ;
int nTmpProp0 = pCrv_u->GetTempProp( 0) ;
// se trovo una sottocurva che non è aperta, esco
if ( nTmpProp0 != 1)
return true ;
}
// tutte le curva sono aperte, effettuo un offset per vedere se l'isola è da tenere
OffsetCurve OffsCrv ;
if ( ! OffsCrv.Make( pCrvIslandBorder, dOffs, ICurve::OFF_FILLET))
return false ;
// nel caso l'Offset sparisca, all'ora l'isola non è necessaria
if ( OffsCrv.GetCurveCount() == 0)
bRemove = true ;
return true ;
}
//----------------------------------------------------------------------------
static bool
ChainCompoCurves( ICRVCOMPOPOVECTOR& vCrvCompo)
@@ -2146,11 +2113,10 @@ ModifySurfByOpenEdges( ISurfFlatRegion* pSfr, const PocketParams& PockParams, IC
}
// se curva tutta aperta, controllo se l'isola può essere trascurata
if ( nCurrTmpProp == 1) {
bool bRemove = false ;
if ( ! CheckForRemovingIsland( pCrvIsl, 2 * PockParams.dRad + 2 * PockParams.dRadialOffset,
bRemove))
return false ;
if ( bRemove) // se da rimuovere passo all'isola successiva
// calcolo il massimo Offset
double dMaxOffs ;
CalcCurveLimitOffset( *pCrvIsl, dMaxOffs) ;
if ( dMaxOffs < 2 * PockParams.dRad + 2 * PockParams.dRadialOffset)
continue ;
// altrimenti, estendo l'isola aperta ( considero il loop esterno come "isola" per l'estensione)
ICRVCOMPOPOVECTOR vCrvExtLoop ; vCrvExtLoop.emplace_back( pCrvEL->Clone()) ;
@@ -2168,7 +2134,7 @@ ModifySurfByOpenEdges( ISurfFlatRegion* pSfr, const PocketParams& PockParams, IC
SurfFlatRegionByContours SfrBC ; // per sicurezza analizzo ancora i Loop
pCrvEL->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL, true, true) ;
SfrBC.AddCurve( Release( pCrvEL)) ; // <--- Loop esterno
for ( int i = 0 ; i < ( int)vCrvToTIsland.size() ; ++ i) {
for ( int i = 0 ; i < int( vCrvToTIsland.size()) ; ++ i) {
vCrvToTIsland[i]->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL, true, true) ;
SfrBC.AddCurve( Release( vCrvToTIsland[i])) ; // <--- isole "valide"
}