EgtMachKernel 2.7g2 :

- ulteriori modifiche per NewLinkManager.
This commit is contained in:
Dario Sassi
2025-07-09 12:41:28 +02:00
parent 2ed88f66e9
commit e39fbd8707
4 changed files with 66 additions and 67 deletions
+64 -65
View File
@@ -2724,9 +2724,9 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink)
if ( IsEmpty( NEED_ONE_TP_OK))
return true ;
// se nuova gestione collegamenti tra lavorazioni oppure robot
if ( m_pMchMgr->GetCurrMachine()->GetNewLinkMgr() || m_pMchMgr->GetCurrIsRobot())
return AdjustStartEndMovementsNew( bVerifyPreviousLink) ;
// se nuova gestione collegamenti tra lavorazioni (sempre per i robot)
if ( m_pMchMgr->GetCurrMachine()->GetNewLinkMgr())
return AdjustStartEndMovementsNew() ;
// altrimenti modalità standard
else
return AdjustStartEndMovementsStd( bVerifyPreviousLink) ;
@@ -3029,7 +3029,7 @@ Operation::AdjustStartEndMovementsStd( bool bVerifyPreviousLink)
//----------------------------------------------------------------------------
bool
Operation::AdjustStartEndMovementsNew( bool bVerifyPreviousLink)
Operation::AdjustStartEndMovementsNew( void)
{
// recupero ultima operazione precedente non vuota o che richiede home precedente
// (disposizione qui considerata non vuota anche se nella path contiene solo comandi ausiliari)
@@ -3048,22 +3048,18 @@ Operation::AdjustStartEndMovementsNew( bool bVerifyPreviousLink)
if ( pPrevOp != nullptr && ! pPrevOp->IsEmpty( NEED_ONE_TP_OK))
sPrevTool = pPrevOp->GetToolName() ;
// determino posizione precedente assi
bool bMaxZ = false ;
// *** Se primo utensile o richiesto, uso la posizione home
if ( sPrevTool.empty() || NeedPrevHome()) {
// imposto l'utensile per i calcoli macchina
if ( ! m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()))
return false ;
// si parte da Z massima
bMaxZ = true ;
// eventuale collegamento speciale
if ( bVerifyPreviousLink) {
// eseguo collegamento speciale
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, this, GDB_ID_NULL))
return false ;
}
// sistemo approccio da Zmax
DBLVECTOR vAxVal ;
if ( ! AdjustOneStartEndMovement( GetFirstFullToolpath(), GDB_ID_NULL, nullptr, vAxVal, true))
return false ;
// eseguo collegamento speciale
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, this, GDB_ID_NULL))
return false ;
}
// *** Se utensile non cambiato o su diversa uscita della stessa testa, uso posizione finale della lavorazione precedente
@@ -3071,21 +3067,18 @@ Operation::AdjustStartEndMovementsNew( bool bVerifyPreviousLink)
// imposto l'utensile per i calcoli macchina
if ( ! m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()))
return false ;
// se richiesta verifica collegamento con lavorazione precedente
if ( bVerifyPreviousLink) {
// cancello eventuale risalita finale lavorazione precedente
pPrevOp->RemoveRise() ;
// recupero posizione finale lavorazione precedente
DBLVECTOR vAxVal ;
if ( ! pPrevOp->GetFinalAxesValues( false, vAxVal))
return false ;
// sistemo collegamento con lavorazione precedente
if ( ! AdjustOneStartEndMovement( GetFirstFullToolpath(), GDB_ID_NULL, pPrevOp, vAxVal, bMaxZ))
return false ;
// gestione collegamento speciale
if ( ! ManageSpecialLink( pPrevOp, GDB_ID_NULL, this, GDB_ID_NULL))
return false ;
}
// cancello eventuale risalita finale lavorazione precedente
pPrevOp->RemoveRise() ;
// recupero posizione finale lavorazione precedente
DBLVECTOR vAxVal ;
if ( ! pPrevOp->GetFinalAxesValues( false, vAxVal))
return false ;
// sistemo collegamento con lavorazione precedente
if ( ! AdjustOneStartEndMovement( GetFirstFullToolpath(), GDB_ID_NULL, pPrevOp, vAxVal, false))
return false ;
// gestione collegamento speciale
if ( ! ManageSpecialLink( pPrevOp, GDB_ID_NULL, this, GDB_ID_NULL))
return false ;
}
// *** Altrimenti aggiungo uscita per cambio utensile alla lavorazione precedente e parto da questa
@@ -3101,26 +3094,22 @@ Operation::AdjustStartEndMovementsNew( bool bVerifyPreviousLink)
if ( ! pPrevOp->AddRise( vAxVal))
return false ;
}
// se richiesta verifica collegamento con lavorazione precedente
if ( bVerifyPreviousLink) {
// eventuale rilascio utensile speciale di lavorazione precedente
if ( ! pPrevOp->ManageSpecialLink( pPrevOp, GDB_ID_NULL, nullptr, GDB_ID_NULL))
return false ;
}
// eventuale rilascio utensile speciale di lavorazione precedente
if ( ! pPrevOp->ManageSpecialLink( pPrevOp, GDB_ID_NULL, nullptr, GDB_ID_NULL))
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 ;
// si parte da Z massima
bMaxZ = true ;
// eventuale presa utensile speciale di lavorazione corrente
if ( bVerifyPreviousLink) {
// eseguo verifica
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, this, GDB_ID_NULL))
return false ;
}
// sistemo approccio da Zmax
DBLVECTOR vAxVal ;
if ( ! AdjustOneStartEndMovement( GetFirstFullToolpath(), GDB_ID_NULL, nullptr, vAxVal, true))
return false ;
// eseguo verifica
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, this, GDB_ID_NULL))
return false ;
}
// aggiusto il collegamento iniziale di ogni percorso di lavoro successivo al primo
@@ -3128,21 +3117,17 @@ Operation::AdjustStartEndMovementsNew( bool bVerifyPreviousLink)
int nPrevClPathId = GetFirstFullToolpath() ;
int nClPathId = GetNextFullToolpath( nPrevClPathId) ;
while ( bOk && nClPathId != GDB_ID_NULL) {
// se richiesta verifica collegamento con lavorazione precedente
if ( bVerifyPreviousLink) {
// recupero nuovi finali senza risalite
RemoveRise( nPrevClPathId) ;
DBLVECTOR vAxVal ;
if ( ! GetClPathFinalAxesValues( nPrevClPathId, false, vAxVal))
bOk = false ;
// sistemo collegamento con precedente
if ( ! AdjustOneStartEndMovement( nClPathId, nPrevClPathId, nullptr, vAxVal, bMaxZ))
bOk = false ;
// gestione collegamento speciale ( tra due percorsi della stessa lavorazione)
if ( ! ManageSpecialLink( this, nPrevClPathId, this, nClPathId))
return false ;
}
bMaxZ = false ;
// recupero nuovi finali senza risalite
RemoveRise( nPrevClPathId) ;
DBLVECTOR vAxVal ;
if ( ! GetClPathFinalAxesValues( nPrevClPathId, false, vAxVal))
bOk = false ;
// sistemo collegamento con precedente
if ( ! AdjustOneStartEndMovement( nClPathId, nPrevClPathId, nullptr, vAxVal, false))
bOk = false ;
// gestione collegamento speciale ( tra due percorsi della stessa lavorazione)
if ( ! ManageSpecialLink( this, nPrevClPathId, this, nClPathId))
return false ;
// passo al successivo
nPrevClPathId = nClPathId ;
nClPathId = GetNextFullToolpath( nClPathId) ;
@@ -3153,10 +3138,8 @@ Operation::AdjustStartEndMovementsNew( bool bVerifyPreviousLink)
DBLVECTOR vAxVal ;
bOk = bOk && AddRise( vAxVal) ;
// nuova verifica aree protette alla fine
if ( bVerifyPreviousLink) {
if ( ! ManageSpecialLink( this, GDB_ID_NULL, nullptr, GDB_ID_NULL))
return false ;
}
if ( ! ManageSpecialLink( this, GDB_ID_NULL, nullptr, GDB_ID_NULL))
return false ;
// se ultima operazione o la successiva lo richiede, vado in home
int nNextOpId = m_pMchMgr->GetNextActiveOperation( m_nOwnerId) ;
@@ -4245,6 +4228,12 @@ Operation::GetExtraZ( const DBLVECTOR& vAx1, const Vector3d& vtTool1,
if ( pMch == nullptr)
return false ;
// Se nuova gestione collegamenti, non fa niente
if ( m_pMchMgr->GetCurrMachine()->GetNewLinkMgr()) {
dExtraZ = 0 ;
return true ;
}
// Flag per posizione sicura in alto o in basso
int nHeadId = pMch->GetCurrHead() ;
bool bZHomeDown ;
@@ -4378,6 +4367,11 @@ Operation::GetRotationAtZmax( void) const
Machine* pMch = ( m_pMchMgr != nullptr ? m_pMchMgr->GetCurrMachine() : nullptr) ;
if ( pMch == nullptr)
return false ;
// Se nuova gestione collegamenti, non fa niente
if ( m_pMchMgr->GetCurrMachine()->GetNewLinkMgr())
return false ;
// Se testa con Info ROTATZMAX la recupero e restituisco abilitazione rotazione a Zmax
int nHeadId = pMch->GetCurrHead() ;
int nVal = 0 ;
@@ -4392,6 +4386,11 @@ Operation::ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, const
Machine* pMch = ( m_pMchMgr != nullptr ? m_pMchMgr->GetCurrMachine() : nullptr) ;
if ( pMch == nullptr)
return true ;
// Se nuova gestione collegamenti, non fa niente
if ( m_pMchMgr->GetCurrMachine()->GetNewLinkMgr())
return false ;
// Recupero numero assi e ne verifico la costanza
int nLinAxes = m_pMchMgr->GetCurrLinAxes() ;
int nRotAxes = m_pMchMgr->GetCurrRotAxes() ;
@@ -4945,8 +4944,8 @@ Operation::SpecialMoveZup( DBLVECTOR& vAx, Vector3d& vtTool, int& nFlag, int& nF
static const string EVAR_MODIF = ".MODIF" ; // OUT (bool) flag di modifica effettuata
static const string ON_SPECIAL_MOVEZUP = "OnSpecialMoveZup" ;
// se funzione non implementata
if ( ! pMch->LuaExistsFunction( ON_SPECIAL_MOVEZUP)) {
// se nuova gestione collegamenti o funzione non implementata
if ( m_pMchMgr->GetCurrMachine()->GetNewLinkMgr() || ! pMch->LuaExistsFunction( ON_SPECIAL_MOVEZUP)) {
bModif = false ;
return true ;
}