EgtExecutor :

- nella gestione Duplo estesa considerazione pezzi validi anche quelli spostati in posizione diversa dalla radice del progetto.
This commit is contained in:
DarioS
2022-01-17 08:57:10 +01:00
parent ed611ed6fe
commit 65e9d608d9
+48 -36
View File
@@ -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 ;
}
//-----------------------------------------------------------------------------