From bc512e863bbee49009a521ab048b301f237654a1 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 24 Jun 2019 17:31:56 +0000 Subject: [PATCH] EgtMachKernel : - modifiche a Spiral di Pocketing per lavorare tutte le sotto-aree. --- Pocketing.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/Pocketing.cpp b/Pocketing.cpp index ded7b18..c41a0e2 100644 --- a/Pocketing.cpp +++ b/Pocketing.cpp @@ -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 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 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 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) ;