EgtExecutor :

- prime sistemazioni per offset superfici trimesh tramite Zmap
- eliminate funzioni exe/lua CreateVolZmapFromSurfTmOffset e CreateVolZmapFromSurfTmThickeningOffset.
This commit is contained in:
Dario Sassi
2025-07-07 14:59:59 +02:00
parent 92a6b54666
commit c36ce0a26f
7 changed files with 276 additions and 472 deletions
-114
View File
@@ -188,120 +188,6 @@ ExeCreateVolZmapFromSurfTm( int nParentId, int nStmId, double dPrec, bool bTriDe
return nNewId ;
}
//-------------------------------------------------------------------------------
int ExeCreateVolZmapFromSurfTmOffset( int nParentId, const INTVECTOR& vStmId, double dOffs, double dPrec, int nType)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
nParentId = AdjustId( nParentId) ;
// recupero il riferimento locale
Frame3d frLoc ;
if ( ! pGeomDB->GetGroupGlobFrame( nParentId, frLoc))
return GDB_ID_NULL ;
// definisco il vettore di puntatori esclusivi alle superfici TriMesh
CISURFTMPVECTOR vStm ;
// recupero le superfici
for ( size_t i = 0 ; i < vStmId.size() ; ++ i) {
int nStmId = vStmId[i] ;
// recupero il riferimento della regione
Frame3d frStm ;
if ( ! pGeomDB->GetGlobFrame( nStmId, frStm))
return GDB_ID_NULL ;
// recupero la superficie trimesh
ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nStmId)) ;
if ( pStm == nullptr)
return GDB_ID_NULL ;
// ne faccio una copia
PtrOwner<ISurfTriMesh> pCopyStm( pStm->Clone()) ;
if ( IsNull( pCopyStm))
return false ;
// eseguo la trasformazione (viene eseguita solo se i riferimenti sono diversi)
pCopyStm->LocToLoc( frStm, frLoc) ;
// lo assegno al vettore di superfici
vStm.emplace_back( Release( pCopyStm)) ;
}
// creo lo Zmap nel riferimento intrinseco
PtrOwner<IVolZmap> pVZM( CreateVolZmap()) ;
bool bOk = ( ! IsNull( pVZM)) ;
bOk = bOk && pVZM->CreateFromTriMeshOffset( vStm, dOffs, dPrec, nType) ;
// dealloco le superfici
for ( auto& pStm : vStm) {
delete ( pStm) ;
pStm = nullptr ;
}
// inserisco lo Zmap nel DB
int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pVZM)) : GDB_ID_NULL) ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtVolZmapFromSurfTmOffset(" + IdToString( nParentId) + "," +
ToString( vStmId) + "," +
ToString( dOffs) + "," +
ToString( dPrec) + "," ")" +
" -- Id=" + ToString( nNewId) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
// restituisco l'identificativo della nuova entità
return nNewId ;
}
//-------------------------------------------------------------------------------
int ExeCreateVolZmapFromSurfTmThickeningOffset( int nParentId, const INTVECTOR& vStmId, double dOffs, double dPrec, int nType)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
nParentId = AdjustId( nParentId) ;
// recupero il riferimento locale
Frame3d frLoc ;
if ( ! pGeomDB->GetGroupGlobFrame( nParentId, frLoc))
return GDB_ID_NULL ;
// definisco il vettore di puntatori esclusivi alle superfici TriMesh
CISURFTMPVECTOR vStm ;
// recupero le superfici
for ( size_t i = 0 ; i < vStmId.size() ; ++ i) {
int nStmId = vStmId[i] ;
// recupero il riferimento della regione
Frame3d frStm ;
if ( ! pGeomDB->GetGlobFrame( nStmId, frStm))
return GDB_ID_NULL ;
// recupero la superficie trimesh
ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nStmId)) ;
if ( pStm == nullptr)
return GDB_ID_NULL ;
// ne faccio una copia
PtrOwner<ISurfTriMesh> pCopyStm( pStm->Clone()) ;
if ( IsNull( pCopyStm))
return false ;
// eseguo la trasformazione (viene eseguita solo se i riferimenti sono diversi)
pCopyStm->LocToLoc( frStm, frLoc) ;
// lo assegno al vettore di superfici
vStm.emplace_back( Release( pCopyStm)) ;
}
// creo lo Zmap nel riferimento intrinseco
PtrOwner<IVolZmap> pVZM( CreateVolZmap()) ;
bool bOk = ( ! IsNull( pVZM)) ;
bOk = bOk && pVZM->CreateFromTriMeshThickeningOffset( vStm, dOffs, dPrec, nType) ;
// dealloco le superfici
for ( auto& pStm : vStm) {
delete ( pStm) ;
pStm = nullptr ;
}
// inserisco lo Zmap nel DB
int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pVZM)) : GDB_ID_NULL) ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtCreateVolZmapFromSurfTmThickeningOffset(" + IdToString( nParentId) + "," +
ToString( vStmId) + "," +
ToString( dOffs) + "," +
ToString( dPrec) + "," ")" +
" -- Id=" + ToString( nNewId) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
// restituisco l'identificativo della nuova entità
return nNewId ;
}
//-------------------------------------------------------------------------------
bool
ExeUpdateVolZmapByAddingSurfTm( int nVolZmapId, int nStmId)