diff --git a/EXE_GdbPartLayers.cpp b/EXE_GdbPartLayers.cpp index 3c25988..25a66fe 100644 --- a/EXE_GdbPartLayers.cpp +++ b/EXE_GdbPartLayers.cpp @@ -659,37 +659,6 @@ GetDuploBase( IGeomDB* pGeomDB, bool bCreate = false) return nDuploBaseId ; } -//----------------------------------------------------------------------------- -int -ExeDuploNew( int nSouId) -{ - IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) - // Verifico sia un pezzo - if ( ! ExeIsPart( nSouId)) - return GDB_ID_NULL ; - // Recupero il gruppo base dei duplicati - int nDuploBaseId = GetDuploBase( pGeomDB, true) ; - if ( nDuploBaseId == GDB_ID_NULL) - return GDB_ID_NULL ; - // Eseguo la copia del pezzo - int nNewId = pGeomDB->Copy( nSouId, GDB_ID_NULL, nDuploBaseId) ; - if ( nNewId == GDB_ID_NULL) - return GDB_ID_NULL ; - // Aggiorno info del sorgente - INTVECTOR vnRef ; - pGeomDB->GetInfo( nSouId, GDB_SI_DUPLIST, vnRef) ; - if ( find( vnRef.begin(), vnRef.end(), nNewId) == vnRef.end()) { - vnRef.push_back( nNewId) ; - pGeomDB->SetInfo( nSouId, GDB_SI_DUPLIST, vnRef) ; - } - // Aggiorno info del duplicato - pGeomDB->SetInfo( nNewId, GDB_SI_DUPSOU, nSouId) ; - pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPLIST) ; - - return nNewId ; -} - //----------------------------------------------------------------------------- static bool IsPartForDuplo( IGeomDB* pGeomDB, int nPartId) @@ -708,6 +677,41 @@ IsPartForDuplo( IGeomDB* pGeomDB, int nPartId) return false ; } +//----------------------------------------------------------------------------- +int +ExeDuploNew( int nSouId) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + // Verifico sia un pezzo + if ( ! IsPartForDuplo( pGeomDB, nSouId)) + return GDB_ID_NULL ; + // Recupero il gruppo base dei duplicati + int nDuploBaseId = GetDuploBase( pGeomDB, true) ; + if ( nDuploBaseId == GDB_ID_NULL) + return GDB_ID_NULL ; + // Eseguo la copia del pezzo + int nNewId = pGeomDB->Copy( nSouId, GDB_ID_NULL, nDuploBaseId) ; + if ( nNewId == GDB_ID_NULL) + return GDB_ID_NULL ; + int nBaseId ; + if ( pGeomDB->GetInfo( nSouId, GDB_SI_BASE, nBaseId) && + pGeomDB->GetGdbType( nBaseId) == GDB_TY_GROUP) + *pGeomDB->GetGroupFrame( nNewId) = *pGeomDB->GetGroupFrame( nBaseId) ; + // Aggiorno info del sorgente + INTVECTOR vnRef ; + pGeomDB->GetInfo( nSouId, GDB_SI_DUPLIST, vnRef) ; + if ( find( vnRef.begin(), vnRef.end(), nNewId) == vnRef.end()) { + vnRef.push_back( nNewId) ; + pGeomDB->SetInfo( nSouId, GDB_SI_DUPLIST, vnRef) ; + } + // Aggiorno info del duplicato + pGeomDB->SetInfo( nNewId, GDB_SI_DUPSOU, nSouId) ; + pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPLIST) ; + + return nNewId ; +} + //----------------------------------------------------------------------------- bool ExeDuploCount( int nSouId, int& nCount) @@ -731,7 +735,7 @@ ExeDuploList( int nSouId, INTVECTOR& vnRef) IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, false) // Verifico sia un pezzo - if ( ! ExeIsPart( nSouId)) + if ( ! IsPartForDuplo( pGeomDB, nSouId)) return false ; // Recupero info del sorgente pGeomDB->GetInfo( nSouId, GDB_SI_DUPLIST, vnRef) ; @@ -745,7 +749,7 @@ ExeDuploSetModified( int nSouId) IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, false) // Verifico sia un pezzo - if ( ! ExeIsPart( nSouId)) + if ( ! IsPartForDuplo( pGeomDB, nSouId)) return false ; // Verifico ci siano dei duplicati che dipendono dal pezzo if ( ! pGeomDB->ExistsInfo( nSouId, GDB_SI_DUPLIST)) @@ -761,7 +765,7 @@ ExeDuploGetModified( int nSouId, bool& bModif) IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, false) // Verifico sia un pezzo - if ( ! ExeIsPart( nSouId)) + if ( ! IsPartForDuplo( pGeomDB, nSouId)) return false ; // recupero il flag di modificato if ( ! pGeomDB->GetInfo( nSouId, GDB_SI_DUPMODIF, bModif)) @@ -776,7 +780,7 @@ ExeDuploUpdate( int nSouId) IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, false) // Verifico sia un pezzo - if ( ! ExeIsPart( nSouId)) + if ( ! IsPartForDuplo( pGeomDB, nSouId)) return false ; // Verifico se modificato da ultimo update bool bModif = false ; @@ -802,13 +806,21 @@ ExeDuploUpdate( int nSouId) for ( int nCopyId : vnRef) { pGeomDB->Erase( nCopyId) ; int nNewId = pGeomDB->Copy( nSouId, nCopyId, nDuploBaseId) ; + if ( nNewId == GDB_ID_NULL) { + bAllOk = false ; + continue ; + } + int nBaseId ; + if ( pGeomDB->GetInfo( nSouId, GDB_SI_BASE, nBaseId) && + pGeomDB->GetGdbType( nBaseId) == GDB_TY_GROUP) + *pGeomDB->GetGroupFrame( nNewId) = *pGeomDB->GetGroupFrame( nBaseId) ; pGeomDB->SetInfo( nNewId, GDB_SI_DUPSOU, nSouId) ; pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPLIST) ; pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPMODIF) ; } // reset flag di modificato pGeomDB->RemoveInfo( nSouId, GDB_SI_DUPMODIF) ; - return true ; + return bAllOk ; } //-----------------------------------------------------------------------------