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
+56
View File
@@ -916,6 +916,62 @@ ExeSurfTmIntersect( int nId1, int nId2, bool bTwoColors)
return bOk ;
}
//----------------------------------------------------------------------------
int
ExeSurfTmOffset( const INTVECTOR& vStmIds, double dOffs, double dLinTol, int nDestGrpId)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
// se non ci sono superfici non c'è niente da calcolare
if ( vStmIds.empty())
return GDB_ID_NULL ;
// recupero il riferimento della prima superficie
Frame3d frSurf ;
if ( ! pGeomDB->GetGlobFrame( vStmIds[0], frSurf))
return GDB_ID_NULL ;
// recupero il riferimento di destinazione
Frame3d frDest ;
if ( ! pGeomDB->GetGroupGlobFrame( nDestGrpId, frDest))
return GDB_ID_NULL ;
// recupero le superfici TriMesh e le porto tutte in locale alla prima
CISURFTMPVECTOR vpStm ; vpStm.reserve( vStmIds.size()) ;
for ( int i = 0 ; i < int( vStmIds.size()) ; ++ i) {
// recupero la superficie TriMesh
IGeoObj* pGeoObj = pGeomDB->GetGeoObj( vStmIds[i]) ;
if ( pGeoObj->GetType() != SRF_TRIMESH)
return GDB_ID_NULL ;
// recupero una copia della superficie TriMesh e la porto il locale
ISurfTriMesh* pStm = CloneSurfTriMesh( GetSurfTriMesh( pGeoObj)) ;
if ( pStm != nullptr) {
pStm->LocToLoc( frSurf, frDest) ;
vpStm.emplace_back( pStm) ;
}
}
// recupero la superficie risultante
int nId = GDB_ID_NULL ;
PtrOwner<ISurfTriMesh> pStmOffs( CreateSurfTriMeshesOffset( vpStm, dOffs, dLinTol)) ;
bool bOk = ( ! IsNull( pStmOffs) && pStmOffs->IsValid()) ;
if ( bOk)
nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( pStmOffs)) ;
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
if ( IsCmdLog()) {
string sLua = "EgtOffsetSurfTm(" + ToString( vStmIds) + "," +
ToString( dOffs) + "," +
ToString( dLinTol) + "," +
ToString( nDestGrpId) + ")" +
" -- Id=" + ToString( nId) ;
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
}
// restituisco il risultato
for ( int i = 0 ; i < int( vpStm.size()) ; ++ i) {
if ( vpStm[i] != nullptr)
delete vpStm[i] ;
vpStm[i] = nullptr ;
}
return nId ;
}
//----------------------------------------------------------------------------
static ISurfTriMesh*
MyCreateSubSurfTm( const ISurfTriMesh* pStm, const INTVECTOR& vTria, const INTVECTOR& vTria2)