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:
Dario Sassi
2015-08-07 10:48:19 +00:00
parent af849e6202
commit 064fb60719
7 changed files with 256 additions and 0 deletions
+61
View File
@@ -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)