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:
@@ -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)
|
||||
|
||||
Binary file not shown.
@@ -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) ;
|
||||
|
||||
Reference in New Issue
Block a user