EgtMachKernel :
- in Pocketing::CalcSpiral correzione calcolo offset nel caso di materiale residuo negli angoli - in Pocketing::CalcSpiral modifica calcolo di pNextOffs.
This commit is contained in:
+16
-10
@@ -3145,10 +3145,11 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs,
|
||||
int nIter = 0 ;
|
||||
ICURVEPOVECTOR vOffs ;
|
||||
ICURVEPOVECTOR vCrvStack ;
|
||||
DBLVECTOR vOffsValStack ; // valori dell'offset con cui sono state calcolate le cruve in vCrvStack
|
||||
DBLVECTOR vRadStack ;
|
||||
PtrOwner<ICurveComposite> pOffs ;
|
||||
double dOffsVal ; // valore dell'offset con cui è stato calcolato pOffs
|
||||
double dCurrRad = GetCurveRadius( pCompo) ;
|
||||
double dOffsOld = 0.0 ;
|
||||
|
||||
while ( nIter < MAX_ITER) {
|
||||
// calcolo
|
||||
@@ -3162,11 +3163,13 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs,
|
||||
if ( nIter == 0 && nReg >= OffsCrv.GetCurveCount())
|
||||
return true ;
|
||||
// recupero le curve di offset e le metto sullo stack (se primo offset solo quella voluta)
|
||||
int nCount = 0 ;
|
||||
int nCount = 0 ;
|
||||
ICurve* pCrv = OffsCrv.GetLongerCurve() ;
|
||||
bool bOffsOk = ( pCrv != nullptr) ; // indica se ho ottenuto un offset valido
|
||||
while ( pCrv != nullptr) {
|
||||
if ( nIter != 0 || nReg == nCount) {
|
||||
vCrvStack.emplace_back( pCrv) ;
|
||||
vOffsValStack.emplace_back( dOffs) ;
|
||||
vRadStack.emplace_back( dCurrRad) ;
|
||||
if ( nIter == 0)
|
||||
break ;
|
||||
@@ -3176,11 +3179,14 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs,
|
||||
pCrv = OffsCrv.GetCurve() ;
|
||||
++ nCount ;
|
||||
}
|
||||
// recupero la prossima curva di offset
|
||||
// recupero la prossima curva di offset se ho ottenuto un offset valido oppure ho fallito ma non è ulteriormente riducibile
|
||||
PtrOwner<ICurve> pNextOffs ;
|
||||
if ( ! vCrvStack.empty()) {
|
||||
double dNextOffsVal ;
|
||||
if ( ! vCrvStack.empty() && ( bOffsOk || dOffs < dTRad + EPS_ZERO)) {
|
||||
pNextOffs.Set( Release( vCrvStack.back())) ;
|
||||
dNextOffsVal = vOffsValStack.back() ;
|
||||
vCrvStack.pop_back() ;
|
||||
vOffsValStack.pop_back() ;
|
||||
dCurrRad = vRadStack.back() ;
|
||||
vRadStack.pop_back() ;
|
||||
}
|
||||
@@ -3191,10 +3197,10 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs,
|
||||
pNewOffs.Set( CreateCurveComposite()) ;
|
||||
else if ( ! IsNull( pOffs))
|
||||
pNewOffs.Set( pOffs->Clone()) ;
|
||||
|
||||
|
||||
if ( ! IsNull( pOffs) && nIter > 1) {
|
||||
|
||||
double dOverlap = 1 - dOffsOld / m_TParams.m_dDiam ;
|
||||
double dOverlap = 1 - dOffsVal / m_TParams.m_dDiam ;
|
||||
double dSharpSin = 1 - 2 * dOverlap ; // valore critico
|
||||
|
||||
const ICurve * pCrv = pOffs->GetFirstCurve() ;
|
||||
@@ -3249,7 +3255,7 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs,
|
||||
pCrv = pOffs->GetNextCurve() ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
double dRad = GetCurveRadius( pNextOffs) ;
|
||||
bool bNextOk = ( dRad > EPS_ZERO && dRad < dCurrRad) ;
|
||||
bool bSmallRad = ( nIter == 0 ? dOffs < dTRad + GetOffsR() + EPS_ZERO : dOffs < dTRad + EPS_ZERO) ;
|
||||
@@ -3258,13 +3264,13 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs,
|
||||
// inserisco l'offset nel vettore
|
||||
vOffs.emplace_back( Release( pNewOffs)) ;
|
||||
}
|
||||
// aggiorno valore di dOffs
|
||||
dOffsOld = dOffs ;
|
||||
|
||||
// se offset va bene
|
||||
if ( bNextOk) {
|
||||
// sistemo per prossimo step
|
||||
dCurrRad = dRad ;
|
||||
pOffs.Set( GetCurveComposite( Release( pNextOffs))) ;
|
||||
dOffsVal = dNextOffsVal ;
|
||||
// nuovo valore pari allo step
|
||||
dOffs = GetSideStep() ;
|
||||
}
|
||||
@@ -3327,7 +3333,7 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs,
|
||||
for ( int i = 0 ; i < int( vOffs.size()) ; ++ i) {
|
||||
// se collegamento da aggiungere
|
||||
if ( ! IsNull( vLinks[i])) {
|
||||
// accodo nel percorso di lavorazione
|
||||
// accodo nel percorso di lavorazione
|
||||
pMCrv->AddCurve( Release( vLinks[i])) ;
|
||||
}
|
||||
// se richiesta percorrenza invertita
|
||||
|
||||
Reference in New Issue
Block a user