EgtMachKernel :

- modifiche a Spiral di Pocketing per lavorare tutte le sotto-aree.
This commit is contained in:
Dario Sassi
2019-06-24 17:31:56 +00:00
parent 16ddc35b1a
commit bc512e863b
+20 -3
View File
@@ -2887,9 +2887,11 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, bool bSplitArcs,
}
// ciclo di offset verso l'interno
const int MAX_ITER = 100 ;
const int MAX_ITER = 1000 ;
int nIter = 0 ;
ICURVEPOVECTOR vOffs ;
ICURVEPOVECTOR vCrvStack ;
DBLVECTOR vRadStack ;
PtrOwner<ICurve> pOffs ;
double dCurrRad = GetCurveRadius( pCompo) ;
while ( nIter < MAX_ITER) {
@@ -2899,8 +2901,23 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, bool bSplitArcs,
m_pMchMgr->SetLastError( 2412, "Error in Pocketing : Offset not computable") ;
return false ;
}
// recupero la prima curva di offset
PtrOwner<ICurve> pNextOffs( OffsCrv.GetLongerCurve()) ;
// recupero le curve di offset e le metto sullo stack
ICurve* pCrv = OffsCrv.GetLongerCurve() ;
while ( pCrv != nullptr) {
vCrvStack.emplace_back( pCrv) ;
vRadStack.emplace_back( dCurrRad) ;
if ( nIter == 0)
break ;
pCrv = OffsCrv.GetCurve() ;
}
// recupero la prossima curva di offset
PtrOwner<ICurve> pNextOffs ;
if ( ! vCrvStack.empty()) {
pNextOffs.Set( Release( vCrvStack.back())) ;
vCrvStack.pop_back() ;
dCurrRad = vRadStack.back() ;
vRadStack.pop_back() ;
}
double dRad = GetCurveRadius( pNextOffs) ;
bool bNextOk = ( dRad > EPS_ZERO && dRad < dCurrRad) ;
bool bSmallRad = ( nIter == 0 ? dOffs < dTRad + GetOffsR() + EPS_ZERO : dOffs < dTRad + EPS_ZERO) ;