From ac570fe364613b75aae331399be09e352d9ad4ea Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 7 Jan 2021 07:54:05 +0000 Subject: [PATCH] EgtMachKernel : - in Milling modificata GetPointOutOfRaw per teste da sotto - in TestCollisionAvoid di Operation adattato richiamo di CDeCylClosedSurfTm per nuovo ordine parametri - in Simulator corretta gestione lame con gambo per Virtual Milling - in Simulator dopo OnSimulMoveStart con movimento in rapido aggiorno quote degli assi disabilitati dal mask. --- Milling.cpp | 7 ++++--- Operation.cpp | 2 +- Simulator.cpp | 9 ++++++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Milling.cpp b/Milling.cpp index ed98ba9..2eb2e5a 100644 --- a/Milling.cpp +++ b/Milling.cpp @@ -4909,11 +4909,12 @@ Milling::GetPointOutOfRaw( const Point3d& ptP, const Vector3d& vtTool, double dE } // per lame else { - // determino se l'inizio dell'attacco è fuori dal grezzo (considero movimento lama in Z) + // determino se l'inizio dell'attacco è fuori dal grezzo (considero movimento lama in +/- Z) double dTemp ; - if ( ! GetElevation( m_nPhase, ptP, vtTool, 0.5 * m_TParams.m_dDiam, Z_AX, dTemp) || dTemp > 10 * EPS_SMALL) + Vector3d vtMove = ( m_bAboveHead ? Z_AX : -Z_AX) ; + if ( ! GetElevation( m_nPhase, ptP, vtTool, 0.5 * m_TParams.m_dDiam, vtMove, dTemp) || dTemp > 10 * EPS_SMALL) return false ; - if ( ! GetElevation( m_nPhase, ptP + vtTool * m_TParams.m_dThick, vtTool, 0.5 * m_TParams.m_dDiam, Z_AX, dTemp) || dTemp > 10 * EPS_SMALL) + if ( ! GetElevation( m_nPhase, ptP + vtTool * m_TParams.m_dThick, vtTool, 0.5 * m_TParams.m_dDiam, vtMove, dTemp) || dTemp > 10 * EPS_SMALL) return false ; return true ; } diff --git a/Operation.cpp b/Operation.cpp index 28bf667..31b8799 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -2570,7 +2570,7 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn // traslo il riferimento per avere il cilindro centrato sull'asse Y in positivo frHsol.Translate( frHsol.VersZ() * ptMin.z) ; // verifica di collisione tra cilindro e solido - if ( pStm == nullptr || CDeCylClosedSurfTm( frHsol, vtDiag.z, max( vtDiag.x, vtDiag.y) / 2, dSafeDist, *pStm)) { + if ( pStm == nullptr || CDeCylClosedSurfTm( frHsol, max( vtDiag.x, vtDiag.y) / 2, vtDiag.z, dSafeDist, *pStm)) { bCollide = true ; break ; } diff --git a/Simulator.cpp b/Simulator.cpp index 1024454..8be3530 100644 --- a/Simulator.cpp +++ b/Simulator.cpp @@ -462,7 +462,7 @@ Simulator::UpdateTool( bool bFirst) else if ( nToolType == TT_SAW_STD || nToolType == TT_SAW_FLAT) { double dLen ; m_pMchMgr->TdbGetCurrToolParam( TPA_LEN, dLen) ; double dThick ; m_pMchMgr->TdbGetCurrToolParam( TPA_THICK, dThick) ; - m_dVmTdOffs = - dLen + dThick ; + m_dVmTdOffs = ( ( dLen <= dThick) ? -dLen + dThick : 0) ; m_dVmAdOffs = 0 ; } else { @@ -924,6 +924,13 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove) nStatus = ( Stopped() ? MCH_SIM_STOP : ( nErr == 1 ? MCH_SIM_OUTSTROKE : MCH_SIM_ERR)) ; return false ; } + // Se movimento in rapido aggiorno quote degli assi disabilitati dal mask + if ( nMoveType == 0) { + for ( size_t i = 0 ; i < m_AxesName.size() ; ++ i) { + if ( ( pCamData->GetAxesMask() & 1 << i) == 0) + AxesEnd[i] = m_AxesVal[i] ; + } + } } // Dati per eventuale verifica di collisione