EgtExecutor 2.1b2 :

- aggiunta funzione Exe e Lua SurfFrTestExternal per verificare se due regioni complanari sono esterne con una voluta tolleranza.
This commit is contained in:
Dario Sassi
2019-02-04 17:07:15 +00:00
parent e379440b84
commit d5d5bc4ac6
3 changed files with 46 additions and 0 deletions
+27
View File
@@ -27,6 +27,7 @@
#include "/EgtDev/Include/EgkSurf.h"
#include "/EgtDev/Include/EgkSurfFlatRegion.h"
#include "/EgtDev/Include/EgkSurfTriMesh.h"
#include "/EgtDev/Include/EGkSurfLocal.h"
#include "/EgtDev/Include/EgkVolZmap.h"
#include "/EgtDev/Include/EgkExtText.h"
#include "/EgtDev/Include/EgkDistPointCurve.h"
@@ -966,6 +967,32 @@ ExeSurfFrChunkSimpleClassify( int nId1, int nChunk1, int nId2, int nChunk2)
return nRes ;
}
//----------------------------------------------------------------------------
bool
ExeSurfFrTestExternal( int nId1, int nId2, double dMinDist)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
// recupero la prima superficie FlatRegion
ISurfFlatRegion* pSfr1 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId1)) ;
bool bOk = ( pSfr1 != nullptr) ;
// recupero il riferimento della superficie
Frame3d frSurf1 ;
bOk = bOk && pGeomDB->GetGlobFrame( nId1, frSurf1) ;
// recupero la seconda superficie FlatRegion in locale alla prima
SurfLocal Surf2Loc( pGeomDB, nId2, frSurf1) ;
const ISurfFlatRegion* pSfr2L = GetSurfFlatRegion( Surf2Loc) ;
bOk = bOk && ( pSfr2L != nullptr) ;
// se richiesta distanza di sicurezza, ne faccio l'offset
PtrOwner<ISurfFlatRegion> pSfr2LO( pSfr2L->Clone()) ;
bOk = bOk && ( ! IsNull( pSfr2LO)) ;
if ( bOk && dMinDist > 10 * EPS_SMALL)
pSfr2LO->Offset( dMinDist, ICurve::OFF_FILLET) ;
// eseguo il test di intersezione tra le due superfici
bOk = bOk && ( pSfr1->GetChunkSimpleClassification( 0, *pSfr2LO, 0) == REGC_OUT) ;
return bOk ;
}
//----------------------------------------------------------------------------
int
ExeSurfTmFacetCount( int nId)
BIN
View File
Binary file not shown.
+19
View File
@@ -686,6 +686,24 @@ LuaSurfFrChunkSimpleClassify( lua_State* L)
return 1 ;
}
//----------------------------------------------------------------------------
static int
LuaSurfFrTestExternal( lua_State* L)
{
// 2 o 3 parametri : Id1, Id2 [, dMinDist]
int nId1 ;
LuaCheckParam( L, 1, nId1)
int nId2 ;
LuaCheckParam( L, 2, nId2)
double dMinDist = 0 ;
LuaGetParam( L, 3, dMinDist) ;
LuaClearStack( L) ;
// verifico se le due regioni sono esterne con distanza superiore al minimo
bool bOk = ExeSurfFrTestExternal( nId1, nId2, dMinDist) ;
LuaSetParam( L, bOk) ;
return 1 ;
}
//----------------------------------------------------------------------------
static int
LuaSurfTmFacetCount( lua_State* L)
@@ -1042,6 +1060,7 @@ LuaInstallGeoSnap( LuaMgr& luaMgr)
bOk = bOk && luaMgr.RegisterFunction( "EgtSurfFrGrossArea", LuaSurfFrGrossArea) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtSurfFrChunkCount", LuaSurfFrChunkCount) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtSurfFrChunkSimpleClassify", LuaSurfFrChunkSimpleClassify) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtSurfFrTestExternal", LuaSurfFrTestExternal) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmFacetCount", LuaSurfTmFacetCount) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmFacetAdjacencies", LuaSurfTmFacetAdjacencies) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmFacetNearestEndPoint", LuaSurfTmFacetNearestEndPoint) ;