From 2d217b307b41e0e235927ca71676d2944c52c355 Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Fri, 16 May 2025 16:54:22 +0200 Subject: [PATCH] EgtMachKernel : - in PocketingNT modifica punto iniziale delle lavorazioni a seconda del raggio utensile. --- PocketingNT.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/PocketingNT.cpp b/PocketingNT.cpp index 666031d..2015e3c 100644 --- a/PocketingNT.cpp +++ b/PocketingNT.cpp @@ -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) {