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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user