EgtExecutor 2.2i5 :
- migliorata ExeCreateOutRegion rettangolare per Nesting manuale - aggiunta funzione Exe e Lua SurfTmCut.
This commit is contained in:
+78
-1
@@ -631,7 +631,7 @@ ExeSurfTmResetTwoColors( int nId)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static ISurfTriMesh*
|
||||
MyCreateSubSurfTm( const ISurfTriMesh* pStm, const INTVECTOR& vTria)
|
||||
MyCreateSubSurfTm( const ISurfTriMesh* pStm, const INTVECTOR& vTria, const INTVECTOR& vTria2)
|
||||
{
|
||||
StmFromTriangleSoup StmFts ;
|
||||
if ( ! StmFts.Start())
|
||||
@@ -642,6 +642,12 @@ MyCreateSubSurfTm( const ISurfTriMesh* pStm, const INTVECTOR& vTria)
|
||||
! StmFts.AddTriangle( Tria))
|
||||
return nullptr ;
|
||||
}
|
||||
for ( int nT : vTria2) {
|
||||
Triangle3d Tria ;
|
||||
if ( ! pStm->GetTriangle( nT, Tria) ||
|
||||
! StmFts.AddTriangle( Tria))
|
||||
return nullptr ;
|
||||
}
|
||||
// valido la superficie e calcolo le adiacenze
|
||||
if ( ! StmFts.End())
|
||||
return nullptr ;
|
||||
@@ -649,6 +655,14 @@ MyCreateSubSurfTm( const ISurfTriMesh* pStm, const INTVECTOR& vTria)
|
||||
return StmFts.GetSurf() ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static ISurfTriMesh*
|
||||
MyCreateSubSurfTm( const ISurfTriMesh* pStm, const INTVECTOR& vTria)
|
||||
{
|
||||
INTVECTOR vNull ;
|
||||
return MyCreateSubSurfTm( pStm, vTria, vNull) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static int
|
||||
MySurfTmSplit( int nId, int nSplitterId, int& nCount)
|
||||
@@ -721,3 +735,66 @@ ExeSurfTmSplit( int nId, int nSplitterId, int* pnCount)
|
||||
*pnCount = nCount ;
|
||||
return nFirstId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static bool
|
||||
MySurfTmCut( int nId, int nSplitterId, bool bInVsOut, bool bSaveOnEq)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// recupero la superficie TriMesh da dividere in parti
|
||||
ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nId)) ;
|
||||
if ( pStm == nullptr)
|
||||
return false ;
|
||||
// recupero il riferimento della superficie
|
||||
Frame3d frSurf ;
|
||||
if ( ! pGeomDB->GetGlobFrame( nId, frSurf))
|
||||
return false ;
|
||||
// recupero la superficie TriMesh divisore in locale alla prima
|
||||
SurfLocal SurfCLoc( pGeomDB, nSplitterId, frSurf) ;
|
||||
const ISurfTriMesh* pStmCLoc = GetSurfTriMesh( SurfCLoc) ;
|
||||
if ( pStmCLoc == nullptr)
|
||||
return false ;
|
||||
// eseguo la classificazione
|
||||
INTVECTOR vTriaIn, vTriaOut, vTriaOnP, vTriaOnM, vTriaIndef ;
|
||||
if ( ! pStm->GetSurfClassification( *pStmCLoc, vTriaIn, vTriaOut, vTriaOnP, vTriaOnM, vTriaIndef))
|
||||
return false ;
|
||||
// costruisco la nuova superficie
|
||||
PtrOwner<ISurfTriMesh> pStmNew ;
|
||||
if ( bInVsOut) {
|
||||
if ( bSaveOnEq)
|
||||
pStmNew.Set( MyCreateSubSurfTm( pStm, vTriaIn, vTriaOnP)) ;
|
||||
else
|
||||
pStmNew.Set( MyCreateSubSurfTm( pStm, vTriaIn)) ;
|
||||
}
|
||||
else {
|
||||
if ( bSaveOnEq)
|
||||
pStmNew.Set( MyCreateSubSurfTm( pStm, vTriaOut, vTriaOnM)) ;
|
||||
else
|
||||
pStmNew.Set( MyCreateSubSurfTm( pStm, vTriaOut)) ;
|
||||
}
|
||||
if ( IsNull( pStmNew))
|
||||
return false ;
|
||||
// la sostituisco alla superficie originale
|
||||
if ( ! pGeomDB->ReplaceGeoObj( nId, Release( pStmNew)))
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeSurfTmCut( int nId, int nCutterId, bool bInVsOut, bool bSaveOnEq)
|
||||
{
|
||||
bool bOk = MySurfTmCut( nId, nCutterId, bInVsOut, bSaveOnEq) ;
|
||||
ExeSetModified() ;
|
||||
// se richiesto, salvo il comando Lua equivalente
|
||||
if ( IsCmdLog()) {
|
||||
string sLua = "EgtSurfTmCut(" + ToString( nId) + "," +
|
||||
ToString( nCutterId) + "," +
|
||||
ToString( bInVsOut) + "," +
|
||||
ToString( bSaveOnEq) + ")" +
|
||||
" -- Ok=" + ToString( bOk) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user