From bd1e7e04eeff7130412ee46a06b1ac4ed2654afd Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Thu, 2 Oct 2025 17:59:14 +0200 Subject: [PATCH] EgtMachKernel : - in PocketingNT piccola miglioria sui punti inziali delle lavorazioni Spiral ( e casi Trapezi) - in PocketingNT migliorata l'elevazione per la funzione AddRetract. --- PocketingNT.cpp | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/PocketingNT.cpp b/PocketingNT.cpp index 9261dac..87019a6 100644 --- a/PocketingNT.cpp +++ b/PocketingNT.cpp @@ -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 ; }