diff --git a/Operation.cpp b/Operation.cpp index 9423c6f..3a73995 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -1895,6 +1895,8 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) } // altrimenti aggiungo uscita per cambio utensile alla lavorazione precedente e parto da questa else { + // imposto la lavorazione precedente come corrente + m_pMchMgr->SetCurrMachining( pPrevOp->GetOwner()) ; // imposto l'utensile precedente per i calcoli macchina if ( ! m_pMchMgr->SetCalcTool( pPrevOp->GetToolName(), pPrevOp->GetHeadName(), pPrevOp->GetExitNbr())) return false ; @@ -1908,6 +1910,8 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) if ( ! m_pMchMgr->GetAllCurrAxesHomePos( vAxVal)) return false ; } + // ripristino la lavorazione corrente + m_pMchMgr->SetCurrMachining( GetOwner()) ; // imposto l'utensile per i calcoli macchina if ( ! m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr())) return false ; diff --git a/Simulator.cpp b/Simulator.cpp index 58adec3..09a9528 100644 --- a/Simulator.cpp +++ b/Simulator.cpp @@ -435,45 +435,51 @@ Simulator::UpdateTool( bool bFirst) // ripristino l'utensile corrente m_pMchMgr->TdbSetCurrTool( m_sTool) ; } + // verifico se cambierà + bool bDiffTool = ( sTool != m_sTool) ; // se cambierà ed esiste il corrente, lo scarico - if ( sTool != m_sTool && ! m_sTool.empty()) { + if ( bDiffTool && ! m_sTool.empty()) { // eventuale lancio script per scarico utensile if ( ! OnToolDeselect( sTool, sHead, nExit, sTcPos)) return false ; } - // se cambiato oppure prima volta, attivo l'utensile della lavorazione - if ( sTool != m_sTool || bFirst) { - // se prima volta, pulisco la testa - if ( bFirst) - m_pMchMgr->ResetHeadSet( sHead) ; - // carico l'utensile (e lo rendo corrente) - if ( ! m_pMchMgr->SetCalcTool( sTool, sHead, nExit)) - return false ; - m_sTool = sTool ; - m_sHead = sHead ; - m_nExit = nExit ; - m_pMchMgr->TdbGetCurrToolParam( TPA_DIAM, m_dTDiam) ; - // aggiorno gli assi macchina - if ( ! UpdateAxes()) - return false ; - // eventuali offset per Vmill (per adattare lo ZeroT macchina con quello di Zmap) - int nToolType ; m_pMchMgr->TdbGetCurrToolParam( TPA_TYPE, nToolType) ; - if ( nToolType == TT_MORTISE_STD) { - double dThick ; m_pMchMgr->TdbGetCurrToolParam( TPA_THICK, dThick) ; - m_dVmTdOffs = 0 ; - m_dVmAdOffs = 0.5 * dThick ; - } - 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) ? -dLen + dThick : 0) ; - m_dVmAdOffs = 0 ; - } - else { - m_dVmTdOffs = 0 ; - m_dVmAdOffs = 0 ; - } - // eventuale lancio script + // se prima volta, pulisco la testa + if ( bFirst) + m_pMchMgr->ResetHeadSet( sHead) ; + // recupero la lavorazione corrente e imposto la nuova + int nCurrMchId = m_pMchMgr->GetCurrMachining() ; + m_pMchMgr->SetCurrMachining( m_nOpId) ; + // carico l'utensile (e lo rendo corrente) + if ( ! m_pMchMgr->SetCalcTool( sTool, sHead, nExit)) + return false ; + m_sTool = sTool ; + m_sHead = sHead ; + m_nExit = nExit ; + m_pMchMgr->TdbGetCurrToolParam( TPA_DIAM, m_dTDiam) ; + // ripristino la lavorazione corrente + m_pMchMgr->SetCurrMachining( nCurrMchId) ; + // aggiorno gli assi macchina + if ( ! UpdateAxes()) + return false ; + // eventuali offset per Vmill (per adattare lo ZeroT macchina con quello di Zmap) + int nToolType ; m_pMchMgr->TdbGetCurrToolParam( TPA_TYPE, nToolType) ; + if ( nToolType == TT_MORTISE_STD) { + double dThick ; m_pMchMgr->TdbGetCurrToolParam( TPA_THICK, dThick) ; + m_dVmTdOffs = 0 ; + m_dVmAdOffs = 0.5 * dThick ; + } + 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) ? -dLen + dThick : 0) ; + m_dVmAdOffs = 0 ; + } + else { + m_dVmTdOffs = 0 ; + m_dVmAdOffs = 0 ; + } + // se cambiato oppure prima volta, lancio lo script di selezione + if ( bDiffTool || bFirst) { if ( ! OnToolSelect( m_sTool, sHead, nExit, sTcPos, bFirst)) return false ; }