EgtExecutor 1.6h2 :
- aggiunta CreateSurfFlatRegion per EXE e LUA - aggiunta TrimCurveWithRegion per EXE e LUA - aggiunta ExtractSurfFrLoop per EXE e LUA.
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
#include "GeoTools.h"
|
||||
#include "/EgtDev/Include/EXeExecutor.h"
|
||||
#include "/EgtDev/Include/EXeConst.h"
|
||||
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
|
||||
#include "/EgtDev/Include/EGkStmStandard.h"
|
||||
#include "/EgtDev/Include/EGkStmFromCurves.h"
|
||||
#include "/EgtDev/Include/EGkStmFromTriangleSoup.h"
|
||||
@@ -29,6 +30,66 @@
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
int
|
||||
ExeCreateSurfFlatRegion( int nParentId, INTVECTOR& vCrvIds)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
nParentId = AdjustId( nParentId) ;
|
||||
bool bOk = true ;
|
||||
// recupero il riferimento locale
|
||||
Frame3d frLoc ;
|
||||
bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ;
|
||||
// creo la regione piana
|
||||
PtrOwner<ISurfFlatRegion> pSFR( CreateSurfFlatRegion()) ;
|
||||
bOk = bOk && ( ! IsNull( pSFR)) ;
|
||||
// creo le copie locali delle curve
|
||||
bool bFirst = true ;
|
||||
for ( size_t i = 0 ; i < vCrvIds.size() ; ++ i) {
|
||||
int nId = (( vCrvIds[i] != GDB_ID_SEL) ? vCrvIds[i] : pGeomDB->GetFirstSelectedObj()) ;
|
||||
while ( nId != GDB_ID_NULL) {
|
||||
// recupero riferimento della curva
|
||||
Frame3d frCrv ;
|
||||
bOk = bOk && pGeomDB->GetGlobFrame( nId, frCrv) ;
|
||||
// recupero la curva
|
||||
ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nId)) ;
|
||||
bOk = bOk && pCrv != nullptr ;
|
||||
// ne faccio una copia
|
||||
PtrOwner<ICurve> pCopCrv( ( bOk ? pCrv->Clone() : nullptr)) ;
|
||||
bOk = bOk && ! IsNull( pCopCrv) ;
|
||||
// se i riferimenti sono diversi, eseguo la trasformazione
|
||||
if ( ! AreSameFrame( frCrv, frLoc))
|
||||
bOk = bOk && pCopCrv->LocToLoc( frCrv, frLoc) ;
|
||||
// la assegno alla regione
|
||||
if ( bFirst) {
|
||||
bOk = bOk && pSFR->SetExtLoop( Release( pCopCrv)) ;
|
||||
bFirst = false ;
|
||||
}
|
||||
else
|
||||
bOk = bOk && pSFR->AddIntLoop( Release( pCopCrv)) ;
|
||||
// passo al successivo
|
||||
nId = (( vCrvIds[i] != GDB_ID_SEL) ? GDB_ID_NULL : pGeomDB->GetNextSelectedObj()) ;
|
||||
}
|
||||
}
|
||||
// inserisco la superficie nel DB
|
||||
int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pSFR)) : GDB_ID_NULL) ;
|
||||
ExeSetModified() ;
|
||||
// se richiesto, salvo il comando Lua equivalente
|
||||
if ( IsCmdLog()) {
|
||||
string sIds ;
|
||||
for ( size_t i = 0 ; i < vCrvIds.size() ; ++ i)
|
||||
sIds += ToString( vCrvIds[i]) + "," ;
|
||||
sIds.pop_back() ;
|
||||
string sLua = "EgtSurfFlatRegion(" + IdToString( nParentId) + ",{" +
|
||||
sIds + "}," +
|
||||
" -- Id=" + ToString( nNewId) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
// restituisco l'identificativo della nuova entità
|
||||
return nNewId ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
int
|
||||
ExeCreateSurfTmBBox( int nParentId, const BBox3d& b3Box, int nRefType)
|
||||
|
||||
Reference in New Issue
Block a user