EgtMachKernel :

- in PocketingNT piccola miglioria sui punti inziali delle lavorazioni Spiral ( e casi Trapezi)
- in PocketingNT migliorata l'elevazione per la funzione AddRetract.
This commit is contained in:
Riccardo Elitropi
2025-10-02 17:59:14 +02:00
parent 75fa4a3f90
commit bd1e7e04ee
+23 -13
View File
@@ -2239,7 +2239,7 @@ PocketingNT::GetStartPointsFromSteps( const STEPINFOPOVECTOR& vStepInfo, int nCr
ICRVCOMPOPOVECTOR vpCrvs ;
GetHomogeneousParts( pCrvLoop, vpCrvs) ;
double dLenRef = 0. ;
int nIndRef = -1 ;
int nIndRef = -1, nCrvRef = -1 ;
Point3d ptMid ;
// se bordo tutto aperto, allora cerco il punto medio della curva più lunga
if ( int( vpCrvs.size()) == 1 && vpCrvs[0]->GetTempProp() == TEMP_PROP_OPEN_EDGE) {
@@ -2258,16 +2258,24 @@ PocketingNT::GetStartPointsFromSteps( const STEPINFOPOVECTOR& vStepInfo, int nCr
// scorro i tratti con le proprietà richieste e cerco quello più lungo
for ( int i = 0 ; i < int( vpCrvs.size()) ; ++ i) {
if ( vpCrvs[i]->GetTempProp() == nCrvType) {
double dLen = 0. ; vpCrvs[i]->GetLength( dLen) ;
if ( dLen > dLenRef) {
dLenRef = dLen ;
nIndRef = i ;
// scorro le curve che lo compongono
for ( int j = 0 ; j < int( vpCrvs.size()) ; ++ j) {
// recupero la curva corrente
const ICurve* pCrv = vpCrvs[i]->GetCurve( j) ;
if ( pCrv != nullptr && pCrv->IsValid()) {
double dLen = 0. ; vpCrvs[i]->GetLength( dLen) ;
if ( dLen > dLenRef) {
dLenRef = dLen ;
nIndRef = i ;
nCrvRef = j ;
}
}
}
}
}
if ( nIndRef == -1)
if ( nIndRef == -1 || nCrvRef == -1)
continue ;
vpCrvs[nIndRef]->GetMidPoint( ptMid) ;
vpCrvs[nIndRef]->GetCurve(nCrvRef)->GetMidPoint( ptMid) ;
}
#if DEBUG_START_POINT
@@ -4020,11 +4028,9 @@ PocketingNT::CalcPaths( STEPINFOPOVECTOR& vStepInfo)
// se l'utensile ha un raggio sotto la tolleranza, allora è il punto finale del percorso attuale
else if ( m_TParams.m_dDiam / 2. < TOOL_RAD_PTSTART)
vStepInfo[i].vPaths.back().pCrvPath->GetEndPoint( ptStartRef) ;
// se l'utensile ha un raggio sopra la tolleranza, rimane fisso al punto iniziale del primo percorso
else {
if ( ! ptStartRef.IsValid())
vStepInfo[i].vPaths.front().pCrvPath->GetStartPoint( ptStartRef) ;
}
// se l'utensile ha un raggio sopra la tolleranza, rimane fisso al punto iniziale del percorso precedente
else
vStepInfo[i].vPaths.front().pCrvPath->GetStartPoint( ptStartRef) ;
// aggiorno la progressBar
ExeProcessEvents( 50 + i * 50 / int( vStepInfo.size()), 0) ;
}
@@ -4264,8 +4270,12 @@ PocketingNT::AddPocket( STEPINFOPOVECTOR& vStepInfo, const Vector3d& vtTool, dou
m_pMchMgr->SetLastError( 3014, "Error in PocketingNT : LeadOut not computable") ;
return false ;
}
// calcolo l'elevazione al di sopra del punto corrente
double dLastElev = 0. ;
if ( ! GetElevation( m_nPhase, ptP1, vtTool, m_TParams.m_dDiam / 2., m_TParams.m_dLen, 0., vtTool, dLastElev))
dLastElev = - currStep.dDepth ;
// aggiungo retroazione finale
if ( ! AddRetract( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, - currStep.dDepth, dAppr, bSplitArcs)) {
if ( ! AddRetract( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, dLastElev, dAppr, bSplitArcs)) {
m_pMchMgr->SetLastError( 3015, "Error in PocketingNT : Retract not computable") ;
return false ;
}