From eb98dfcf07d463a7ecfb0d3f37318468702739b2 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Sat, 11 Jul 2020 09:24:56 +0000 Subject: [PATCH] =?UTF-8?q?EgtMachKernel=202.2g3=20:=20-=20quando=20si=20p?= =?UTF-8?q?rendono=20gli=20angoli=20finali=20della=20lavorazione=20precede?= =?UTF-8?q?nte,=20possibilit=C3=A0=20di=20saltare=20le=20posizioni=20RISE?= =?UTF-8?q?=20-=20in=20tagli=20con=20lama=20corretta=20gestione=20spessore?= =?UTF-8?q?=20lama=20su=20facce=20lavorate=20al=20contrario.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EgtMachKernel.rc | Bin 11774 -> 11774 bytes Operation.cpp | 23 ++++++++++++++++------- Operation.h | 4 ++-- Sawing.cpp | 14 ++++++++------ 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 58fac06dac5d14442e58ce4263647ba246ffaf4b..69591e1c38522073ae287d6b91c5edf5b8d65bdd 100644 GIT binary patch delta 97 zcmewt{V#gMFE&Qw&A-`fnHh~IKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmUD-Bai?9 delta 97 zcmewt{V#gMFE&P_&A-`fnHh~HKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmU8!BZvS1 diff --git a/Operation.cpp b/Operation.cpp index 1afdacf..8f642c2 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -1027,7 +1027,7 @@ Operation::GetClPathInitialAxesValues( int nClPathId, DBLVECTOR& vAxVal) const //---------------------------------------------------------------------------- bool -Operation::GetFinalAxesValues( DBLVECTOR& vAxVal) const +Operation::GetFinalAxesValues( bool bSkipRise, DBLVECTOR& vAxVal) const { if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) return false ; @@ -1038,17 +1038,26 @@ Operation::GetFinalAxesValues( DBLVECTOR& vAxVal) const // recupero l'ultimo percorso CL int nClPathId = m_pGeomDB->GetLastGroupInGroup( nClId) ; // restituisco i valori finali degli assi di questo percorso di lavorazione - return GetClPathFinalAxesValues( nClPathId, vAxVal) ; + return GetClPathFinalAxesValues( nClPathId, bSkipRise, vAxVal) ; } //---------------------------------------------------------------------------- bool -Operation::GetClPathFinalAxesValues( int nClPathId, DBLVECTOR& vAxVal) const +Operation::GetClPathFinalAxesValues( int nClPathId, bool bSkipRise, DBLVECTOR& vAxVal) const { if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) return false ; // recupero l'ultima entità di questo percorso int nEntId = m_pGeomDB->GetLastInGroup( nClPathId) ; + // se richiesto di ignorare le entità RISE + if ( bSkipRise) { + while ( nEntId != GDB_ID_NULL) { + string sName ; + if ( ! m_pGeomDB->GetName( nEntId, sName) || sName != MCH_CL_RISE) + break ; + nEntId = m_pGeomDB->GetPrev( nEntId) ; + } + } // recupero i dati Cam dell'entità CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( nEntId)) ; if ( pCamData == nullptr) @@ -1129,7 +1138,7 @@ Operation::CalculateAxesValues( const string& sHint, bool bSolChExact) DBLVECTOR vAxVal ; // se utensile non cambiato, uso gli angoli finali della lavorazione precedente if ( ! sPrevTool.empty() && ! ToolChangeNeeded( *pPrevOp, *this) && - pPrevOp->GetFinalAxesValues( vAxVal)) { + pPrevOp->GetFinalAxesValues( true, vAxVal)) { for ( int i = 0 ; i < nRotAxes ; ++ i) vAxRotPrec[i] = vAxVal[nLinAxes + i] ; } @@ -1606,7 +1615,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) // cancello risalita lavorazione precedente pPrevOp->RemoveRise() ; // recupero posizione finale lavorazione precedente - if ( ! pPrevOp->GetFinalAxesValues( vAxVal)) + if ( ! pPrevOp->GetFinalAxesValues( false, vAxVal)) return false ; // se richiesta verifica collegamento con lavorazione precedente if ( bVerifyPreviousLink) { @@ -1676,7 +1685,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) // cancello eventuale risalita parziale della lavorazione precedente pPrevOp->RemoveRise() ; // recupero le nuove quote finali (per calcolare il corretto delta) - pPrevOp->GetFinalAxesValues( vAxVal) ; + pPrevOp->GetFinalAxesValues( false, vAxVal) ; // aggiungo risalita a Zsafe if ( ! pPrevOp->AddRise( vAxVal, dSafeZ - vAxVal[2])) return false ; @@ -1751,7 +1760,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) bMaxZ = false ; // recupero nuovi finali RemoveRise( nClPathId) ; - if ( ! GetClPathFinalAxesValues( nClPathId, vAxVal)) + if ( ! GetClPathFinalAxesValues( nClPathId, false, vAxVal)) bOk = false ; // passo al successivo nPrevClPathId = nClPathId ; diff --git a/Operation.h b/Operation.h index 911924c..84f34b3 100644 --- a/Operation.h +++ b/Operation.h @@ -93,8 +93,8 @@ class Operation : public IUserObj bool GetInitialAxesValues( DBLVECTOR& vAxVal) const ; bool GetClPathInitialAxesValues( int nClPathId, DBLVECTOR& vAxVal) const ; - bool GetFinalAxesValues( DBLVECTOR& vAxVal) const ; - bool GetClPathFinalAxesValues( int nClPathId, DBLVECTOR& vAxVal) const ; + bool GetFinalAxesValues( bool bSkipRise, DBLVECTOR& vAxVal) const ; + bool GetClPathFinalAxesValues( int nClPathId, bool bSkipRise, DBLVECTOR& vAxVal) const ; std::string ExtractInfo( const std::string& sNotes, const std::string& sKey) const ; std::string ExtractHint( const std::string& sNotes) const ; bool CalculateAxesValues( const std::string& sHint, bool bSolChExact = false) ; diff --git a/Sawing.cpp b/Sawing.cpp index 333ce09..b1039e2 100644 --- a/Sawing.cpp +++ b/Sawing.cpp @@ -1194,7 +1194,7 @@ Sawing::GetCurve( SelData Id) pCrvCompo->ToGlob( frGlob) ; vtN.ToGlob( frGlob) ; // sistemazioni varie - AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, m_TParams.m_dThick) ; + AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, 0) ; // aggiusto lato lavoro e inverti, angolo di fianco e lato mandrino if ( m_Params.m_nWorkSide == SAW_WS_CENTER) m_Params.m_nWorkSide = SAW_WS_RIGHT ; @@ -1207,12 +1207,12 @@ Sawing::GetCurve( SelData Id) // taglio soprasquadra else if ( dSideAng < ANG_RIGHT) { m_Params.m_dSideAngle = ANG_RIGHT - dSideAng ; - m_Params.m_nHeadSide = ( m_Params.m_nWorkSide = SAW_WS_RIGHT ? SAW_HS_RIGHT : SAW_HS_LEFT) ; + m_Params.m_nHeadSide = ( m_Params.m_nWorkSide == SAW_WS_RIGHT ? SAW_HS_RIGHT : SAW_HS_LEFT) ; } // taglio sottosquadra else { m_Params.m_dSideAngle = ANG_RIGHT - dSideAng ; - m_Params.m_nHeadSide = ( m_Params.m_nWorkSide = SAW_WS_RIGHT ? SAW_HS_LEFT : SAW_HS_RIGHT) ; + m_Params.m_nHeadSide = ( m_Params.m_nWorkSide == SAW_WS_RIGHT ? SAW_HS_LEFT : SAW_HS_RIGHT) ; } // la restituisco return Release( pCrvCompo) ; @@ -1241,7 +1241,7 @@ Sawing::GetCurve( SelData Id) pCrvCompo->ToGlob( frGlob) ; vtN.ToGlob( frGlob) ; // sistemazioni varie - AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, m_TParams.m_dThick) ; + AdjustCurveFromSurf( pCrvCompo, TOOL_ORTUP, FACE_DOWN, 0) ; // aggiusto lato lavoro e inverti, angolo di fianco e lato mandrino if ( m_Params.m_nWorkSide == SAW_WS_CENTER) m_Params.m_nWorkSide = SAW_WS_RIGHT ; @@ -1254,12 +1254,12 @@ Sawing::GetCurve( SelData Id) // taglio soprasquadra else if ( dSideAng < ANG_RIGHT) { m_Params.m_dSideAngle = ANG_RIGHT - dSideAng ; - m_Params.m_nHeadSide = ( m_Params.m_nWorkSide = SAW_WS_RIGHT ? SAW_HS_RIGHT : SAW_HS_LEFT) ; + m_Params.m_nHeadSide = ( m_Params.m_nWorkSide == SAW_WS_RIGHT ? SAW_HS_RIGHT : SAW_HS_LEFT) ; } // taglio sottosquadra else { m_Params.m_dSideAngle = ANG_RIGHT - dSideAng ; - m_Params.m_nHeadSide = ( m_Params.m_nWorkSide = SAW_WS_RIGHT ? SAW_HS_LEFT : SAW_HS_RIGHT) ; + m_Params.m_nHeadSide = ( m_Params.m_nWorkSide == SAW_WS_RIGHT ? SAW_HS_LEFT : SAW_HS_RIGHT) ; } // la restituisco return Release( pCrvCompo) ; @@ -2031,6 +2031,8 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V double dActBstep = GetStepBack() ; if ( abs( m_Params.m_dSideAngle) > 10 * EPS_ANG_SMALL) { dActStep = GetStepSideAng() ; + if ( dActStep < EPS_SMALL) + dActStep = m_Params.m_dStep ; dActBstep = GetStepSideAngBack() ; } if ( dActBstep < EPS_SMALL)