From 075c0f4e95c374a3050dc74829b65a059750dc52 Mon Sep 17 00:00:00 2001 From: DarioS Date: Tue, 4 Apr 2023 12:58:27 +0200 Subject: [PATCH] EgtMachKernel : - in svuotatura aggiunta gestione minima sicurezza su ingresso da lato aperto tramite nota "OpenMinSafe=Val" in Note utente. --- Pocketing.cpp | 25 +++++++++++++++---------- Pocketing.h | 1 + 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/Pocketing.cpp b/Pocketing.cpp index 9184b58..8b820e9 100644 --- a/Pocketing.cpp +++ b/Pocketing.cpp @@ -120,6 +120,7 @@ Pocketing::Clone( void) const pPock->m_bAboveHead = m_bAboveHead ; pPock->m_bAggrBottom = m_bAggrBottom ; pPock->m_bOpenOutRaw = m_bOpenOutRaw ; + pPock->m_dOpenMinSafe = m_dOpenMinSafe ; } catch( ...) { delete pPock ; @@ -245,6 +246,7 @@ Pocketing::Pocketing( void) m_bAboveHead = true ; m_bAggrBottom = false ; m_bOpenOutRaw = false ; + m_dOpenMinSafe = 0 ; } //---------------------------------------------------------------------------- @@ -1650,6 +1652,9 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId) int nOpenOutRaw ; m_bOpenOutRaw = ( FromString( ExtractInfo( m_Params.m_sUserNotes, "OpenOutRaw="), nOpenOutRaw) && nOpenOutRaw != 0) ; + // recupero eventuale minima lunghezza di attacco su lato aperto + FromString( ExtractInfo( m_Params.m_sUserNotes, "OpenMinSafe="), m_dOpenMinSafe) ; + // se richiesta anteprima if ( nPvId != GDB_ID_NULL) { // creo gruppo per geometria di lavorazione del percorso @@ -2005,12 +2010,12 @@ Pocketing::AddZigZag( const ICurveComposite* pCompo, const Vector3d& vtTool, con if ( ! GetElevation( m_nPhase, ptStart, vtTool, m_TParams.m_dDiam / 2, vtTool, dTestElev) || dTestElev < EPS_SMALL) bOutRawLeadIn = true ; // sistemo attacco (per essere completamente fuori dal grezzo) - if ( bOutRawLeadIn || m_bOpenOutRaw) + if ( bOutRawLeadIn || m_bOpenOutRaw) vpCrvs[0]->ExtendStartByLen( m_TParams.m_dDiam / 2 + dSafeZ) ; } // se non ottimizzato e utensile che non lavora di testa poichè ingresso non fuori dal pezzo, errore - if ( ( ! bOptimizedZigZag || ! ( bOutRawLeadIn || m_bOpenOutRaw)) && m_TParams.m_nType == TT_MILL_NOTIP) { + if ( ( ! bOptimizedZigZag || ! ( bOutRawLeadIn || m_bOpenOutRaw)) && m_TParams.m_nType == TT_MILL_NOTIP) { if ( ! LeadInRawIsOk()) { m_pMchMgr->SetLastError( 2431, "Error in Pocketing : LeadIn with Mill NoTip in material") ; return false ; @@ -2122,7 +2127,7 @@ Pocketing::AddZigZag( const ICurveComposite* pCompo, const Vector3d& vtTool, con dStElev = max( dStElev, j * dStep) ; dStElev -= ( ptP1 - ptStart) * vtExtr ; // se ottimizzata e attacco nel grezzo - if ( bOptimizedZigZag && ! ( bOutRawLeadIn || m_bOpenOutRaw)) { + if ( bOptimizedZigZag && ! ( bOutRawLeadIn || m_bOpenOutRaw)) { // se richiesto attacco a zigzag o a spirale, l'elevazione va nell'attacco if ( GetLeadInType() == POCKET_LI_ZIGZAG || GetLeadInType() == POCKET_LI_HELIX) { ptP1 += vtExtr * dStElev ; @@ -3376,7 +3381,7 @@ Pocketing::AddSpiralIn( const ICurveComposite* pCompo, const Vector3d& vtTool, c bool bOutStart = ( nReg == 1 && bMidOpen) ; if ( bOutStart && ! bOptimizedTrap) { // calcolo il punto fuori - Point3d ptOut = ptMidOpen + vtMidOut * ( 0.5 * m_TParams.m_dDiam + dSafeZ) ; + Point3d ptOut = ptMidOpen + vtMidOut * ( 0.5 * m_TParams.m_dDiam + max( dSafeZ, m_dOpenMinSafe)) ; // verifico che il punto sia veramente fuori dal grezzo double dStElev ; bOutStart = ( ! GetElevation( m_nPhase, ptOut, vtTool, 0.5 * m_TParams.m_dDiam, vtTool, dStElev) || dStElev < EPS_SMALL) ; @@ -4727,7 +4732,7 @@ Pocketing::ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const V // se forzato come fuori dal grezzo if ( m_bOpenOutRaw) { - Point3d ptNewStart = ptP + vtDirP * ( m_TParams.m_dDiam / 2 + dSafeZ) ; + Point3d ptNewStart = ptP + vtDirP * ( m_TParams.m_dDiam / 2 + max( dSafeZ, m_dOpenMinSafe)) ; pCompo->AddLine( ptNewStart, ! bLeadIn) ; bIsOutsideRaw = true ; return true ; @@ -4745,7 +4750,7 @@ Pocketing::ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const V double dDistMin ; Vector3d vtNormMin ; if ( CalcDistanceFromRawSurface( m_nPhase, ptP, vtNorm, dDistMin, vtNormMin)) { - if ( abs( dDistMin) < abs( dDist) && abs( dDistMin) > EPS_SMALL) { + if ( abs( dDistMin) < abs( dDist) && abs( dDistMin) > EPS_SMALL) { dDistRef = dDistMin ; dCorr = dDist / dDistMin ; } @@ -4753,12 +4758,12 @@ Pocketing::ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const V // se vicino al bordo del grezzo if ( dDistRef < m_TParams.m_dDiam / 2 + EPS_SMALL) { - Point3d ptTest = ptP + vtDirP * ( dDist + ( m_TParams.m_dDiam / 2 + dSafeZ) * dCorr) ; + Point3d ptTest = ptP + vtDirP * ( dDist + ( m_TParams.m_dDiam / 2 + max( dSafeZ, m_dOpenMinSafe)) * dCorr) ; ptTest += - vtTool * dDepth ; double dTestElev ; // se è fuori dal grezzo if ( ! GetElevation( m_nPhase, ptTest, vtTool, m_TParams.m_dDiam / 2, vtTool, dTestElev) || dTestElev < EPS_SMALL) { - Point3d ptNewStart = ptP + vtDirP * ( dDist + ( m_TParams.m_dDiam / 2 + dSafeZ) * dCorr) ; + Point3d ptNewStart = ptP + vtDirP * ( dDist + ( m_TParams.m_dDiam / 2 + max( dSafeZ, m_dOpenMinSafe)) * dCorr) ; pCompo->AddLine( ptNewStart, ! bLeadIn) ; bIsOutsideRaw = true ; } @@ -4778,12 +4783,12 @@ Pocketing::ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const V // se vicino al bordo del grezzo if ( dDist < m_TParams.m_dDiam / 2 + EPS_SMALL) { - Point3d ptTestO = ptP + vtDirO * ( dDist + m_TParams.m_dDiam / 2 + dSafeZ) ; + Point3d ptTestO = ptP + vtDirO * ( dDist + m_TParams.m_dDiam / 2 + max( dSafeZ, m_dOpenMinSafe)) ; ptTestO += - vtTool * dDepth ; double dTestElevO ; // se è fuori dal grezzo uso inizio ruotato if ( ! GetElevation( m_nPhase, ptTestO, vtTool, m_TParams.m_dDiam / 2, vtTool, dTestElevO) || dTestElevO < EPS_SMALL) { - Point3d ptNewStart = ptP + vtDirO * ( dDist + m_TParams.m_dDiam / 2 + dSafeZ) ; + Point3d ptNewStart = ptP + vtDirO * ( dDist + m_TParams.m_dDiam / 2 + max( dSafeZ, m_dOpenMinSafe)) ; pCompo->AddLine( ptNewStart, ! bLeadIn) ; bIsOutsideRaw = true ; } diff --git a/Pocketing.h b/Pocketing.h index d85b00d..a096a30 100644 --- a/Pocketing.h +++ b/Pocketing.h @@ -192,4 +192,5 @@ class Pocketing : public Machining Vector3d m_vtAggrBottom ; // vettore direzione ausiliaria aggregato da sotto AggrBottom m_AggrBottom ; // dati eventuale aggregato da sotto bool m_bOpenOutRaw ; // flag forzatura lati aperti sempre fuori dal grezzo + double m_dOpenMinSafe ; // minima distanza di sicurezza di attacco su lato aperto } ; \ No newline at end of file