EgtMachKernel :

- in PocketingNT modifica punto iniziale delle lavorazioni a seconda del raggio utensile.
This commit is contained in:
Riccardo Elitropi
2025-05-16 16:54:22 +02:00
parent 11076fde17
commit 2d217b307b
+12 -7
View File
@@ -55,6 +55,7 @@ static string KEY_THICK = "THICK" ;
static int LINK_CURVE_PROP = -3 ;
static double EXTRA_ELEV = 5. ;
static double SAFETY_LINK_COS = cos( - ( 175 * DEGTORAD)) ;
static double TOOL_RAD_PTSTART = 20. ;
// Parametri avanzati da UserNotes
const string UN_MAXELEV = "MaxElev" ;
const string UN_OPEN = "Open" ;
@@ -3405,22 +3406,19 @@ PocketingNT::CalcPaths( STEPINFOPOVECTOR& vStepInfo)
// punto finale di riferimento per il percorso attuale ( serve per trovare il punto iniziale
// del percorso successivo)
Point3d ptEndLastPath = P_INVALID ;
Point3d ptStartRef = P_INVALID ;
// controllo parametri per casi ottimizzati
double dMaxOptSize = m_Params.m_dSideStep ;
GetValInNotes( m_Params.m_sUserNotes, UN_MAXOPTSIZE, dMaxOptSize) ;
// se non richiesto controllo con il grezzo, elimino la superficie limite
// scorro gli indici delle superfici
for ( int i = 0 ; i < int( vStepInfo.size()) ; ++ i) {
// calcolo i percorsi di Pocketing
ICRVCOMPOPOVECTOR vCrvPaths ;
if ( ! CalcPocketing( vStepInfo[i].pSfrPock, m_TParams.m_dDiam / 2, GetOffsR(), m_Params.m_dSideStep,
m_Params.m_dSideAngle, m_dOpenMinSafe, m_Params.m_nSubType, true, m_Params.m_bInvert,
false, true, true, ptEndLastPath, vStepInfo[i].pSfrLimit, false, dMaxOptSize, vCrvPaths)) {
false, true, true, ptStartRef, vStepInfo[i].pSfrLimit, false, dMaxOptSize, vCrvPaths)) {
m_pMchMgr->SetLastError( 3028, "Error in PocketingNT : Error in CalcPocketing") ;
return false ;
}
@@ -3430,8 +3428,15 @@ PocketingNT::CalcPaths( STEPINFOPOVECTOR& vStepInfo)
// sistemo gli archi per massimo angolo al centro
for ( int j = 0 ; j < int( vCrvPaths.size()) ; ++ j)
VerifyArcs( vCrvPaths[j]) ;
// recupero il punto finale del percorso per lo step successivo
vCrvPaths.back()->GetEndPoint( ptEndLastPath) ;
// definisco il nuovo punto di riferimento per il percorso successivo
// se l'utensile ha un raggio sotto la tolleranza, allora è il punto finale del percorso attuale
if ( m_TParams.m_dDiam / 2. < TOOL_RAD_PTSTART)
vCrvPaths.back()->GetEndPoint( ptStartRef) ;
// se l'utensile ha un raggio sopra la tolleranza, rimane fisso al punto iniziale del primo percorso
else {
if ( ! ptStartRef.IsValid())
vCrvPaths.front()->GetStartPoint( ptStartRef) ;
}
// inserisco i percorsi nel vettore dei Paths
vStepInfo[i].vPaths.resize( int( vCrvPaths.size())) ;
for ( int j = 0 ; j < int( vCrvPaths.size()) ; ++ j) {