EgtExecutor :
- funzione ExeDuploCountInRaw rinominata ExeDuploInRawCount - aggiunta funzione lua EgtDuploInRawCount - aggiunte funzioni Exe e Lua DuploWithoutRawList.
This commit is contained in:
+130
-53
@@ -697,6 +697,32 @@ IsPartForDuplo( IGeomDB* pGeomDB, int nPartId)
|
||||
return false ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
static bool
|
||||
IsDuplo( IGeomDB* pGeomDB, int nDupId, bool& bInDuploGroup)
|
||||
{
|
||||
// verifica collegamento a DB geometrico
|
||||
if ( pGeomDB == nullptr)
|
||||
return false ;
|
||||
// Recupero il gruppo base dei duplicati
|
||||
int nDuploBaseId = GetDuploBase( pGeomDB) ;
|
||||
if ( nDuploBaseId == GDB_ID_NULL)
|
||||
return false ;
|
||||
// Verifico sia un duplicato (gruppo sotto quello dei duplicati con riferimento a originale)
|
||||
int nBaseId ;
|
||||
if ( pGeomDB->GetGdbType( nDupId) == GDB_TY_GROUP && pGeomDB->ExistsInfo( nDupId, GDB_SI_DUPSOU)) {
|
||||
if ( pGeomDB->GetParentId( nDupId) == nDuploBaseId) {
|
||||
bInDuploGroup = true ;
|
||||
return true ;
|
||||
}
|
||||
else if ( pGeomDB->GetInfo( nDupId, GDB_SI_BASE, nBaseId) && pGeomDB->GetParentId( nBaseId) == nDuploBaseId) {
|
||||
bInDuploGroup = false ;
|
||||
return true ;
|
||||
}
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
int
|
||||
ExeDuploNew( int nSouId)
|
||||
@@ -749,46 +775,8 @@ ExeDuploCount( int nSouId, int& nCount)
|
||||
// Conto i reali duplo
|
||||
nCount = 0 ;
|
||||
for ( int i = 0 ; i < int( vnRef.size()) ; ++ i) {
|
||||
if ( ExeIsDuplo( vnRef[i]))
|
||||
++ nCount ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeDuploCountInRaw( int nSouId, int& nCount)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// Verifico sia un pezzo
|
||||
if ( ! IsPartForDuplo( pGeomDB, nSouId))
|
||||
return false ;
|
||||
// Recupero info del sorgente
|
||||
INTVECTOR vnRef ;
|
||||
pGeomDB->GetInfo( nSouId, GDB_SI_DUPLIST, vnRef) ;
|
||||
// Conto i reali duplo
|
||||
nCount = 0 ;
|
||||
for ( int i = 0 ; i < int( vnRef.size()) ; ++ i) {
|
||||
// verifico sia un duplo
|
||||
int nDupId = vnRef[i] ;
|
||||
if ( ! ExeIsDuplo( nDupId))
|
||||
continue ;
|
||||
// verifico sia incluso in un grezzo di un gruppo di lavoro
|
||||
INTVECTOR vnRef ;
|
||||
if ( ! pGeomDB->GetInfo( nSouId, GDB_SI_LIST, vnRef))
|
||||
continue ;
|
||||
for ( auto& nId : vnRef) {
|
||||
// verifico esista
|
||||
if ( ! pGeomDB->ExistsObj( nId)) {
|
||||
nId = GDB_ID_NULL ;
|
||||
continue ;
|
||||
}
|
||||
// verifico sia in un grezzo
|
||||
int nParent ;
|
||||
|
||||
}
|
||||
// incremento contatore
|
||||
bool bInDuploGroup ;
|
||||
if ( IsDuplo( pGeomDB, vnRef[i], bInDuploGroup))
|
||||
++ nCount ;
|
||||
}
|
||||
return true ;
|
||||
@@ -813,6 +801,105 @@ ExeDuploList( int nSouId, INTVECTOR& vnRef)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeDuploInRawCount( int nSouId, int& nCount)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// Verifico sia un pezzo
|
||||
if ( ! IsPartForDuplo( pGeomDB, nSouId))
|
||||
return false ;
|
||||
// Recupero info del sorgente
|
||||
INTVECTOR vnRef ;
|
||||
pGeomDB->GetInfo( nSouId, GDB_SI_DUPLIST, vnRef) ;
|
||||
// Conto i reali duplo che sono riferiti o che stanno in un grezzo
|
||||
nCount = 0 ;
|
||||
for ( int i = 0 ; i < int( vnRef.size()) ; ++ i) {
|
||||
// verifico sia un duplo
|
||||
int nDupId = vnRef[i] ;
|
||||
bool bInDuploGroup ;
|
||||
if ( ! IsDuplo( pGeomDB, nDupId, bInDuploGroup))
|
||||
continue ;
|
||||
// se nel gruppo dei duplo
|
||||
if ( bInDuploGroup) {
|
||||
// verifico sia incluso in un grezzo di un gruppo di lavoro
|
||||
INTVECTOR vnRef ;
|
||||
if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_LIST, vnRef))
|
||||
continue ;
|
||||
for ( auto& nId : vnRef) {
|
||||
// verifico esista
|
||||
if ( ! pGeomDB->ExistsObj( nId))
|
||||
continue ;
|
||||
// verifico sia in un grezzo (previsto solo in uno come massimo)
|
||||
int nMachGrpId = pGeomDB->GetParentId( pGeomDB->GetParentId( pGeomDB->GetParentId( nId))) ;
|
||||
string sMachGrpName ;
|
||||
if ( ExeGetMachGroupName( nMachGrpId, sMachGrpName)) {
|
||||
++ nCount ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
}
|
||||
// se in altro gruppo
|
||||
else {
|
||||
// verifico se incluso nel grezzo del gruppo di lavoro corrente (previsto solo in un gruppo)
|
||||
if ( ExeIsRawPart( pGeomDB->GetParentId( nDupId)))
|
||||
++ nCount ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeDuploWithoutRawList( INTVECTOR& vnDup)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// Reset del risultato
|
||||
vnDup.clear() ;
|
||||
// Recupero gruppo dei duplo
|
||||
int nDuploBaseId = GetDuploBase( pGeomDB) ;
|
||||
if ( nDuploBaseId == GDB_ID_NULL)
|
||||
return true ;
|
||||
// Ciclo sui duplo
|
||||
for ( int nDuploId = pGeomDB->GetFirstGroupInGroup( nDuploBaseId) ;
|
||||
nDuploId != GDB_ID_NULL ;
|
||||
nDuploId = pGeomDB->GetNextGroup( nDuploId)) {
|
||||
// se marcatore
|
||||
if ( pGeomDB->ExistsInfo( nDuploId, GDB_SI_SOURCE)) {
|
||||
int nPartId = GDB_ID_NULL ;
|
||||
pGeomDB->GetInfo( nDuploId, GDB_SI_SOURCE, nPartId) ;
|
||||
int nMachGrpId = pGeomDB->GetParentId( pGeomDB->GetParentId( pGeomDB->GetParentId( nPartId))) ;
|
||||
string sMachGrpName ;
|
||||
if ( pGeomDB->ExistsInfo( nPartId, GDB_SI_DUPSOU) && ExeGetMachGroupName( nMachGrpId, sMachGrpName))
|
||||
continue ;
|
||||
}
|
||||
// se vero duplo
|
||||
else if ( pGeomDB->ExistsInfo( nDuploId, GDB_SI_DUPSOU) && pGeomDB->ExistsInfo( nDuploId, GDB_SI_LIST)) {
|
||||
// verifico sia incluso in un grezzo di un gruppo di lavoro
|
||||
bool bFound = false ;
|
||||
INTVECTOR vnRef ;
|
||||
pGeomDB->GetInfo( nDuploId, GDB_SI_LIST, vnRef) ;
|
||||
for ( auto& nId : vnRef) {
|
||||
// verifico sia in un grezzo (previsto solo in uno come massimo)
|
||||
int nMachGrpId = pGeomDB->GetParentId( pGeomDB->GetParentId( pGeomDB->GetParentId( nId))) ;
|
||||
string sMachGrpName ;
|
||||
if ( ExeGetMachGroupName( nMachGrpId, sMachGrpName)) {
|
||||
bFound = true ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
if ( bFound)
|
||||
continue ;
|
||||
}
|
||||
// inserisco nella lista dei duplo senza grezzo
|
||||
vnDup.emplace_back( nDuploId) ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeDuploSetModified( int nSouId)
|
||||
@@ -1014,19 +1101,9 @@ ExeIsDuplo( int nDupId)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// Recupero il gruppo base dei duplicati
|
||||
int nDuploBaseId = GetDuploBase( pGeomDB) ;
|
||||
if ( nDuploBaseId == GDB_ID_NULL)
|
||||
return false ;
|
||||
// Verifico sia un duplicato (gruppo sotto quello dei duplicati con riferimento a originale)
|
||||
int nBaseId ;
|
||||
if ( pGeomDB->GetGdbType( nDupId) == GDB_TY_GROUP &&
|
||||
( pGeomDB->GetParentId( nDupId) == nDuploBaseId ||
|
||||
( pGeomDB->GetInfo( nDupId, GDB_SI_BASE, nBaseId) && pGeomDB->GetParentId( nBaseId) == nDuploBaseId)) &&
|
||||
pGeomDB->ExistsInfo( nDupId, GDB_SI_DUPSOU))
|
||||
return true ;
|
||||
else
|
||||
return false ;
|
||||
// Verifico sia un duplicato
|
||||
bool bPartVsGhost ;
|
||||
return IsDuplo( pGeomDB, nDupId, bPartVsGhost) ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -469,6 +469,42 @@ LuaDuploList( lua_State* L)
|
||||
return 1 ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
static int
|
||||
LuaDuploInRawCount( lua_State* L)
|
||||
{
|
||||
// 1 parametro : nSouId
|
||||
int nSouId ;
|
||||
LuaCheckParam( L, 1, nSouId)
|
||||
LuaClearStack( L) ;
|
||||
// recupero il numero di duplicati che sono riferiti da grezzi nei vari gruppi di lavoro del progetto
|
||||
int nCount ;
|
||||
bool bOk = ExeDuploInRawCount( nSouId, nCount) ;
|
||||
// restituisco il risultato
|
||||
if ( bOk)
|
||||
LuaSetParam( L, nCount) ;
|
||||
else
|
||||
LuaSetParam( L) ;
|
||||
return 1 ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
static int
|
||||
LuaDuploWithoutRawList( lua_State* L)
|
||||
{
|
||||
// nessun parametro
|
||||
LuaClearStack( L) ;
|
||||
// recupero l'elenco dei duplicati
|
||||
INTVECTOR vnDup ;
|
||||
bool bOk = ExeDuploWithoutRawList( vnDup) ;
|
||||
// restituisco il risultato
|
||||
if ( bOk)
|
||||
LuaSetParam( L, vnDup) ;
|
||||
else
|
||||
LuaSetParam( L) ;
|
||||
return 1 ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
static int
|
||||
LuaDuploSetModified( lua_State* L)
|
||||
@@ -632,6 +668,8 @@ LuaInstallGdbPartLayer( LuaMgr& luaMgr)
|
||||
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploNew", LuaDuploNew) ;
|
||||
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploCount", LuaDuploCount) ;
|
||||
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploList", LuaDuploList) ;
|
||||
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploInRawCount", LuaDuploInRawCount) ;
|
||||
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploWithoutRawList", LuaDuploWithoutRawList) ;
|
||||
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploSetModified", LuaDuploSetModified) ;
|
||||
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploGetModified", LuaDuploGetModified) ;
|
||||
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploSetLocked", LuaDuploSetLocked) ;
|
||||
|
||||
Reference in New Issue
Block a user