From 9135fe039ff3760352b70bd44367a4ac3676c86b Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Fri, 19 Jul 2024 13:14:20 +0200 Subject: [PATCH] EgtExecutor : - aggiunte le skinned con le Bezier. --- EXE_GdbCreateSurf.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ LUA_GdbCreateSurf.cpp | 23 +++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/EXE_GdbCreateSurf.cpp b/EXE_GdbCreateSurf.cpp index 420a4ae..37cc691 100644 --- a/EXE_GdbCreateSurf.cpp +++ b/EXE_GdbCreateSurf.cpp @@ -2282,3 +2282,43 @@ ExeCreateSurfBzRuled( int nParentId, int nCrvId1, int nCrvId2, int nRuledType, d // restituisco l'identificativo della nuova entità return nNewId ; } + +//------------------------------------------------------------------------------- +int +ExeCreateSurfBzSkinned( int nParentId, const INTVECTOR& vCrvIds, double dLinTol) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + nParentId = AdjustId( nParentId) ; + bool bOk = true ; + // recupero il riferimento locale + Frame3d frLoc ; + bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ; + // recupero le curve in locale + CURVELOCALVECTOR vCrvLoc ; + vCrvLoc.reserve( vCrvIds.size()) ; + CICURVEPVECTOR vCrvP ; + vCrvP.reserve( vCrvIds.size()) ; + for ( size_t i = 0 ; i < vCrvIds.size() ; ++ i) { + int nId = vCrvIds[i] ; + vCrvLoc.emplace_back( pGeomDB, nId, frLoc) ; + vCrvP.push_back( vCrvLoc.back().Get()) ; + bOk = bOk && ( vCrvLoc[i].Get() != nullptr) ; + } + + // calcolo la superficie + ISurfBezier* pSbz = ( bOk ? GetSurfBezierSkinned( vCrvP, dLinTol) : nullptr ) ; + // inserisco la superficie nel DB + int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, pSbz) : GDB_ID_NULL) ; + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtSurfbzByScrewing(" + IdToString( nParentId) + ",{" + + IdListToString( vCrvIds) + "}," + + ToString( dLinTol) + ")" + + " -- Id=" + ToString( nNewId) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + // restituisco l'identificativo della nuova entità + return nNewId ; +} diff --git a/LUA_GdbCreateSurf.cpp b/LUA_GdbCreateSurf.cpp index 7c5f287..5a4e2d7 100644 --- a/LUA_GdbCreateSurf.cpp +++ b/LUA_GdbCreateSurf.cpp @@ -1184,6 +1184,28 @@ LuaCreateSurfBzRuled( lua_State* L) return 1 ; } +//------------------------------------------------------------------------------- +static int +LuaCreateSurfBzSkinned( lua_State* L) +{ + // 4 o 5 parametri : ParentId, vCrvIds, [, dTol] + int nParentId ; + LuaCheckParam( L, 1, nParentId) + INTVECTOR vCrvIds ; + LuaCheckParam( L, 2, vCrvIds) + double dLinTol = LIN_TOL_SRF ; + LuaGetParam( L, 3, dLinTol) ; + LuaClearStack( L) ; + // creo STM riempiendo un contorno piano + int nId = ExeCreateSurfBzSkinned( nParentId, vCrvIds, dLinTol) ; + // restituisco il risultato + if ( nId != GDB_ID_NULL) + LuaSetParam( L, nId) ; + else + LuaSetParam( L) ; + return 1 ; +} + //------------------------------------------------------------------------------- bool LuaInstallGdbCreateSurf( LuaMgr& luaMgr) @@ -1230,5 +1252,6 @@ LuaInstallGdbCreateSurf( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtSurfBzByRevolve", LuaCreateSurfBzByRevolve) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfBzByPointCurve", LuaCreateSurfBzByPointCurve) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfBzRuled", LuaCreateSurfBzRuled) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtSurfBzSkinned", LuaCreateSurfBzSkinned) ; return bOk ; }