diff --git a/EXE_GdbModifySurf.cpp b/EXE_GdbModifySurf.cpp index d52d8ab..938c22b 100644 --- a/EXE_GdbModifySurf.cpp +++ b/EXE_GdbModifySurf.cpp @@ -504,7 +504,7 @@ ExeCutSurfTmClosedCurve( int nSurfId, int nCurveId, bool bSaveOnEq) //---------------------------------------------------------------------------- bool -ExeSurfTmAdd( int nId1, int nId2) +ExeSurfTmAdd( int nId1, int nId2, bool bTwoColors) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) @@ -520,6 +520,9 @@ ExeSurfTmAdd( int nId1, int nId2) bOk = bOk && ( pStm2L != nullptr) ; // eseguo l'unione tra le due superfici bOk = bOk && pStm1->Add( *pStm2L) ; + // se non richiesti due colori + if ( bOk && ! bTwoColors) + pStm1->ResetTFlags() ; ExeSetModified() ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { @@ -533,7 +536,7 @@ ExeSurfTmAdd( int nId1, int nId2) //---------------------------------------------------------------------------- bool -ExeSurfTmSubtract( int nId1, int nId2) +ExeSurfTmSubtract( int nId1, int nId2, bool bTwoColors) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) @@ -550,8 +553,13 @@ ExeSurfTmSubtract( int nId1, int nId2) // eseguo la sottrazione tra le due superfici bOk = bOk && pStm1->Subtract( *pStm2L) ; // se il risultato è vuoto, cancello la superficie - if ( bOk && ! pStm1->IsValid()) + if ( bOk && ! pStm1->IsValid()) { pGeomDB->Erase( nId1) ; + pStm1 = nullptr ; + } + // se non richiesti due colori + if ( bOk && ! bTwoColors && pStm1 != nullptr) + pStm1->ResetTFlags() ; ExeSetModified() ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { @@ -565,7 +573,7 @@ ExeSurfTmSubtract( int nId1, int nId2) //---------------------------------------------------------------------------- bool -ExeSurfTmIntersect( int nId1, int nId2) +ExeSurfTmIntersect( int nId1, int nId2, bool bTwoColors) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) @@ -582,8 +590,13 @@ ExeSurfTmIntersect( int nId1, int nId2) // eseguo l'intersezione tra le due superfici bOk = bOk && pStm1->Intersect( *pStm2L) ; // se il risultato è vuoto, cancello la superficie - if ( bOk && ! pStm1->IsValid()) + if ( bOk && ! pStm1->IsValid()) { pGeomDB->Erase( nId1) ; + pStm1 = nullptr ; + } + // se non richiesti due colori + if ( bOk && ! bTwoColors && pStm1 != nullptr) + pStm1->ResetTFlags() ; ExeSetModified() ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { @@ -595,6 +608,27 @@ ExeSurfTmIntersect( int nId1, int nId2) return bOk ; } +//---------------------------------------------------------------------------- +bool +ExeSurfTmResetTwoColors( int nId) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + // recupero la superficie TriMesh + ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nId)) ; + bool bOk = ( pStm != nullptr) ; + // reset dei flag sui triangoli per i due colori + bOk = bOk && pStm->ResetTFlags() ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtSurfTmResetTwoColors(" + ToString( nId) + ")" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + return bOk ; +} + //---------------------------------------------------------------------------- static ISurfTriMesh* MyCreateSubSurfTm( const ISurfTriMesh* pStm, const INTVECTOR& vTria) diff --git a/EgtExecutor.rc b/EgtExecutor.rc index 476083a..12825a1 100644 Binary files a/EgtExecutor.rc and b/EgtExecutor.rc differ diff --git a/LUA_GdbModifySurf.cpp b/LUA_GdbModifySurf.cpp index 4655eb5..8a74401 100644 --- a/LUA_GdbModifySurf.cpp +++ b/LUA_GdbModifySurf.cpp @@ -222,14 +222,16 @@ LuaCutSurfTmClosedCurve( lua_State* L) static int LuaSurfTmAdd( lua_State* L) { - // 2 parametro : Id1, Id2 + // 2 o 3 parametri : Id1, Id2 [, bTwoColors] int nId1 ; LuaCheckParam( L, 1, nId1) int nId2 ; LuaCheckParam( L, 2, nId2) + bool bTwoColors = false ; + LuaGetParam( L, 3, bTwoColors) ; LuaClearStack( L) ; // unisco alla prima superficie la seconda - bool bOk = ExeSurfTmAdd( nId1, nId2) ; + bool bOk = ExeSurfTmAdd( nId1, nId2, bTwoColors) ; LuaSetParam( L, bOk) ; return 1 ; } @@ -238,14 +240,16 @@ LuaSurfTmAdd( lua_State* L) static int LuaSurfTmSubtract( lua_State* L) { - // 2 parametro : Id1, Id2 + // 2 o 3 parametri : Id1, Id2 [, bTwoColors] int nId1 ; LuaCheckParam( L, 1, nId1) int nId2 ; LuaCheckParam( L, 2, nId2) + bool bTwoColors = false ; + LuaGetParam( L, 3, bTwoColors) ; LuaClearStack( L) ; // sottraggo dalla prima superficie la seconda - bool bOk = ExeSurfTmSubtract( nId1, nId2) ; + bool bOk = ExeSurfTmSubtract( nId1, nId2, bTwoColors) ; LuaSetParam( L, bOk) ; return 1 ; } @@ -254,14 +258,30 @@ LuaSurfTmSubtract( lua_State* L) static int LuaSurfTmIntersect( lua_State* L) { - // 2 parametro : Id1, Id2 + // 2 o 3 parametri : Id1, Id2 [, bTwoColors] int nId1 ; LuaCheckParam( L, 1, nId1) int nId2 ; LuaCheckParam( L, 2, nId2) + bool bTwoColors = false ; + LuaGetParam( L, 3, bTwoColors) ; LuaClearStack( L) ; // interseco la prima superficie con la seconda - bool bOk = ExeSurfTmIntersect( nId1, nId2) ; + bool bOk = ExeSurfTmIntersect( nId1, nId2, bTwoColors) ; + LuaSetParam( L, bOk) ; + return 1 ; +} + +//------------------------------------------------------------------------------- +static int +LuaSurfTmResetTwoColors( lua_State* L) +{ + // 1 parametro : Id + int nId ; + LuaCheckParam( L, 1, nId) + LuaClearStack( L) ; + // eseguo reset TFlag per annullare due colori + bool bOk = ExeSurfTmResetTwoColors( nId) ; LuaSetParam( L, bOk) ; return 1 ; } @@ -306,6 +326,7 @@ LuaInstallGdbModifySurf( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmAdd", LuaSurfTmAdd) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmSubtract", LuaSurfTmSubtract) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmIntersect", LuaSurfTmIntersect) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmResetTwoColors", LuaSurfTmResetTwoColors) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfTmSplit", LuaSurfTmSplit) ; return bOk ; }