EgtExecutor 2.4a5 :
- aggiunte funzioni Exe/Lua DuploSetLocked, DuploResetLocked e DuploGetLocked.
This commit is contained in:
@@ -773,6 +773,77 @@ ExeDuploGetModified( int nSouId, bool& bModif)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeDuploSetLocked( int nDupId)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// Verifico sia un duplo
|
||||
if ( ! ExeIsDuplo( nDupId))
|
||||
return false ;
|
||||
// Imposto il flag di bloccato
|
||||
return pGeomDB->SetInfo( nDupId, GDB_SI_DUPLOCKED, true) ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeDuploResetLocked( int nDupId)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// Verifico sia nel gruppo base dei duplicati
|
||||
int nDuploBaseId = GetDuploBase( pGeomDB) ;
|
||||
if ( nDuploBaseId == GDB_ID_NULL || pGeomDB->GetParentId( nDupId) != nDuploBaseId)
|
||||
return false ;
|
||||
// Verifico abbia un sorgente
|
||||
int nOrigId ;
|
||||
if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_DUPSOU, nOrigId) || pGeomDB->GetGdbType( nOrigId) != GDB_TY_GROUP)
|
||||
return false ;
|
||||
// Verifico bloccaggio
|
||||
bool bLocked ;
|
||||
if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_DUPLOCKED, bLocked))
|
||||
bLocked = false ;
|
||||
pGeomDB->RemoveInfo( nDupId, GDB_SI_DUPLOCKED) ;
|
||||
if ( ! bLocked)
|
||||
return true ;
|
||||
// Verifico necessità di aggiornamento
|
||||
bool bToUpdate ;
|
||||
if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_DUPTOUPDATE, bToUpdate))
|
||||
bToUpdate = false ;
|
||||
pGeomDB->RemoveInfo( nDupId, GDB_SI_DUPTOUPDATE) ;
|
||||
if ( ! bToUpdate)
|
||||
return true ;
|
||||
// Eseguo aggiornamento
|
||||
pGeomDB->Erase( nDupId) ;
|
||||
int nNewId = pGeomDB->Copy( nOrigId, nDupId, nDuploBaseId) ;
|
||||
if ( nNewId == GDB_ID_NULL)
|
||||
return false ;
|
||||
int nBaseId ;
|
||||
if ( pGeomDB->GetInfo( nOrigId, GDB_SI_BASE, nBaseId) &&
|
||||
pGeomDB->GetGdbType( nBaseId) == GDB_TY_GROUP)
|
||||
*pGeomDB->GetGroupFrame( nNewId) = *pGeomDB->GetGroupFrame( nBaseId) ;
|
||||
pGeomDB->SetInfo( nNewId, GDB_SI_DUPSOU, nOrigId) ;
|
||||
pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPLIST) ;
|
||||
pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPMODIF) ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeDuploGetLocked( int nDupId, bool& bLocked)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// Verifico sia un duplo
|
||||
if ( ! ExeIsDuplo( nDupId))
|
||||
return false ;
|
||||
// Recupero il flag di bloccato
|
||||
if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_DUPLOCKED, bLocked))
|
||||
bLocked = false ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeDuploUpdate( int nSouId)
|
||||
@@ -804,6 +875,13 @@ ExeDuploUpdate( int nSouId)
|
||||
return false ;
|
||||
// eseguo gli aggiornamenti
|
||||
for ( int nCopyId : vnRef) {
|
||||
// se bloccato, non eseguo aggiornamento
|
||||
bool bLocked ;
|
||||
if ( pGeomDB->GetInfo( nCopyId, GDB_SI_DUPLOCKED, bLocked) && bLocked) {
|
||||
pGeomDB->SetInfo( nCopyId, GDB_SI_DUPTOUPDATE, true) ;
|
||||
continue ;
|
||||
}
|
||||
// aggiorno
|
||||
pGeomDB->Erase( nCopyId) ;
|
||||
int nNewId = pGeomDB->Copy( nSouId, nCopyId, nDuploBaseId) ;
|
||||
if ( nNewId == GDB_ID_NULL) {
|
||||
|
||||
Reference in New Issue
Block a user