EgtExecutor :
- nella gestione Duplo estesa considerazione pezzi validi anche quelli spostati in posizione diversa dalla radice del progetto.
This commit is contained in:
+48
-36
@@ -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 ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user