From ddc91c60e9f0572fe135f2156387ec68acd0cec3 Mon Sep 17 00:00:00 2001 From: SaraP Date: Fri, 17 Jun 2022 17:55:47 +0200 Subject: [PATCH] EgtMachKernel : - aggiunta lavorazione a tuffo su tutto il percorso in mortasatura. --- Mortising.cpp | 58 ++++++++++++++++++++++++++++++++++++++------------- Mortising.h | 3 ++- 2 files changed, 45 insertions(+), 16 deletions(-) diff --git a/Mortising.cpp b/Mortising.cpp index 2acba5d..f204c2c 100644 --- a/Mortising.cpp +++ b/Mortising.cpp @@ -1383,8 +1383,10 @@ Mortising::ProcessPath( int nPathId, int nPvId, int nClId) SetToolDir( vtTool) ; SetAuxDir( vtAux) ; - // Calcolo la mortasatura - if ( ! GenerateMortisingCl( pCompo, vtTool, dDepth, dElev, dOkStep, nPlunge)) + // Calcolo la mortasatura + Point3d ptStart ; pCompo->GetStartPoint( ptStart) ; + Point3d ptEnd ; pCompo->GetEndPoint( ptEnd) ; + if ( ! GenerateMortisingCl( ptStart, ptEnd, vtTool, dDepth, dElev, dOkStep, nPlunge)) return false ; } @@ -1470,12 +1472,9 @@ Mortising::GenerateMortisingPv( int nPathId, const ICurveComposite* pCompo) //---------------------------------------------------------------------------- bool -Mortising::GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dElev, double dOkStep, int nPlunge) +Mortising::GenerateMortisingCl( const Point3d& ptStart, const Point3d& ptEnd, const Vector3d& vtTool, double dDepth, double dElev, + double dOkStep, int nPlunge, bool bFirst) { - // estremi della curva composita - Point3d ptStart ; pCompo->GetStartPoint( ptStart) ; - Point3d ptEnd ; pCompo->GetEndPoint( ptEnd) ; - // compensazione elevazione/affondamento double dDelta = dElev - dDepth ; @@ -1490,9 +1489,11 @@ Mortising::GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& v GetElevation( m_nPhase, ptLi, vtTool, GetRadiusForStartEndElevation(), vtTool, dStartElev) ; // 1 -> punto approccio - SetFlag( 1) ; + int nFirstFlag = bFirst ? 1 : 0 ; + SetFlag( nFirstFlag) ; Point3d ptP1 = ( nPlunge != 2 ? ptStart : ptEnd) + vtTool * ( dDelta + dStartElev + dSafeZ) ; - if ( AddRapidStart( ptP1) == GDB_ID_NULL) + int nStart = bFirst ? AddRapidStart( ptP1) : AddRapidMove( ptP1) ; + if ( nStart == GDB_ID_NULL) return false ; SetFlag( 0) ; @@ -1512,7 +1513,7 @@ Mortising::GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& v // eseguo ciclo a seconda del tipo di step Point3d ptLast ; - if ( nPlunge == 1) { + if ( nPlunge == 1 || nPlunge == 3) { // 3 -> punto in affondamento SetFeed( GetStartFeed()) ; SetFlag( 0) ; @@ -1592,7 +1593,7 @@ Mortising::GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& v // altrimenti ridetermino elevazione su fine percorso di lavoro if ( ! bUnderEnd) GetElevation( m_nPhase, ptLo, vtTool, GetRadiusForStartEndElevation(), vtTool, dEndElev) ; - + // 6 -> ritorno all'approccio SetFeed( GetEndFeed()) ; SetFlag( 104) ; // risalita sopra la fine @@ -1600,11 +1601,38 @@ Mortising::GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& v if ( AddLinearMove( ptP6) == GDB_ID_NULL) return false ; - // reset dati di movimento - ResetMoveData() ; + if ( nPlunge == 3) { - // incremento numero di mortasature - ++ m_nMortises ; + Vector3d vtDir = ptEnd - ptStart ; + double dLen = vtDir.Len() ; + vtDir.Normalize() ; + + int kMax = ( int) floor( dLen / m_TParams.m_dDiam) ; + for ( int k = 1 ; k <= kMax ; k ++) { + Point3d ptNewStart = ptStart + vtDir * k * m_TParams.m_dDiam ; + // se ultimo punto verifico non sia già quello finale + if ( k == kMax && AreSamePointEpsilon( ptNewStart, ptEnd, 10 * EPS_SMALL)) { + if ( ! GenerateMortisingCl( ptEnd, ptStart, vtTool, dDepth, dElev, dOkStep, 0, false)) + return false ; + } + else { + if ( ! GenerateMortisingCl( ptNewStart, ptEnd, vtTool, dDepth, dElev, dOkStep, 1, false)) + return false ; + } + } + // evenutale ultimo punto + Point3d ptLast = ptStart + vtDir * kMax * m_TParams.m_dDiam ; + if ( ! AreSamePointEpsilon( ptEnd, ptLast, 10 * EPS_SMALL)) + if ( ! GenerateMortisingCl( ptEnd, ptStart, vtTool, dDepth, dElev, dOkStep, 0, false)) + return false ; + } + + if ( bFirst) { + // reset dati di movimento + ResetMoveData() ; + // incremento numero di mortasature + ++ m_nMortises ; + } return true ; } diff --git a/Mortising.h b/Mortising.h index 094acfb..07d3336 100644 --- a/Mortising.h +++ b/Mortising.h @@ -74,7 +74,8 @@ class Mortising : public Machining bool ProcessPath( int nPathId, int nPvId, int nClId) ; bool CalcPathElevation( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dRad, double dThick, double& dElev) const ; bool GenerateMortisingPv( int nPathId, const ICurveComposite* pCompo) ; - bool GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dElev, double dOkStep, int nPlunge) ; + bool GenerateMortisingCl( const Point3d& ptStart, const Point3d& ptEnd, const Vector3d& vtTool, double dDepth, double dElev, double dOkStep, + int nPlunge, bool bFirst = true) ; double GetRadiusForStartEndElevation( void) const ; private :