From 9811b5a249ea89d13d57eac2dc1d52e2c461026a Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Sat, 22 Aug 2015 13:52:32 +0000 Subject: [PATCH] EgtExecutor 1.6h4 : - aggiunte SurfFrAdd, SurfFrSubtract e SurfFrInytersect a EXE e LUA. --- EXE_GdbModifySurf.cpp | 121 +++++++++++++++++++++++++++++++++++++++++- EXE_Nesting.cpp | 4 +- EgtExecutor.rc | Bin 11686 -> 11686 bytes LUA_GdbModifySurf.cpp | 51 ++++++++++++++++++ 4 files changed, 172 insertions(+), 4 deletions(-) diff --git a/EXE_GdbModifySurf.cpp b/EXE_GdbModifySurf.cpp index 080e743..c5c1a16 100644 --- a/EXE_GdbModifySurf.cpp +++ b/EXE_GdbModifySurf.cpp @@ -163,6 +163,123 @@ ExeExplodeSurface( int nId, int* pnCount) return nFirstId ; } +//---------------------------------------------------------------------------- +bool +ExeSurfFrAdd( int nId1, int nId2) +{ + 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 + const ISurfFlatRegion* pSfr2 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId2)) ; + bOk = bOk && ( pSfr2 != nullptr) ; + // recupero il riferimento della superficie + Frame3d frSurf2 ; + bOk = bOk && pGeomDB->GetGlobFrame( nId2, frSurf2) ; + // se riferimenti diversi, porto una copia della seconda nel riferimento della prima + const ISurfFlatRegion* pSfr2L = pSfr2 ; + PtrOwnerpTmp ; + if ( ! AreSameFrame( frSurf1, frSurf2)) { + pTmp.Set( CloneSurfFlatRegion( pSfr2)) ; + bOk = bOk && ! IsNull( pTmp) ; + pSfr2L = Get( pTmp) ; + } + // eseguo l'unione tra le due superfici + bOk = bOk && pSfr1->Add( *pSfr2L) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtSurfFrAdd(" + ToString( nId1) + "," + + ToString( nId2) + ")" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +ExeSurfFrSubtract( int nId1, int nId2) +{ + 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 + const ISurfFlatRegion* pSfr2 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId2)) ; + bOk = bOk && ( pSfr2 != nullptr) ; + // recupero il riferimento della superficie + Frame3d frSurf2 ; + bOk = bOk && pGeomDB->GetGlobFrame( nId2, frSurf2) ; + // se riferimenti diversi, porto una copia della seconda nel riferimento della prima + const ISurfFlatRegion* pSfr2L = pSfr2 ; + PtrOwnerpTmp ; + if ( ! AreSameFrame( frSurf1, frSurf2)) { + pTmp.Set( CloneSurfFlatRegion( pSfr2)) ; + bOk = bOk && ! IsNull( pTmp) ; + pSfr2L = Get( pTmp) ; + } + // eseguo la sottrazione della seconda superficie dalla prima + bOk = bOk && pSfr1->Subtract( *pSfr2L) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtSurfFrSubtract(" + ToString( nId1) + "," + + ToString( nId2) + ")" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +ExeSurfFrIntersect( int nId1, int nId2) +{ + 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 + const ISurfFlatRegion* pSfr2 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId2)) ; + bOk = bOk && ( pSfr2 != nullptr) ; + // recupero il riferimento della superficie + Frame3d frSurf2 ; + bOk = bOk && pGeomDB->GetGlobFrame( nId2, frSurf2) ; + // se riferimenti diversi, porto una copia della seconda nel riferimento della prima + const ISurfFlatRegion* pSfr2L = pSfr2 ; + PtrOwnerpTmp ; + if ( ! AreSameFrame( frSurf1, frSurf2)) { + pTmp.Set( CloneSurfFlatRegion( pSfr2)) ; + bOk = bOk && ! IsNull( pTmp) ; + pSfr2L = Get( pTmp) ; + } + // eseguo l'intersezione tra le due superfici + bOk = bOk && pSfr1->Intersect( *pSfr2L) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtSurfFrIntersect(" + ToString( nId1) + "," + + ToString( nId2) + ")" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + return bOk ; +} + //---------------------------------------------------------------------------- int ExeExtractSurfFrChunkLoops( int nId, int nChunk, int nDestGrpId, int* pnCount) @@ -203,7 +320,7 @@ ExeExtractSurfFrChunkLoops( int nId, int nChunk, int nDestGrpId, int* pnCount) ExeSetModified() ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { - string sLua = "EgtExtractSurfFrChunkLoops(" + ToString( nId) + ",{" + + string sLua = "EgtExtractSurfFrChunkLoops(" + ToString( nId) + "," + ToString( nChunk) + "," + ToString( nDestGrpId) + ")" + " -- Id=" + ToString( nFirstId) + ",Nbr=" + ToString( nCount) ; @@ -257,7 +374,7 @@ ExeExtractSurfTmFacetLoops( int nId, int nFacet, int nDestGrpId, int* pnCount) ExeSetModified() ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { - string sLua = "EgtExtractSurfTmFacetLoops(" + ToString( nId) + ",{" + + string sLua = "EgtExtractSurfTmFacetLoops(" + ToString( nId) + "," + ToString( nFacet) + "," + ToString( nDestGrpId) + ")" + " -- Id1=" + ToString( nFirstId) + ",Nbr=" + ToString( nCount) ; diff --git a/EXE_Nesting.cpp b/EXE_Nesting.cpp index c7233c2..c6593c9 100644 --- a/EXE_Nesting.cpp +++ b/EXE_Nesting.cpp @@ -242,7 +242,7 @@ CreateFlatPartsByRegions( int nLay) // conservo solo le parti interne for ( int k = 0 ; k < int( ccClass.size()) ; ++ k) { if ( ccClass[k].nClass != CRVC_IN) - inCrv.Remove( ccClass[k].dParS, ccClass[k].dParE) ; + inCrv.Subtract( ccClass[k].dParS, ccClass[k].dParE) ; } // tratti di curva rimasti int nNum = inCrv.GetCount() ; @@ -410,7 +410,7 @@ VerifyAndAdjustFlatParts( void) // conservo solo le parti interne for ( int k = 0 ; k < int( ccClass.size()) ; ++ k) { if ( ccClass[k].nClass != CRVC_IN) - inCrv.Remove( ccClass[k].dParS, ccClass[k].dParE) ; + inCrv.Subtract( ccClass[k].dParS, ccClass[k].dParE) ; } } // tratti di curva rimasti diff --git a/EgtExecutor.rc b/EgtExecutor.rc index e6630752ee8e0e9e9f5f967b675077e6af6444f9..36a19333666f086de36818d09a1acdd035d17d6a 100644 GIT binary patch delta 79 zcmZ1$y)1geFE&P#&A-`PnSqoe*K!sx?>N)s4T4pSCX*exk~jAW*?>e(i-FY$N+HxV MD8kglDS2=M0AF|-b^rhX delta 79 zcmZ1$y)1geFE&Qw&A-`PnSqoe*K!sx?>N)s4T4pS#*-bnk~jAW*?>e(i-FY$N+HxV MD8kglDS2=M0A4H_ZU6uP diff --git a/LUA_GdbModifySurf.cpp b/LUA_GdbModifySurf.cpp index 92a5f4d..76f7623 100644 --- a/LUA_GdbModifySurf.cpp +++ b/LUA_GdbModifySurf.cpp @@ -56,6 +56,54 @@ LuaExplodeSurf( lua_State* L) return 2 ; } +//------------------------------------------------------------------------------- +static int +LuaSurfFrAdd( lua_State* L) +{ + // 2 parametro : Id1, Id2 + int nId1 ; + LuaCheckParam( L, 1, nId1) + int nId2 ; + LuaCheckParam( L, 2, nId2) + LuaClearStack( L) ; + // unisco alla prima regione la seconda + bool bOk = ExeSurfFrAdd( nId1, nId2) ; + LuaSetParam( L, bOk) ; + return 1 ; +} + +//------------------------------------------------------------------------------- +static int +LuaSurfFrSubtract( lua_State* L) +{ + // 2 parametro : Id1, Id2 + int nId1 ; + LuaCheckParam( L, 1, nId1) + int nId2 ; + LuaCheckParam( L, 2, nId2) + LuaClearStack( L) ; + // sottraggo dalla prima regione la seconda + bool bOk = ExeSurfFrSubtract( nId1, nId2) ; + LuaSetParam( L, bOk) ; + return 1 ; +} + +//------------------------------------------------------------------------------- +static int +LuaSurfFrIntersect( lua_State* L) +{ + // 2 parametro : Id1, Id2 + int nId1 ; + LuaCheckParam( L, 1, nId1) + int nId2 ; + LuaCheckParam( L, 2, nId2) + LuaClearStack( L) ; + // interseco la prima regione con la seconda + bool bOk = ExeSurfFrIntersect( nId1, nId2) ; + LuaSetParam( L, bOk) ; + return 1 ; +} + //---------------------------------------------------------------------------- static int LuaExtractSurfFrChunkLoops( lua_State* L) @@ -111,6 +159,9 @@ LuaInstallGdbModifySurf( LuaMgr& luaMgr) bool bOk = ( &luaMgr != nullptr) ; bOk = bOk && luaMgr.RegisterFunction( "EgtInvertSurf", LuaInvertSurf) ; bOk = bOk && luaMgr.RegisterFunction( "EgtExplodeSurf", LuaExplodeSurf) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtSurfFrAdd", LuaSurfFrAdd) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtSurfFrSubtract", LuaSurfFrSubtract) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtSurfFrIntersect", LuaSurfFrIntersect) ; bOk = bOk && luaMgr.RegisterFunction( "EgtExtractSurfFrChunkLoops", LuaExtractSurfFrChunkLoops) ; bOk = bOk && luaMgr.RegisterFunction( "EgtExtractSurfTmFacetLoops", LuaExtractSurfTmFacetLoops) ; return bOk ;