diff --git a/Operation.cpp b/Operation.cpp index 6e70b3b..5522d6a 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -1779,7 +1779,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) // cancello eventuale risalita parziale della lavorazione precedente pPrevOp->RemoveRise() ; // aggiungo risalita a Zmax - if ( ! pPrevOp->AddRise( vAxVal, ( bToZmax && false ? -10000 : -1))) + if ( ! pPrevOp->AddRise( vAxVal)) return false ; // si parte da Z massima bMaxZ = true ; @@ -1948,20 +1948,23 @@ Operation::AdjustOneStartMovement( int nClPathId, int nPrevClPathId, Operation* m_pGeomDB->SetName( nEntId, MCH_CL_CLIMB) ; DBLVECTOR vAxNew = vAxCurr ; vAxNew[2] = dHomeZ ; + int nFlagNew = 2 ; // eventuali aggiustamenti speciali dipendenti dalla macchina - Vector3d vtTool = pCamData->GetToolDir() ; DBLVECTOR vAxTmp = vAxNew ; + Vector3d vtTool = pCamData->GetToolDir() ; + int nFlagTmp = nFlagNew ; bool bModif ; - if ( ! SpecialMoveZup( 2, vtTool, vAxTmp, bModif)) + if ( ! SpecialMoveZup( vAxTmp, vtTool, nFlagTmp, bModif)) return false ; if ( bModif) { - pCamData->SetToolDir( vtTool) ; vAxNew = vAxTmp ; + pCamData->SetToolDir( vtTool) ; + nFlagNew = nFlagTmp ; } // applico le modifiche (non forzo emissione della Z che è già massima) pCamData->SetAxes( CamData::AS_OK, vAxNew) ; pCamData->ChangeAxesMask( CamData::MSK_L1 | CamData::MSK_L2 | CamData::MSK_R1 | CamData::MSK_R2 | CamData::MSK_R3) ; - pCamData->SetFlag( 2) ; + pCamData->SetFlag( nFlagNew) ; } // verifico se la testa interferisce con i pezzi o i bloccaggi sulla tavola else { @@ -2011,20 +2014,23 @@ Operation::AdjustOneStartMovement( int nClPathId, int nPrevClPathId, Operation* m_pGeomDB->SetName( nEntId, MCH_CL_CLIMB) ; DBLVECTOR vAxNew = vAxCurr ; vAxNew[2] = vAxNew1[2] ; + int nFlagNew = 2 ; // eventuali aggiustamenti speciali dipendenti dalla macchina Vector3d vtTool = pCamData->GetToolDir() ; DBLVECTOR vAxTmp = vAxNew ; + int nFlagTmp = nFlagNew ; bool bModif ; - if ( ! SpecialMoveZup( 2, vtTool, vAxTmp, bModif)) + if ( ! SpecialMoveZup( vAxTmp, vtTool, nFlagTmp, bModif)) return false ; if ( bModif) { pCamData->SetToolDir( vtTool) ; vAxNew = vAxTmp ; + nFlagNew = nFlagTmp ; } // applico le modifiche (non forzo emissione della Z che è già alta) pCamData->SetAxes( CamData::AS_OK, vAxNew) ; pCamData->ChangeAxesMask( CamData::MSK_L1 | CamData::MSK_L2 | CamData::MSK_R1 | CamData::MSK_R2 | CamData::MSK_R3) ; - pCamData->SetFlag( 2) ; + pCamData->SetFlag( nFlagNew) ; } // altrimenti else { @@ -2034,9 +2040,9 @@ Operation::AdjustOneStartMovement( int nClPathId, int nPrevClPathId, Operation* // se Z corrente maggiore della precedente o viceversa se HomeZ sotto else if ( ( ! bZHomeDown && vAxCurr[2] > vAxPrev[2]) || ( bZHomeDown && vAxCurr[2] < vAxPrev[2]) ) { - // devo essere sulla stessa lavorazione + // se vengo da precedente lavorazione non devo fare alcunché if ( nPrevClPathId == GDB_ID_NULL) - return false ; + return true ; // aggiungo risalita alla fine del precedente percorso DBLVECTOR vAxNew ; if ( ! AddRise( vAxNew, vAxCurr[2] - vAxPrev[2], nPrevClPathId, bZHomeDown)) @@ -2051,20 +2057,23 @@ Operation::AdjustOneStartMovement( int nClPathId, int nPrevClPathId, Operation* m_pGeomDB->SetName( nEntId, MCH_CL_CLIMB) ; DBLVECTOR vAxNew = vAxCurr ; vAxNew[2] = vAxPrev[2] ; + int nFlagNew = 2 ; // eventuali aggiustamenti speciali dipendenti dalla macchina Vector3d vtTool = pCamData->GetToolDir() ; DBLVECTOR vAxTmp = vAxNew ; + int nFlagTmp = nFlagNew ; bool bModif ; - if ( ! SpecialMoveZup( 2, vtTool, vAxTmp, bModif)) + if ( ! SpecialMoveZup( vAxTmp, vtTool, nFlagTmp, bModif)) return false ; if ( bModif) { pCamData->SetToolDir( vtTool) ; vAxNew = vAxTmp ; + nFlagNew = nFlagTmp ; } // applico le modifiche (non forzo emissione della Z che è già alta) pCamData->SetAxes( CamData::AS_OK, vAxNew) ; pCamData->ChangeAxesMask( CamData::MSK_L1 | CamData::MSK_L2 | CamData::MSK_R1 | CamData::MSK_R2 | CamData::MSK_R3) ; - pCamData->SetFlag( 2) ; + pCamData->SetFlag( nFlagNew) ; } } } @@ -2172,19 +2181,18 @@ Operation::AddRise( DBLVECTOR& vAxVal, double dDelta, int nClPathId, bool bZHome m_pMchMgr->GetAllCurrAxesHomePos( vAxHome) ; vAxVal[2] = vAxHome[2] ; nFlag = 3 ; // movimento a Zmax - // !!! PROVA !!! - if ( dDelta < -9999) - nFlag = 5 ; } // eventuale aggiustamenti speciali dipendenti dalla macchina Vector3d vtTool = pCam->GetToolDir() ; DBLVECTOR vAxTmp = vAxVal ; + int nFlagTmp = nFlag ; bool bModif ; - if ( ! SpecialMoveZup( nFlag, vtTool, vAxTmp, bModif)) + if ( ! SpecialMoveZup( vAxTmp, vtTool, nFlagTmp, bModif)) return false ; if ( bModif) { pCam->SetToolDir( vtTool) ; vAxVal = vAxTmp ; + nFlag = nFlagTmp ; } // verifico extra-corsa dell'asse Z double dL1 = vAxVal[0] ; @@ -2670,7 +2678,7 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn //---------------------------------------------------------------------------- bool -Operation::SpecialMoveZup( int nFlag, Vector3d& vtTool, DBLVECTOR& vAx, bool& bModif) +Operation::SpecialMoveZup( DBLVECTOR& vAx, Vector3d& vtTool, int& nFlag, bool& bModif) { // recupero la macchina corrente Machine* pMch = ( m_pMchMgr != nullptr ? m_pMchMgr->GetCurrMachine() : nullptr) ; @@ -2704,6 +2712,7 @@ Operation::SpecialMoveZup( int nFlag, Vector3d& vtTool, DBLVECTOR& vAx, bool& bM // recupero valori parametri obbligatori bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_ERROR, nErr) ; bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_MODIF, bModif) ; + bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + GVAR_FLAG, nFlag) ; bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + GVAR_TDIR, vtTool) ; for ( int i = 1 ; i <= nNumAxes ; ++ i) bOk = bOk && pMch->LuaGetGlobVar( GetGlobVarAxisValue( i, EMC_VAR), vAx[i-1]) ; diff --git a/Operation.h b/Operation.h index 21867fb..47bb3b6 100644 --- a/Operation.h +++ b/Operation.h @@ -114,7 +114,7 @@ class Operation : public IUserObj bool ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ; bool GetZHomeDown( void) const ; bool TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ; - bool SpecialMoveZup( int nFlag, Vector3d& vtTool, DBLVECTOR& vAx, bool& bModif) ; + bool SpecialMoveZup( DBLVECTOR& vAx, Vector3d& vtTool, int& nFlag, bool& bModif) ; bool SpecialMoveRapid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, DBLVECTOR& vAxNew, bool& bModif) ; bool GetAggrBottomData( const std::string& sHead, AggrBottom& agbData) const ;