diff --git a/Operation.cpp b/Operation.cpp index e57d66e..ff342b9 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -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 diff --git a/Operation.h b/Operation.h index 8766bc2..0197aa1 100644 --- a/Operation.h +++ b/Operation.h @@ -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 :