Merge commit '4748bd5ac888a0ae6b9381c40bad0aaf01df73aa'
This commit is contained in:
+5
-39
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user