diff --git a/Machining.cpp b/Machining.cpp index 1aea549..ec6d97e 100644 --- a/Machining.cpp +++ b/Machining.cpp @@ -25,6 +25,8 @@ using namespace std ; +#define DEBUG 0 + const string KEY_AXIS_GROUP = "PreviewAxisGroup" ; const string KEY_ROT_AXIS_VAL = "PreviewRotAxisVal" ; // salvata per ogni gruppo di Preview @@ -323,6 +325,19 @@ Machining::MyPrepareToolPreview( bool bDouble) for ( const string& sSetHead : vSetHead) vSetHeadIds.push_back( pMch->GetHeadId( sSetHead)) ; + // se presenti altre teste che non compaiono nell'headset le memorizzo + int nHeadParentId = m_pGeomDB->GetParentId( nHeadId) ; + INTVECTOR vOtherHeadIds ; + if ( nHeadParentId != GDB_ID_NULL) { + int nChildId = m_pGeomDB->GetFirstGroupInGroup( nHeadParentId) ; + while ( nChildId != GDB_ID_NULL) { + if ( nChildId != nHeadId && pMch->IsHeadGroup( nChildId) && + find( vSetHeadIds.begin(), vSetHeadIds.end(), nChildId) == vSetHeadIds.end()) + vOtherHeadIds.push_back( nChildId) ; + nChildId = m_pGeomDB->GetNextGroup( nChildId) ; + } + } + // recupero la tavola corrente int nCurrTab = pMch->GetCurrTable() ; @@ -471,7 +486,7 @@ Machining::MyPrepareToolPreview( bool bDouble) } // scorro i suoi figli int nChildId = m_pGeomDB->GetFirstInGroup( nParentId) ; - while ( bOk && nChildId != GDB_ID_NULL) { + while ( bOk && nChildId != GDB_ID_NULL) { // se vettore ausiliario lo inserisco solo se asse padre rotativo if ( m_pGeomDB->GetGdbType( nChildId) == GDB_TY_GEO) { if ( bRotary) { @@ -488,13 +503,18 @@ Machining::MyPrepareToolPreview( bool bDouble) if ( nChildId == nHeadId) { if ( ! bDouble) { m_nPreviewHeadId = m_pGeomDB->CopyGlob( nHeadId, GDB_ID_NULL, nNewParentId) ; - bOk = ( m_nPreviewHeadId == GDB_ID_NULL) ; + bOk = ( m_nPreviewHeadId != GDB_ID_NULL) ; } else { m_nPreviewHeadIdDBL = m_pGeomDB->CopyGlob( nHeadId, GDB_ID_NULL, nNewParentId) ; - bOk = ( m_nPreviewHeadIdDBL == GDB_ID_NULL) ; + bOk = ( m_nPreviewHeadIdDBL != GDB_ID_NULL) ; } } + // se altra testa non presente nell'HeadSet la inserisco + else if ( find( vOtherHeadIds.begin(), vOtherHeadIds.end(), nChildId) != vOtherHeadIds.end()) { + int nOtherHeadId = m_pGeomDB->CopyGlob( nChildId, GDB_ID_NULL, nNewParentId) ; + bOk = ( nOtherHeadId != GDB_ID_NULL) ; + } else { // se asse successivo nella catena cinematica, sarà il nuovo gruppo padre auto NextIter = Iter ; ++ NextIter ; @@ -648,6 +668,9 @@ Machining::RemoveToolPreview( void) // verifico validità gestore DB geometrico if ( m_pGeomDB == nullptr) return false ; + #if DEBUG + return true ; + #endif // recupero i gruppi per l'anteprima utensile int nStId = m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_ST) ; int nStIdDBL = m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_ST_DBL) ;