EgtMachKernel (NewLink) :

- aggiunta gestione ZMax.
This commit is contained in:
Riccardo Elitropi
2026-03-23 17:03:52 +01:00
parent 58fe1d1f8f
commit 1ec2188326
2 changed files with 66 additions and 54 deletions
+58 -47
View File
@@ -3390,7 +3390,7 @@ Operation::AdjustStartEndMovementsStd( bool bVerifyPreviousLink)
//----------------------------------------------------------------------------
bool
Operation::MoveHeadFromHomeToMach( bool bCurrMain, const string& sToolName, const string& sHeadName, int nExitNbr)
Operation::MoveHeadFromHomeToMach( bool bCurrMain, const string& sToolName, const string& sHeadName, int nExitNbr, int nStartZMax)
{
// verifico gestore delle lavorazioni e operazione
if ( m_pMchMgr == nullptr)
@@ -3405,7 +3405,7 @@ Operation::MoveHeadFromHomeToMach( bool bCurrMain, const string& sToolName, cons
if ( ! AdjustOneStartEndMovement( GetFirstFullToolpath( bCurrMain), GDB_ID_NULL, nullptr, vAxVal, 0, true))
return false ;
// eseguo collegamento speciale
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, false, this, GDB_ID_NULL, bCurrMain))
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, false, this, GDB_ID_NULL, bCurrMain, nStartZMax))
return false ;
// riporto l'utensile corrente come originale
@@ -3420,7 +3420,7 @@ bool
Operation::MoveHeadFromMachToMach( Operation* pPrevOpe,
bool bPrevMain, const string& sPrevToolName, const string& sPrevHeadName, int nPrevExitNbr,
bool bCurrMain, const string& sCurrToolName, const string& sCurrHeadName, int nCurrExitNbr,
bool bToolChangeNeeded)
bool bToolChangeNeeded, int nStartZMax)
{
// verifico gestore delle lavorazioni e operazione precedente
if ( m_pMchMgr == nullptr || pPrevOpe == nullptr)
@@ -3446,7 +3446,7 @@ Operation::MoveHeadFromMachToMach( Operation* pPrevOpe,
if ( ! AdjustOneStartEndMovement( GetFirstFullToolpath( bCurrMain), GDB_ID_NULL, pPrevOpe, vAxVal, dPrevOffsX, false))
return false ;
// gestione collegamento speciale
if ( ! ManageSpecialLink( pPrevOpe, GDB_ID_NULL, bPrevMain, this, GDB_ID_NULL, bCurrMain))
if ( ! ManageSpecialLink( pPrevOpe, GDB_ID_NULL, bPrevMain, this, GDB_ID_NULL, bCurrMain, nStartZMax))
return false ;
}
@@ -3454,12 +3454,12 @@ Operation::MoveHeadFromMachToMach( Operation* pPrevOpe,
else {
// imposto la lavorazione precedente come corrente ed effettuo collegamento
m_pMchMgr->SetCurrMachining( pPrevOpe->GetOwner()) ;
if ( ! MoveHeadFromMachToHome( pPrevOpe, bPrevMain, sPrevToolName, sPrevHeadName, nPrevExitNbr))
if ( ! MoveHeadFromMachToHome( pPrevOpe, bPrevMain, sPrevToolName, sPrevHeadName, nPrevExitNbr, nStartZMax))
return false ;
// ripristino la lavorazione corrente ed effettuo collegamento
m_pMchMgr->SetCurrMachining( GetOwner()) ;
if ( ! MoveHeadFromHomeToMach( bCurrMain, sCurrToolName, sCurrHeadName, nCurrExitNbr))
if ( ! MoveHeadFromHomeToMach( bCurrMain, sCurrToolName, sCurrHeadName, nCurrExitNbr, nStartZMax))
return false ;
}
@@ -3472,7 +3472,8 @@ Operation::MoveHeadFromMachToMach( Operation* pPrevOpe,
//----------------------------------------------------------------------------
bool
Operation::MoveHeadFromMachToHome( Operation* pPrevOpe, bool bPrevMain, const string& sPrevToolName, const string& sPrevHeadName, int nPrevExitNbr)
Operation::MoveHeadFromMachToHome( Operation* pPrevOpe, bool bPrevMain, const string& sPrevToolName, const string& sPrevHeadName, int nPrevExitNbr,
int nStartZMax)
{
// verifico gestore delle lavorazioni e operazione precedente
if ( m_pMchMgr == nullptr || pPrevOpe == nullptr)
@@ -3488,7 +3489,7 @@ Operation::MoveHeadFromMachToHome( Operation* pPrevOpe, bool bPrevMain, const st
return false ;
}
// eventuale rilascio utensile speciale di lavorazione precedente
if ( ! pPrevOpe->ManageSpecialLink( pPrevOpe, GDB_ID_NULL, bPrevMain, nullptr, GDB_ID_NULL, false))
if ( ! pPrevOpe->ManageSpecialLink( pPrevOpe, GDB_ID_NULL, bPrevMain, nullptr, GDB_ID_NULL, false, nStartZMax))
return false ;
// riporto l'utensile corrente come originale
@@ -3529,14 +3530,17 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
if ( ! bPrevInDouble && ! bCurrInDouble)
return false ;
// leggo da parametro della lavorazione corrente se risalita a ZMax forzata
int nStartZMax = GetUserNotesZmax() ;
// *** [A] Se primo utensile o richiesto, uso la posizione Home
if ( sPrevTool.empty() || NeedPrevHome()) {
// -->! la lavorazione corrente è per forza in doppio !<--
// Dalla sua posizione di Home porto la Testa Main sul percorso Main corrente
if ( ! MoveHeadFromHomeToMach( true, GetToolName(), GetHeadName(), GetExitNbr()))
if ( ! MoveHeadFromHomeToMach( true, GetToolName(), GetHeadName(), GetExitNbr(), nStartZMax))
return false ;
// Dalla sua posizione di Home porto da Testa Double sul percorso Double corrente
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr))
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, nStartZMax))
return false ;
}
else {
@@ -3544,24 +3548,24 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
if ( ! bPrevInDouble) {
// -->! 1) Verifico se l'unico utensile della lavorazione precedente ( in quanto singola) è compatibile
// con l'Utensile presente sul percorso Main della lavorazione corrente ( in doppio) !<--
if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, true)) {
if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, true) && nStartZMax == 0) {
// Come prima cosa sposto la testa Main della prima lavorazione sul percorso Main della lavorazione corrente
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
true, GetToolName(), GetHeadName(), GetExitNbr(), false))
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax))
return false ;
// Successivamente porto la testa Double dalla sua Home alla lavorazione corrente ( in doppio) sul percorso
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr))
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, nStartZMax))
return false ;
}
// -->! 2) Verifico se l'unico utensile della lavorazione precedente ( in quanto singola) è compatibile
// con l'utensile presente sul percorso Double della lavorazione corrente ( in doppio) !<--
else if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, false)) {
else if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, false) && nStartZMax == 0) {
// Come prima cosa sposto la testa Main della lavorazione precedente sul percorso Double della lavorazione corrente
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, false))
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, false, nStartZMax))
return false ;
// Successivamente porto la testa Main dalla sua Home alla lavorazione corrente ( in doppio) sul percorso
if ( ! MoveHeadFromHomeToMach( true, GetToolName(), GetHeadName(), GetExitNbr()))
if ( ! MoveHeadFromHomeToMach( true, GetToolName(), GetHeadName(), GetExitNbr(), nStartZMax))
return false ;
}
// -->! 3) In questo caso l'unico utensile della lavorazione precedente ( in quanto singola) non è compatibile
@@ -3569,10 +3573,10 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
else {
// Porto la Testa Main sul percorso Main corrente
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
true, GetToolName(), GetHeadName(), GetExitNbr(), true))
true, GetToolName(), GetHeadName(), GetExitNbr(), true, nStartZMax))
return false ;
// Dalla sua posizione di Home porto da Testa Double sul percorso Double corrente
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr))
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, nStartZMax))
return false ;
}
}
@@ -3580,60 +3584,60 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
else if ( ! bCurrInDouble) {
// -->! 1) Verifico se l'utensile principale della lavorazione precedente ( in doppio) è compatibile
// con l'Utensile presente sul percorso Main della lavorazione corrente ( in quanto singola) !<--
if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, true)) {
if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, true) && nStartZMax == 0) {
// Come prima cosa sposto la testa Double della lavorazione precedente ( in doppio) in Home
if ( ! MoveHeadFromMachToHome( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr))
if ( ! MoveHeadFromMachToHome( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr, nStartZMax))
return false ;
// Sposto al testa Main della lavorazione precedente sul percorso Main corrente
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
true, GetToolName(), GetHeadName(), GetExitNbr(), false))
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax))
return false ;
}
// -->! 2) Verifico se l'utensile secondario della lavorazione precedente ( in doppio) è compatibile
// con l'Utensile presente sul percorso Double della lavorazione corrente ( in quanto singola) !<--
else if ( ! ToolChangeNeeded( *pPrevOpe, false, *this, true)) {
else if ( ! ToolChangeNeeded( *pPrevOpe, false, *this, true) && nStartZMax == 0) {
// Come prima cosa sposto la testa Main della lavorazione precedente ( in doppio) in Home
if ( ! MoveHeadFromMachToHome( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr))
if ( ! MoveHeadFromMachToHome( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr, nStartZMax))
return false ;
// Sposto al testa Double della lavorazione precedente sul percorso corrente
if ( ! MoveHeadFromMachToMach( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr,
true, GetToolName(), GetHeadName(), GetExitNbr(), false))
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax))
return false ;
}
// -->! 3) In questo caso l'unico utensile della lavorazione corrente ( in quanto singola) non è compatibile
// con nessun utensile della lavorazione precedente ( in doppio) !<--
else {
// Come prima cosa sposto la testa Double della lavorazione precedente ( in doppio) in Home
if ( ! MoveHeadFromMachToHome( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr))
if ( ! MoveHeadFromMachToHome( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr, nStartZMax))
return false ;
// Sposto la testa Main della lavorazione precedente sul percorso corrente
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
true, GetToolName(), GetHeadName(), GetExitNbr(), true))
true, GetToolName(), GetHeadName(), GetExitNbr(), true, nStartZMax))
return false ;
}
}
// *** [D] entrambe le lavorazioni sono in doppio
else {
// -->! 1) Entrambe le lavorazioni in doppio sono compatibili tra di loro !<--
if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, true) && ! ToolChangeNeeded( *pPrevOpe, false, *this, false)) {
if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, true) && ! ToolChangeNeeded( *pPrevOpe, false, *this, false) && nStartZMax == 0) {
// Porto la testa Main dalla lavorazione precedente alla lavorazione corrente
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
true, GetToolName(), GetHeadName(), GetExitNbr(), false))
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax))
return false ;
// Porto la testa double delle lavorazione precedente alla lavorazine corrente
if ( ! MoveHeadFromMachToMach( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr,
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, false))
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, false, nStartZMax))
return false ;
}
// -->! 2) Per tutto il resto porto sempre in Home per sicurezza passando da una lavorazione all'altra !<--
else {
// Porto la testa Main dalla lavorazione precedente alla lavorazione corrente
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
true, GetToolName(), GetHeadName(), GetExitNbr(), true))
true, GetToolName(), GetHeadName(), GetExitNbr(), true, nStartZMax))
return false ;
// Porto la testa Double delle lavorazione precedente alla lavorazine corrente
if ( ! MoveHeadFromMachToMach( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr,
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, true))
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, true, nStartZMax))
return false ;
}
}
@@ -3652,7 +3656,7 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
DBLVECTOR vAxVal ;
bOk = bOk && GetClPathFinalAxesValues( nPrevCLPathId, false, vAxVal) ;
bOk = bOk && AdjustOneStartEndMovement( nCLPathId, nPrevCLPathId, nullptr, vAxVal, 0, false) ;
bOk = bOk && ManageSpecialLink( this, nPrevCLPathId, true, this, nCLPathId, true) ;
bOk = bOk && ManageSpecialLink( this, nPrevCLPathId, true, this, nCLPathId, true, nStartZMax) ;
// passo al successivo
nPrevCLPathId = nCLPathId ;
nCLPathId = GetNextFullToolpath( nCLPathId) ;
@@ -3662,7 +3666,7 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
DBLVECTOR vAxVal ;
bOk = bOk && AddRise( vAxVal) ;
// -->! nuova verifica di aree protette alla fine !<--
bOk = bOk && ManageSpecialLink( this, GDB_ID_NULL, true, nullptr, GDB_ID_NULL, false) ;
bOk = bOk && ManageSpecialLink( this, GDB_ID_NULL, true, nullptr, GDB_ID_NULL, false, nStartZMax) ;
// -->! se ultima operazione o la successiva lo richiede, vado in Home !<--
int nNextOpId = m_pMchMgr->GetNextActiveOperation( m_nOwnerId) ;
Operation* pNextOp = GetOperation( m_pGeomDB->GetUserObj( nNextOpId)) ;
@@ -3684,13 +3688,13 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
// Utensile Main
bOk = bOk && GetClPathFinalAxesValues( nPrevCLPathId, false, vAxVal) ;
bOk = bOk && AdjustOneStartEndMovement( nCLPathId, nPrevCLPathId, nullptr, vAxVal, 0, false) ;
bOk = bOk && ManageSpecialLink( this, nPrevCLPathId, true, this, nCLPathId, true) ;
bOk = bOk && ManageSpecialLink( this, nPrevCLPathId, true, this, nCLPathId, true, nStartZMax) ;
// Utensile Double
DBLVECTOR vAxDblVal ;
bOk = bOk && m_pMchMgr->SetCalcTool( sCurrDblTool, sCurrDblHead, nCurrDblExitNbr) ;
bOk = bOk && GetClPathFinalAxesValues( nPrevDBLPathId, false, vAxDblVal) ;
bOk = bOk && AdjustOneStartEndMovement( nDBLPathId, nPrevDBLPathId, nullptr, vAxDblVal, 0, false) ;
bOk = bOk && ManageSpecialLink( this, nPrevDBLPathId, false, this, nDBLPathId, false) ;
bOk = bOk && ManageSpecialLink( this, nPrevDBLPathId, false, this, nDBLPathId, false, nStartZMax) ;
bOk = bOk && m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()) ;
// passo al successivo
nPrevCLPathId = nCLPathId ;
@@ -3703,12 +3707,12 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
// per utensile Main
DBLVECTOR vAxVal ;
bOk = bOk && AddRise( vAxVal) ;
bOk = bOk && ManageSpecialLink( this, GDB_ID_NULL, true, nullptr, GDB_ID_NULL, true) ;
bOk = bOk && ManageSpecialLink( this, GDB_ID_NULL, true, nullptr, GDB_ID_NULL, true, nStartZMax) ;
// per utensile Double
DBLVECTOR vAxDblVal ;
bOk = bOk && m_pMchMgr->SetCalcTool( sCurrDblTool, sCurrDblHead, nCurrDblExitNbr) ;
bOk = bOk && AddRise( vAxDblVal, NAN, GDB_ID_NULL, false) ;
bOk = bOk && ManageSpecialLink( this, GDB_ID_NULL, false, nullptr, GDB_ID_NULL, false) ;
bOk = bOk && ManageSpecialLink( this, GDB_ID_NULL, false, nullptr, GDB_ID_NULL, false, nStartZMax) ;
bOk = bOk && m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()) ;
// -->! se ultima operazione o la successiva lo richiede, vado in Home !<--
int nNextOpId = m_pMchMgr->GetNextActiveOperation( m_nOwnerId) ;
@@ -3757,6 +3761,9 @@ Operation::AdjustStartEndMovementsNew( void)
// -->! se entrambe le lavorazioni sono singole !<--
if ( ! bPrevDbl && ! bCurrDbl) {
// leggo da parametro della lavorazione corrente se risalita a ZMax forzata
int nStartZMax = GetUserNotesZmax() ;
// *** Se primo utensile o richiesto, uso la posizione home
if ( sPrevTool.empty() || NeedPrevHome()) {
// imposto l'utensile per i calcoli macchina
@@ -3767,12 +3774,12 @@ Operation::AdjustStartEndMovementsNew( void)
if ( ! AdjustOneStartEndMovement( GetFirstFullToolpath(), GDB_ID_NULL, nullptr, vAxVal, 0, true))
return false ;
// eseguo collegamento speciale
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, true, this, GDB_ID_NULL, true))
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, true, this, GDB_ID_NULL, true, nStartZMax))
return false ;
}
// *** Se utensile non cambiato o su diversa uscita della stessa testa, uso posizione finale della lavorazione precedente
else if ( ! ToolChangeNeeded( *pPrevOp, true, *this, true)) {
else if ( ! ToolChangeNeeded( *pPrevOp, true, *this, true) && nStartZMax == 0) {
// imposto l'utensile per i calcoli macchina
if ( ! m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()))
return false ;
@@ -3790,7 +3797,7 @@ Operation::AdjustStartEndMovementsNew( void)
if ( ! AdjustOneStartEndMovement( GetFirstFullToolpath(), GDB_ID_NULL, pPrevOp, vAxVal, dPrevOffsX, false))
return false ;
// gestione collegamento speciale
if ( ! ManageSpecialLink( pPrevOp, GDB_ID_NULL, true, this, GDB_ID_NULL, true))
if ( ! ManageSpecialLink( pPrevOp, GDB_ID_NULL, true, this, GDB_ID_NULL, true, nStartZMax))
return false ;
}
@@ -3808,7 +3815,7 @@ Operation::AdjustStartEndMovementsNew( void)
return false ;
}
// eventuale rilascio utensile speciale di lavorazione precedente
if ( ! pPrevOp->ManageSpecialLink( pPrevOp, GDB_ID_NULL, true, nullptr, GDB_ID_NULL, true))
if ( ! pPrevOp->ManageSpecialLink( pPrevOp, GDB_ID_NULL, true, nullptr, GDB_ID_NULL, true, nStartZMax))
return false ;
// ripristino la lavorazione corrente
@@ -3821,7 +3828,7 @@ Operation::AdjustStartEndMovementsNew( void)
if ( ! AdjustOneStartEndMovement( GetFirstFullToolpath(), GDB_ID_NULL, nullptr, vAxVal, 0, true))
return false ;
// eseguo verifica
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, true, this, GDB_ID_NULL, true))
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, true, this, GDB_ID_NULL, true, nStartZMax))
return false ;
}
@@ -3839,7 +3846,7 @@ Operation::AdjustStartEndMovementsNew( void)
if ( ! AdjustOneStartEndMovement( nClPathId, nPrevClPathId, nullptr, vAxVal, 0, false))
bOk = false ;
// gestione collegamento speciale ( tra due percorsi della stessa lavorazione)
if ( ! ManageSpecialLink( this, nPrevClPathId, true, this, nClPathId, true))
if ( ! ManageSpecialLink( this, nPrevClPathId, true, this, nClPathId, true, nStartZMax))
return false ;
// passo al successivo
nPrevClPathId = nClPathId ;
@@ -3851,7 +3858,7 @@ Operation::AdjustStartEndMovementsNew( void)
DBLVECTOR vAxVal ;
bOk = bOk && AddRise( vAxVal) ;
// nuova verifica aree protette alla fine
if ( ! ManageSpecialLink( this, GDB_ID_NULL, true, nullptr, GDB_ID_NULL, true))
if ( ! ManageSpecialLink( this, GDB_ID_NULL, true, nullptr, GDB_ID_NULL, true, nStartZMax))
return false ;
// se ultima operazione o la successiva lo richiede, vado in home
@@ -3871,7 +3878,8 @@ Operation::AdjustStartEndMovementsNew( void)
//----------------------------------------------------------------------------
bool
Operation::ManageSpecialLink( Operation* pPrevOpe, int nPrevClPathId, bool bPrevMain, Operation* pNextOpe, int nNextClPathId, bool bNextMain)
Operation::ManageSpecialLink( Operation* pPrevOpe, int nPrevClPathId, bool bPrevMain, Operation* pNextOpe, int nNextClPathId, bool bNextMain,
int nStartZmax)
{
// controlli
if ( pPrevOpe == nullptr && pNextOpe == nullptr)
@@ -3914,7 +3922,7 @@ Operation::ManageSpecialLink( Operation* pPrevOpe, int nPrevClPathId, bool bPrev
return false ;
// chiamo funzione script OnSpecialRapidMove per avere posizioni di movimento
bool bOk = SpecialLink( vNeatAxSta, vNeatAxEnd, nLinkType, pPrevOpe, bPrevMain, pNextOpe, bNextMain) ;
bool bOk = SpecialLink( vNeatAxSta, vNeatAxEnd, nLinkType, pPrevOpe, bPrevMain, pNextOpe, bNextMain, nStartZmax) ;
// in caso di errore eseguo inserimento con segnalazione di errore
if ( ! bOk) {
@@ -5900,7 +5908,8 @@ Operation::SpecialMoveRapid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd,
//----------------------------------------------------------------------------
bool
Operation::SpecialLink( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, int nLinkType,
const Operation* pPrevOpe, bool bPrevMain, const Operation* pNextOpe, bool bNextMain)
const Operation* pPrevOpe, bool bPrevMain, const Operation* pNextOpe, bool bNextMain,
int nStartZMax)
{
// recupero la macchina corrente
Machine* pMch = ( m_pMchMgr != nullptr ? m_pMchMgr->GetCurrMachine() : nullptr) ;
@@ -5914,6 +5923,7 @@ Operation::SpecialLink( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, int
static const string EVAR_NEXTMCHID = ".NEXTMCHID" ; // IN (int) identificativo lavorazione successiva
static const string EVAR_NEXTPHASE = ".NEXTPHASE" ; // IN (int) indice fase della lavorazione successiva
static const string EVAR_NEXTMAIN = ".NEXTMAIN" ; // IN (bool) flag lavorazione principale o double successiva
static const string EVAR_STARTZMAX = ".STARTZMAX" ; // IN (int) identificativo StartZMax
static const string EVAR_LINKTYPE = ".LINKTYPE" ; // IN (int) codice tipo collegamento (1=Inizio, 2=Fine, 3=FinePrec+InizioSucc)
static const string EVAR_ERROR = ".ERR" ; // OUT (int) codice di errore ( 0 = ok)
static const string ON_SPECIAL_LINK = "OnSpecialLink" ;
@@ -5945,6 +5955,7 @@ Operation::SpecialLink( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, int
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_NEXTMCHID, ( pNextOpe != nullptr ? pNextOpe->GetOwner() : GDB_ID_NULL)) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_NEXTPHASE, ( pNextOpe != nullptr ? pNextOpe->m_nPhase : 0)) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_NEXTMAIN, ( bNextMain ? MCH_CL : MCH_DBL)) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_STARTZMAX, nStartZMax) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_PHASE, m_nPhase) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_LINKTYPE, nLinkType) ;
// valore degli assi
+8 -7
View File
@@ -240,16 +240,16 @@ class Operation : public IUserObj
bool AdjustStartEndMovementsStd( bool bVerifyPreviousLink) ;
bool AdjustOneStartEndMovement( int nClPathId, int nPrevClPathId, Operation* pPrevOpe, const DBLVECTOR& vAxPrev, double dPrevOffsX, bool bMaxZ) ;
bool AdjustStartEndMovementsNew( void) ;
bool MoveHeadFromHomeToMach( bool bMain, const std::string& sToolName, const std::string& sHeadName, int nExitNbr) ;
bool MoveHeadFromHomeToMach( bool bMain, const std::string& sToolName, const std::string& sHeadName, int nExitNbr, int nStartZMax) ;
bool MoveHeadFromMachToMach( Operation* pPrevOpe,
bool bPrevMain, const std::string& sPrevToolName, const std::string& sPrevHeadName, int nPrevExitNbr,
bool bCurrMain, const std::string& sCurrToolName, const std::string& sCurrHeadName, int nCurrExitNbr,
bool bToolChange) ;
bool MoveHeadFromMachToHome( Operation* pPrevOpe, bool bCurrMain, const std::string& sCurrToolName, const std::string& sCurrHeadName, int nCurrExitNbr) ;
bool bToolChange, int nStartZMax) ;
bool MoveHeadFromMachToHome( Operation* pPrevOpe, bool bCurrMain, const std::string& sCurrToolName, const std::string& sCurrHeadName, int nCurrExitNbr,
int nStartZMax) ;
bool ManageDoubleOperNew( Operation* pPrevOpe) ;
bool ManageSpecialLink( Operation* pPrevOpe, int nPrevClPathId, bool bPrevMain, Operation* pNextOpe, int nNextClPathId, bool bNextMain) ;
bool ManageSpecialLink( Operation* pPrevOpe, int nPrevClPathId, bool bPrevMain, Operation* pNextOpe, int nNextClPathId, bool bNextMain,
int nStartZMax) ;
bool ToolChangeNeeded( const Operation& Ope1, bool bMain1, const Operation& Ope2, bool bMain2) const ;
bool AddSpecialClimb( const DBLVECTOR& vAxVal, bool bOk = true, int nClPathId = GDB_ID_NULL, bool bMain = true,
int nFlag = 0, int nFlag2 = 0, int nMask = -1, const std::string& sInfo = "", bool bFirst = true) ;
@@ -277,7 +277,8 @@ class Operation : public IUserObj
bool SpecialMoveZup( DBLVECTOR& vAx, Vector3d& vtTool, int& nFlag, int& nFlag2, bool& bModif) ;
bool SpecialMoveRapid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, DBLVECTOR& vAxNew, bool& bModif) ;
bool SpecialLink( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, int nLinkType,
const Operation* pPrevOpe, bool bPrevMain, const Operation* pNextOpe, bool bNextMain) ;
const Operation* pPrevOpe, bool bPrevMain, const Operation* pNextOpe, bool bNextMain,
int nStartZMax) ;
bool SpecialPrevMachiningOffset( const Operation* pPrevOpe, double& dOffsetX) ;
protected :