diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 682f6d3..17238ae 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/Operation.cpp b/Operation.cpp index fa70a3a..53ab9c2 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -3589,7 +3589,12 @@ Operation::AdjustOneStartEndMovement( int nClPathId, int nPrevClPathId, Operatio // se centro di lavoro if ( m_pMchMgr->GetCurrIsMcent()) { // copio l'entità - if ( m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_AFTER) == GDB_ID_NULL) + int nNewEntId = m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_BEFORE) ; + if ( nNewEntId == GDB_ID_NULL) + return false ; + // aggiorno il CamData + pCamData = GetCamData( m_pGeomDB->GetUserObj( nNewEntId)) ; + if ( pCamData == nullptr) return false ; // recupero HomeZ double dHomeZ ; @@ -3605,9 +3610,9 @@ Operation::AdjustOneStartEndMovement( int nClPathId, int nPrevClPathId, Operatio if ( abs( dExtraZ) > EPS_SMALL) dHomeZ += dExtraZ ; } - // modifico quella originale (è la prima del percorso) - m_pGeomDB->SetName( nEntId, MCH_CL_CLIMB) ; - m_pGeomDB->RemoveInfo( nEntId, KEY_CL_DOUBLE) ; + // modifico quella copiata (è la prima del percorso) + m_pGeomDB->SetName( nNewEntId, MCH_CL_CLIMB) ; + m_pGeomDB->RemoveInfo( nNewEntId, KEY_CL_DOUBLE) ; DBLVECTOR vAxNew = vAxCurr ; vAxNew[2] = dHomeZ ; int nFlagNew = 2 ; @@ -3714,11 +3719,16 @@ Operation::AdjustOneStartEndMovement( int nClPathId, int nPrevClPathId, Operatio return false ; } // aggiungo posizione elevata prima dell'inizio del percorso corrente - if ( m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_AFTER) == GDB_ID_NULL) + int nNewEntId = m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_BEFORE) ; + if ( nNewEntId == GDB_ID_NULL) return false ; - // modifico l'entità originale (è la prima del percorso) - m_pGeomDB->SetName( nEntId, MCH_CL_CLIMB) ; - m_pGeomDB->RemoveInfo( nEntId, KEY_CL_DOUBLE) ; + // aggiorno il CamData + pCamData = GetCamData( m_pGeomDB->GetUserObj( nNewEntId)) ; + if ( pCamData == nullptr) + return false ; + // modifico l'entità copiata (è la prima del percorso) + m_pGeomDB->SetName( nNewEntId, MCH_CL_CLIMB) ; + m_pGeomDB->RemoveInfo( nNewEntId, KEY_CL_DOUBLE) ; DBLVECTOR vAxNew = vAxCurr ; vAxNew[2] = vAxNew1[2] ; int nFlagNew = 2 ; @@ -3783,11 +3793,16 @@ Operation::AdjustOneStartEndMovement( int nClPathId, int nPrevClPathId, Operatio // altrimenti Z corrente minore della precedente else { // aggiungo posizione elevata prima dell'inizio del percorso corrente - if ( m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_AFTER) == GDB_ID_NULL) + int nNewEntId = m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_BEFORE) ; + if ( nNewEntId == GDB_ID_NULL) return false ; - // modifico l'entità originale (è la prima del percorso) - m_pGeomDB->SetName( nEntId, MCH_CL_CLIMB) ; - m_pGeomDB->RemoveInfo( nEntId, KEY_CL_DOUBLE) ; + // aggiorno il CamData + pCamData = GetCamData( m_pGeomDB->GetUserObj( nNewEntId)) ; + if ( pCamData == nullptr) + return false ; + // modifico l'entità copiata (è la prima del percorso) + m_pGeomDB->SetName( nNewEntId, MCH_CL_CLIMB) ; + m_pGeomDB->RemoveInfo( nNewEntId, KEY_CL_DOUBLE) ; DBLVECTOR vAxNew = vAxCurr ; vAxNew[2] = vAxPrev[2] ; int nFlagNew = 2 ; @@ -3822,11 +3837,16 @@ Operation::AdjustOneStartEndMovement( int nClPathId, int nPrevClPathId, Operatio if ( nLKAMO == LKAMO_HEAD_BEFORE || nLKAMO == LKAMO_HEAD_AFTER) { // aggiungo prima della corrente nEntId = m_pGeomDB->GetFirstInGroup( nClPathId) ; - if ( m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_AFTER) == GDB_ID_NULL) + int nNewEntId = m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_BEFORE) ; + if ( nNewEntId == GDB_ID_NULL) return false ; - // modifico l'entità originale (è la prima del percorso) - m_pGeomDB->SetName( nEntId, MCH_CL_CLIMB) ; - m_pGeomDB->RemoveInfo( nEntId, KEY_CL_DOUBLE) ; + // aggiorno il CamData + pCamData = GetCamData( m_pGeomDB->GetUserObj( nNewEntId)) ; + if ( pCamData == nullptr) + return false ; + // modifico l'entità copiata (è la prima del percorso) + m_pGeomDB->SetName( nNewEntId, MCH_CL_CLIMB) ; + m_pGeomDB->RemoveInfo( nNewEntId, KEY_CL_DOUBLE) ; DBLVECTOR vAxNew = pCamData->GetAxesVal() ; for ( int i = 0 ; i < 2 ; ++ i) { bool bLinear, bHead ; pMch->GetCurrAxisType( i, bLinear, bHead) ;