diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 71dab17..d6b7a13 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/Operation.cpp b/Operation.cpp index 362a055..a73b277 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -1178,6 +1178,9 @@ Operation::AdjustStartEndMovements( void) bMaxZ = true ; } + // elimino vecchie risalite alla fine della lavorazione + RemoveRise() ; + // aggiusto l'inizio di ogni percorso di lavoro bool bOk = true ; int nClPathId = m_pGeomDB->GetFirstGroupInGroup( nClId) ; @@ -1211,6 +1214,8 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool { if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) return false ; + // elimino eventuali CLIMB già presenti + RemoveClimb( nClPathId) ; // recupero la prima entità di questo percorso int nEntId = m_pGeomDB->GetFirstInGroup( nClPathId) ; // recupero i dati Cam dell'entità @@ -1226,7 +1231,7 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool if ( m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_AFTER) == GDB_ID_NULL) return false ; // modifico quella originale (è la prima del percorso) - m_pGeomDB->RemoveName( nEntId) ; + m_pGeomDB->SetName( nEntId, MCH_CL_CLIMB) ; DBLVECTOR vAxNew = vAxCurr ; vAxNew[2] = vAxPrev[2] ; // eventuale aggiustamenti speciali dipendenti dalla macchina @@ -1269,18 +1274,18 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool if ( pNew1CamData == nullptr) return false ; // modifico questa entità - m_pGeomDB->RemoveName( nNew1Id) ; + m_pGeomDB->SetName( nNew1Id, MCH_CL_CLIMB) ; DBLVECTOR vAxNew1 = vAxPrev ; vAxNew1[2] = ( bSafeOk ? dSafeZ : dHomeZ) ; int nMask = CamData::MSK_L3 ; // eventuali aggiustamenti speciali dipendenti dalla macchina - Vector3d vtTool = pCamData->GetToolDir() ; + Vector3d vtTool = pNew1CamData->GetToolDir() ; DBLVECTOR vAxTmp = vAxNew1 ; bool bModif ; if ( ! SpecialMoveZup( vtTool, vAxTmp, bModif)) return false ; if ( bModif) { - pCamData->SetToolDir( vtTool) ; + pNew1CamData->SetToolDir( vtTool) ; if ( vAxNew1.size() >= 4 && abs( vAxTmp[3] - vAxNew1[3]) > EPS_ANG_SMALL) { vAxCurr[3] = vAxNew1[3] ; nMask |= CamData::MSK_R1 ; @@ -1305,8 +1310,8 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool CamData* pNew2CamData = GetCamData( m_pGeomDB->GetUserObj( nNew2Id)) ; if ( pNew2CamData == nullptr) return false ; - // modifico quella originale (è la prima del percorso) - m_pGeomDB->RemoveName( nNew2Id) ; + // la modifico + m_pGeomDB->SetName( nNew2Id, MCH_CL_CLIMB) ; DBLVECTOR vAxNew2 = vAxCurr ; vAxNew2[2] = ( bSafeOk ? dSafeZ : dHomeZ) ; pNew2CamData->SetAxes( CamData::AS_OK, vAxNew2) ; @@ -1324,7 +1329,7 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool if ( m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_AFTER) == GDB_ID_NULL) return false ; // modifico quella originale (è la prima del percorso) - m_pGeomDB->RemoveName( nEntId) ; + m_pGeomDB->SetName( nEntId, MCH_CL_CLIMB) ; DBLVECTOR vAxNew = vAxPrev ; vAxNew[2] = vAxCurr[2] ; pCamData->SetAxes( CamData::AS_OK, vAxNew) ; @@ -1337,7 +1342,7 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool if ( m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_AFTER) == GDB_ID_NULL) return false ; // modifico quella originale (è la prima del percorso) - m_pGeomDB->RemoveName( nEntId) ; + m_pGeomDB->SetName( nEntId, MCH_CL_CLIMB) ; DBLVECTOR vAxNew = vAxCurr ; vAxNew[2] = vAxPrev[2] ; // eventuali aggiustamenti speciali dipendenti dalla macchina @@ -1380,6 +1385,22 @@ Operation::ToolChangeNeeded( const Operation& Op1, const Operation& Op2) return true ; } +//---------------------------------------------------------------------------- +bool +Operation::RemoveClimb( int nClPathId) +{ + if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) + return false ; + // elimino tutte le entità CLIMB all'inizio del percorso + int nId = m_pGeomDB->GetFirstNameInGroup( nClPathId, MCH_CL_CLIMB) ; + while ( nId != GDB_ID_NULL) { + m_pGeomDB->Erase( nId) ; + nId = m_pGeomDB->GetFirstNameInGroup( nClPathId, MCH_CL_CLIMB) ; + } + + return true ; +} + //---------------------------------------------------------------------------- bool Operation::AddRise( DBLVECTOR& vAxVal, double dDelta) @@ -1411,7 +1432,7 @@ Operation::AddRise( DBLVECTOR& vAxVal, double dDelta) if ( nId == GDB_ID_NULL) return false ; m_pGeomDB->SetName( nId, MCH_CL_RISE) ; - // creo oggetto dati Cam + // creo oggetto dati Cam da associare al punto PtrOwner pCam( pCamData->Clone()) ; if ( IsNull( pCam)) return false ; @@ -1435,13 +1456,13 @@ Operation::AddRise( DBLVECTOR& vAxVal, double dDelta) nFlag = 3 ; // movimento a Zmax } // eventuale aggiustamenti speciali dipendenti dalla macchina - Vector3d vtTool = pCamData->GetToolDir() ; + Vector3d vtTool = pCam->GetToolDir() ; DBLVECTOR vAxTmp = vAxVal ; bool bModif ; if ( ! SpecialMoveZup( vtTool, vAxTmp, bModif)) return false ; if ( bModif) { - pCamData->SetToolDir( vtTool) ; + pCam->SetToolDir( vtTool) ; vAxVal = vAxTmp ; } // verifico extra-corsa dell'asse Z @@ -1788,12 +1809,8 @@ Operation::SpecialMoveZup( Vector3d& vtTool, DBLVECTOR& vAx, bool& bModif) bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_TDIR, vtTool) ; // valore degli assi int nNumAxes = int( vAx.size()) ; - for ( int i = 1 ; i <= MAX_AXES ; ++ i) { - if ( i <= nNumAxes) - bOk = bOk && pMch->LuaSetGlobVar( GetGlobVarAxisValue( i, EMC_VAR), vAx[i-1]) ; - else - bOk = bOk && pMch->LuaResetGlobVar( GetGlobVarAxisValue( i, EMC_VAR)) ; - } + for ( int i = 1 ; i <= nNumAxes ; ++ i) + bOk = bOk && pMch->LuaSetGlobVar( GetGlobVarAxisValue( i, EMC_VAR), vAx[i-1]) ; // eseguo bOk = bOk && pMch->LuaCallFunction( ON_SPECIAL_MOVEZUP, false) ; // recupero valori parametri obbligatori diff --git a/Operation.h b/Operation.h index 5793427..467c98f 100644 --- a/Operation.h +++ b/Operation.h @@ -87,6 +87,7 @@ class Operation : public IUserObj bool AdjustStartEndMovements( void) ; bool AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool bMaxZ) ; bool ToolChangeNeeded( const Operation& Op1, const Operation& Op2) ; + bool RemoveClimb( int nClPathId) ; bool AddRise( DBLVECTOR& vAxVal, double dDelta = - 1) ; bool RemoveRise( void) ; bool AddHome( void) ;