From d5d5bc4ac61e21ec774239500bd7fbb145f1833c Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 4 Feb 2019 17:07:15 +0000 Subject: [PATCH] EgtExecutor 2.1b2 : - aggiunta funzione Exe e Lua SurfFrTestExternal per verificare se due regioni complanari sono esterne con una voluta tolleranza. --- EXE_GeoSnap.cpp | 27 +++++++++++++++++++++++++++ EgtExecutor.rc | Bin 16176 -> 16176 bytes LUA_GeoSnap.cpp | 19 +++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/EXE_GeoSnap.cpp b/EXE_GeoSnap.cpp index 53633d5..37a3456 100644 --- a/EXE_GeoSnap.cpp +++ b/EXE_GeoSnap.cpp @@ -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 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) diff --git a/EgtExecutor.rc b/EgtExecutor.rc index 642acef00a9ec1eddfb5da433d482f63b55b412c..380b9e37a97b29b6996a81e5c3c1656c9eba06fe 100644 GIT binary patch delta 79 zcmdl`x1nysFE&P_&A-`PnSqoe*K!sx?>N)s4T4pSMw1=6k~jAW*?>e(i-FY$N+HxV MD8kglDP58Q0C_7LTL1t6 delta 79 zcmdl`x1nysFE&QQ&A-`PnSqoe*K!sx?>N)s4T4pShLat+k~jAW*?>e(i-FY$N+HxV MD8kglDP58Q0C(RTQvd(} diff --git a/LUA_GeoSnap.cpp b/LUA_GeoSnap.cpp index f470135..0a59f17 100644 --- a/LUA_GeoSnap.cpp +++ b/LUA_GeoSnap.cpp @@ -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) ;