From 73739a293149f41d60b7b75f480cc00b1f5b243d Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Tue, 31 Mar 2026 18:55:32 +0200 Subject: [PATCH] EgtMachKernel : - in PocketingNT aggiunta gestione lucidature. --- PocketingNT.cpp | 43 +++++++++++++++++++++++++++++++++++-------- SurfFinishing.cpp | 11 ++++++----- SurfRoughing.cpp | 3 ++- 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/PocketingNT.cpp b/PocketingNT.cpp index b30df29..4181aff 100644 --- a/PocketingNT.cpp +++ b/PocketingNT.cpp @@ -4325,14 +4325,31 @@ PocketingNT::CalcPaths( STEPINFOPOVECTOR& vStepInfo) bool bAdjustFeed = true ; GetValInNotes( m_Params.m_sUserNotes, UN_ADJUSTFEED, bAdjustFeed) ; + // verifico se percorso di lucidatura + bool bAllOffset = false ; + bool bPolishing = ( m_TParams.m_nType == TT_MILL_POLISHING) ; + if ( bPolishing) { + int nType = GetType() ; + if ( ( nType == POCKET_SPIRALIN || GetType() == POCKET_SPIRALOUT) && m_Params.m_dEpicyclesRad < EPS_SMALL) + bPolishing = false ; + if ( bPolishing) { + if ( ( nType == POCKET_SPIRALIN || GetType() == POCKET_SPIRALOUT) && m_Params.m_dEpicyclesDist < 100. * EPS_SMALL) { + m_pMchMgr->SetLastError( 2413, "Error in Pocketing : Toolpath not computable") ; + return false ; + } + bAllOffset = true ; + } + } + // scorro gli indici delle superfici for ( int i = 0 ; i < int( vStepInfo.size()) ; ++ i) { - // calcolo i percorsi di Pocketing + // calcolo i percorsi di Pocketing ( o di lucidatura se richiesto) ICRVCOMPOPOVECTOR vCrvPaths ; if ( ! CalcPocketing( vStepInfo[i].pSfrPock, m_TParams.m_dDiam / 2, GetOffsR(), GetSideStep(), m_Params.m_dSideAngle, m_dOpenMinSafe, m_Params.m_nSubType, true, true, m_Params.m_bInvert, - false, true, bAdjustFeed, ptStartRef, vStepInfo[i].pSfrLimit, false, dMaxOptSize, - m_Params.m_dLiTang, GetLeadInType(), vCrvPaths)) { + false, true, bAdjustFeed, ptStartRef, vStepInfo[i].pSfrLimit, bAllOffset, dMaxOptSize, + GetLeadInType(), m_Params.m_dLiTang, m_Params.m_dLiElev, GetLeadOutType(), m_Params.m_dLoTang, + bPolishing, m_Params.m_dEpicyclesRad, m_Params.m_dEpicyclesDist, vCrvPaths)) { m_pMchMgr->SetLastError( 3028, "Error in PocketingNT : Error in CalcPocketing") ; return false ; } @@ -4593,11 +4610,18 @@ PocketingNT::AddPocket( STEPINFOPOVECTOR& vStepInfo, const Vector3d& vtTool, dou // se attacco a zigzag o a spirale o a scivolo, l'elevazione va nell'attacco if ( GetLeadInType() != POCKET_LI_NONE) { double dMyLIO_ELEV_TOL = min( LIO_ELEV_TOL, dSafeZ) ; - // se prima entità in assoluto + // se prima entità in assoluto if ( bAbsFirst) { - // muovo ptP1 alla quota dell'elevazione corrente - ptP1 += vtTool * ( dCurrElev + dMyLIO_ELEV_TOL) ; - dCurrElev = - min( LIO_ELEV_TOL, dSafeZ) ; + // se lucidatura forzo il valore al parametro di elevazione in ingresso + if ( m_TParams.m_nType == TT_MILL_POLISHING) { + ptP1 += vtTool * max( m_Params.m_dLiElev, dCurrElev + LIO_ELEV_TOL) ; + dCurrElev = 0 ; + } + // altrimenti, muovo ptP1 alla quota dell'elevazione corrente + else { + ptP1 += vtTool * ( dCurrElev + dMyLIO_ELEV_TOL) ; + dCurrElev = - min( LIO_ELEV_TOL, dSafeZ) ; + } } // altrimenti else if ( ! currPath.bOutStart) @@ -5502,7 +5526,10 @@ PocketingNT::AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vect // recupero le quote per la curva Point3d ptIni ; pCrv->GetStartPoint( ptIni) ; Point3d ptFin ; pCrv->GetEndPoint( ptFin) ; - ptFin += vtN * 1.0 ; + double dExtraElev = 1.0 ; + if ( m_TParams.m_nType == TT_MILL_POLISHING) + dExtraElev = max( m_Params.m_dLiElev, 1.0) ; + ptFin += vtN * dExtraElev ; double dNini = ( ptIni - ORIG) * vtN ; double dNfin = ( ptFin - ORIG) * vtN ; AdjustCurveSlope( pCrv, dNini, dNfin) ; diff --git a/SurfFinishing.cpp b/SurfFinishing.cpp index 4116337..fa54e5b 100644 --- a/SurfFinishing.cpp +++ b/SurfFinishing.cpp @@ -2267,7 +2267,7 @@ SurfFinishing::AddZigZag( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, cons ICRVCOMPOPOVECTOR vpCrvs ; if ( ! CalcPocketing( pSfrCnt, m_TParams.m_dDiam / 2., 0., m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., POCKET_ZIGZAG, false, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, - m_Params.m_dLiTang, GetLeadInType(), vpCrvs)) { + GetLeadInType(), m_Params.m_dLiTang, 0., GetLeadOutType(), m_Params.m_dLoTang, false, 0., 0., vpCrvs)) { m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ; return false ; } @@ -2295,7 +2295,7 @@ SurfFinishing::AddOneWay( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, cons ICRVCOMPOPOVECTOR vpCrvs ; if ( ! CalcPocketing( pSfrCnt, m_TParams.m_dDiam / 2., 0., m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., POCKET_ONEWAY, false, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, - m_Params.m_dLiTang, GetLeadInType(), vpCrvs)) { + GetLeadInType(), m_Params.m_dLiTang, 0., GetLeadOutType(), m_Params.m_dLoTang, false, 0., 0., vpCrvs)) { m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ; return false ; } @@ -2323,7 +2323,7 @@ SurfFinishing::AddSpiral( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, cons ICRVCOMPOPOVECTOR vpCrvs ; if ( ! CalcPocketing( pSfrCnt, m_TParams.m_dDiam / 2., 0., m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., nType, false, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, - m_Params.m_dLiTang, GetLeadInType(), vpCrvs)) { + GetLeadInType(), m_Params.m_dLiTang, 0., GetLeadOutType(), m_Params.m_dLoTang, false, 0., 0., vpCrvs)) { m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ; return false ; } @@ -4762,7 +4762,8 @@ SurfFinishing::GetOffsetCurvesFromPencilProjection( const ICRVCOMPOPOVECTOR& vCr ICRVCOMPOPOVECTOR vCrvZigZag ; if ( ! CalcPocketing( pSfrChunk, m_TParams.m_dDiam / 2., 0., m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., POCKET_SUB_ZIGZAG, false, false, m_Params.m_bInvert, true, false, - false, P_INVALID, nullptr, true, INFINITO, INFINITO, GetLeadInType(), vCrvZigZag)) + false, P_INVALID, nullptr, true, INFINITO, GetLeadInType(), m_Params.m_dLiTang, 0., + GetLeadOutType(), m_Params.m_dLoTang, false, 0., 0., vCrvZigZag)) return false ; // inserisco le curve ricavate for ( auto& pCompo : vCrvZigZag) { @@ -5460,7 +5461,7 @@ SurfFinishing::CalcOptimalZigZagCurves( const ISurfFlatRegion* pSfrLoc, const Fr ICRVCOMPOPOVECTOR vpCrvs ; if ( ! CalcPocketing( pSfrChunk, m_TParams.m_dDiam / 2., 0., m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., nSubType, false, false, false, true, false, false, P_INVALID, nullptr, true, m_Params.m_dSideStep, - m_Params.m_dLiTang, GetLeadInType(), vpCrvs)) { + GetLeadInType(), m_Params.m_dLiTang, 0., GetLeadOutType(), m_Params.m_dLoTang, false, 0., 0., vpCrvs)) { m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ; return false ; } diff --git a/SurfRoughing.cpp b/SurfRoughing.cpp index ead270f..fda138b 100644 --- a/SurfRoughing.cpp +++ b/SurfRoughing.cpp @@ -3007,7 +3007,8 @@ SurfRoughing::CalcPaths( const INTINTVECTOR& vPocket, STEPINFOSRVECTOR& vStepInf if ( ! CalcPocketing( vStepInfo[nInd].pSfrPock, m_TParams.m_dDiam / 2, 0., m_Params.m_dSideStep, m_Params.m_dSideAngle, 5., vStepInfo[nInd].nSubType, true, true, vStepInfo[nInd].bInverted, false, true, true, ptEndLastPath, vStepInfo[nInd].pSfrLimit, false, m_Params.m_dSideStep, - m_Params.m_dLiTang, GetLeadInType(), vCrvPaths)) { + GetLeadInType(), m_Params.m_dLiTang, m_Params.m_dLiElev, GetLeadOutType(), m_Params.m_dLoTang, + false, 0., 0., vCrvPaths)) { if ( vStepInfo[nInd].bIsExtraStep) { string sWarn = "Warning in SurfRoughing : CalcPocketing failed with substep (" + ToString( vStepInfo[nInd].dDepth, 1) + ")" ; m_pMchMgr->SetWarning( 3055, sWarn) ;