EgtExecutor 2.5j1 :
- aggiunta funzione Exe e Lua SubtractProjectedFacesOnStmFace - aggiunta di un parametro opzionale per Exe e Lua GetSilhouette.
This commit is contained in:
@@ -29,8 +29,10 @@
|
||||
#include "/EgtDev/Include/EGkStmFromTriangleSoup.h"
|
||||
#include "/EgtDev/Include/EGkCAvSimpleSurfFrMove.h"
|
||||
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
||||
#include "/EgtDev/Include/EGkSubtractProjectedFacesOnStmFace.h"
|
||||
#include "/EgtDev/Include/EgtPointerOwner.h"
|
||||
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -924,3 +926,69 @@ ExeSurfTmCut( int nId, int nCutterId, bool bInVsOut, bool bSaveOnEq)
|
||||
}
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeSubtractProjectedFacesOnStmFace( int nSurfId, int nFaceInd, int nDestGrpId,
|
||||
INTVECTOR vSurfsId, INTVECTOR vSurfFacesInd, bool bOCFlag,
|
||||
int& nNewId, bool& bExistProjection, int& nNewFaceNbr)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, false)
|
||||
// controllo dimensione dei vettori passati come parametri
|
||||
if ( int( vSurfsId.size()) != int( vSurfFacesInd.size()))
|
||||
return false ;
|
||||
// recupero la superficie TriMesh su cui proiettare
|
||||
ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nSurfId)) ;
|
||||
if ( pStm == nullptr)
|
||||
return false ;
|
||||
// recupero il riferimento della superficie
|
||||
Frame3d frSurf ;
|
||||
if ( ! pGeomDB->GetGlobFrame( nSurfId, frSurf))
|
||||
return false ;
|
||||
// recupero il riferimento del gruppo di destinazione
|
||||
Frame3d frDest ;
|
||||
if ( ! pGeomDB->GetGroupGlobFrame( nDestGrpId, frDest))
|
||||
return false ;
|
||||
// costruzione vettori di superfici e indici delle facce per proiezione
|
||||
ISURFTMPOVECTOR vpStmOthers ;
|
||||
vector<SurfLocal> vSurfCLoc ;
|
||||
// recupero le altre superfici e le porto nel sistema di riferimento della prima
|
||||
for ( int i = 0 ; i < int( vSurfsId.size()) ; ++ i) {
|
||||
if ( pGeomDB->GetGeoType( vSurfsId[i]) != SRF_TRIMESH)
|
||||
return false ;
|
||||
vSurfCLoc.emplace_back( pGeomDB, vSurfsId[i], frSurf) ;
|
||||
const ISurfTriMesh* pStmCurr = GetSurfTriMesh( vSurfCLoc.back().Get()) ;
|
||||
vpStmOthers.emplace_back( pStmCurr->Clone()) ;
|
||||
}
|
||||
// eseguo la proiezione
|
||||
ISurfTriMesh* pStmRes = nullptr ;
|
||||
bool bOk = SubtractProjectedFacesOnStmFace( *pStm, nFaceInd, vpStmOthers, vSurfFacesInd, bOCFlag,
|
||||
bExistProjection, pStmRes, nNewFaceNbr) ;
|
||||
if ( ! bOk)
|
||||
delete( pStmRes) ;
|
||||
|
||||
nNewId = GDB_ID_NULL ;
|
||||
if ( bOk && pStmRes != nullptr) {
|
||||
// porto nel sistema di riferimento destinazione
|
||||
pStmRes->LocToLoc( frSurf, frDest) ;
|
||||
// la inserisco nel DB geometrico
|
||||
nNewId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, pStmRes) ;
|
||||
if ( nNewId == GDB_ID_NULL)
|
||||
return false ;
|
||||
ExeSetModified() ;
|
||||
}
|
||||
|
||||
if ( IsCmdLog()) {
|
||||
string sLua = "EgtSubtractProjectedFacesOnStmFace(" + ToString( nSurfId) + "," +
|
||||
ToString( nFaceInd) + "," +
|
||||
ToString( nDestGrpId) + "," +
|
||||
ToString( vSurfsId) + "," +
|
||||
ToString( vSurfFacesInd) + "," +
|
||||
ToString( bOCFlag) + ")" +
|
||||
" -- Ok=" + ToString( bOk) + " Id=" + ToString( nNewId) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user