EgtExecutor 2.7f2 :

- Aggiunte funzioni per Offset di SurfTriMesh chiuse
- Migliorata la creazione di una TriMesh a partire da uno ZMap (con SaraP).
This commit is contained in:
Riccardo Elitropi
2025-06-16 11:37:23 +02:00
parent 092896750c
commit 362c845ed3
6 changed files with 160 additions and 22 deletions
+52
View File
@@ -188,6 +188,58 @@ ExeCreateVolZmapFromSurfTm( int nParentId, int nStmId, double dPrec, bool bTriDe
return nNewId ;
}
//-------------------------------------------------------------------------------
int ExeCreateVolZmapFromSurfTmOffset( int nParentId, const INTVECTOR& vStmId, double dOffs, double dPrec)
{
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) ;
// 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 = "EgtVolZmapFromTriMesh(" + 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)