diff --git a/EXE_GdbModify.cpp b/EXE_GdbModify.cpp index e0cb72a..4300f2d 100644 --- a/EXE_GdbModify.cpp +++ b/EXE_GdbModify.cpp @@ -98,6 +98,35 @@ ExeChangeVectorBase( int nId, const Point3d& ptB, int nRefType) return bOk ; } +//---------------------------------------------------------------------------- +bool +ExeInvertVector( const INTVECTOR& vIds) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, false) + // eseguo inversione + bool bOk = true ; + for ( size_t i = 0 ; i < vIds.size() && bOk ; ++ i) { + int nId = (( vIds[i] != GDB_ID_SEL) ? vIds[i] : pGeomDB->GetFirstSelectedObj()) ; + while ( nId != GDB_ID_NULL && bOk) { + // recupero il vettore e lo inverto + IGeoVector3d* pGVect = GetGeoVector3d( pGeomDB->GetGeoObj( nId)) ; + bOk = ( pGVect != nullptr && pGVect->ChangeVector( - pGVect->GetVector())) ; + // passo alla successiva + nId = (( vIds[i] != GDB_ID_SEL) ? GDB_ID_NULL : pGeomDB->GetNextSelectedObj()) ; + } + } + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtInvertVector({" + IdListToString( vIds) + "})" + + " -- Ok=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + // restituisco risultato + return bOk ; +} + //------------------------------------------------------------------------------- bool ExeModifyText( int nId, const string& sNewText) diff --git a/EXE_GdbModifyCurve.cpp b/EXE_GdbModifyCurve.cpp index a7d4ecd..89785c5 100644 --- a/EXE_GdbModifyCurve.cpp +++ b/EXE_GdbModifyCurve.cpp @@ -53,8 +53,7 @@ ExeInvertCurve( const INTVECTOR& vIds) while ( nId != GDB_ID_NULL && bOk) { // recupero la curva e la inverto ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; - if ( pCurve != nullptr && ! pCurve->Invert()) - bOk = false ; + bOk = ( pCurve != nullptr && pCurve->Invert()) ; // passo alla successiva nId = (( vIds[i] != GDB_ID_SEL) ? GDB_ID_NULL : pGeomDB->GetNextSelectedObj()) ; } diff --git a/EXE_GeomDB.cpp b/EXE_GeomDB.cpp index e8851c4..9e7a2c8 100644 --- a/EXE_GeomDB.cpp +++ b/EXE_GeomDB.cpp @@ -52,7 +52,7 @@ ExeInitContext( void) } //----------------------------------------------------------------------------- -int +bool ExeDeleteContext( int nGseCtx) { // se contesto corrente, lo resetto diff --git a/EgtExecutor.rc b/EgtExecutor.rc index ae4e384..0fc7f19 100644 Binary files a/EgtExecutor.rc and b/EgtExecutor.rc differ diff --git a/LUA_GdbModify.cpp b/LUA_GdbModify.cpp index d0458c5..e0cc7c1 100644 --- a/LUA_GdbModify.cpp +++ b/LUA_GdbModify.cpp @@ -58,6 +58,21 @@ LuaChangeVectorBase( lua_State* L) return 1 ; } +//---------------------------------------------------------------------------- +static int +LuaInvertVector( lua_State* L) +{ + // 1 parametro : Id/s + INTVECTOR vId ; + LuaCheckParam( L, 1, vId) + LuaClearStack( L) ; + // eseguo inversione vettori + bool bOk = ExeInvertVector( vId) ; + // restituisco il risultato + LuaSetParam( L, bOk) ; + return 1 ; +} + //------------------------------------------------------------------------------- static int LuaModifyText( lua_State* L) @@ -165,6 +180,7 @@ LuaInstallGdbModify( LuaMgr& luaMgr) bool bOk = ( &luaMgr != nullptr) ; bOk = bOk && luaMgr.RegisterFunction( "EgtChangeGroupFrame", LuaChangeGroupFrame) ; bOk = bOk && luaMgr.RegisterFunction( "EgtChangeVectorBase", LuaChangeVectorBase) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtInvertVector", LuaInvertVector) ; bOk = bOk && luaMgr.RegisterFunction( "EgtModifyText", LuaModifyText) ; bOk = bOk && luaMgr.RegisterFunction( "EgtChangeTextFont", LuaChangeTextFont) ; bOk = bOk && luaMgr.RegisterFunction( "EgtFlipText", LuaFlipText) ; diff --git a/LUA_General.cpp b/LUA_General.cpp index b870314..2d790be 100644 --- a/LUA_General.cpp +++ b/LUA_General.cpp @@ -74,32 +74,6 @@ LuaEvalNumExpr( lua_State* L) return 1 ; } -//------------------------------------------------------------------------------- -static int -LuaSetContext( lua_State* L) -{ - // un solo parametro intero - int nGseCtx ; - LuaCheckParam( L, 1, nGseCtx) - LuaClearStack( L) ; - // imposto il contesto - bool bOk = SetCurrGseContext( nGseCtx) ; - // restituisco il risultato - LuaSetParam( L, bOk) ; - return 1 ; -} - -//------------------------------------------------------------------------------- -static int -LuaGetContext( lua_State* L) -{ - // nessun parametro - LuaClearStack( L) ; - // restituisco l'indice del contesto - LuaSetParam( L, GetIndCurrGseContext()) ; - return 1 ; -} - //------------------------------------------------------------------------------- static int LuaPause( lua_State* L) @@ -170,8 +144,7 @@ LuaSplitString( lua_State* L) string sVal ; string sSep = "," ; bool bFound = LuaGetParam( L, 1, sVal) ; - if ( bFound) - LuaGetParam( L, 2, sSep) ; + LuaGetParam( L, 2, sSep) ; LuaClearStack( L) ; // se ricevuta stringa, la divido in parti separate da ',' if ( bFound) { @@ -186,6 +159,29 @@ LuaSplitString( lua_State* L) return 1 ; } +//------------------------------------------------------------------------------- +static int +LuaSplitStringPlus( lua_State* L) +{ + // 2 parametri : sVal, sHea + string sVal ; + string sHea ; + bool bFound = LuaGetParam( L, 1, sVal) ; + LuaCheckParam( L, 2, sHea) + LuaClearStack( L) ; + // se ricevuta stringa, la divido in parti conservandone le intestazioni + if ( bFound) { + STRVECTOR vsVal ; + TokenizePlus( sVal, sHea, vsVal) ; + // ritorno il risultato + LuaSetParam( L, vsVal) ; + } + // altrimenti restituisco nil + else + LuaSetParam( L) ; + return 1 ; +} + //------------------------------------------------------------------------------- static int LuaExecTsc( lua_State* L) @@ -442,13 +438,12 @@ LuaInstallGeneral( LuaMgr& luaMgr) bool bOk = ( &luaMgr != nullptr) ; bOk = bOk && luaMgr.RegisterFunction( "print", MyPrint) ; bOk = bOk && luaMgr.RegisterFunction( "EgtEvalNumExpr", LuaEvalNumExpr) ; - bOk = bOk && luaMgr.RegisterFunction( "EgtSetContext", LuaSetContext) ; - bOk = bOk && luaMgr.RegisterFunction( "EgtGetContext", LuaGetContext) ; bOk = bOk && luaMgr.RegisterFunction( "EgtPause", LuaPause) ; bOk = bOk && luaMgr.RegisterFunction( "EgtStartCounter", LuaStartCounter) ; bOk = bOk && luaMgr.RegisterFunction( "EgtStopCounter", LuaStopCounter) ; bOk = bOk && luaMgr.RegisterFunction( "EgtNumToString", LuaNumToString) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSplitString", LuaSplitString) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtSplitStringPlus", LuaSplitStringPlus) ; bOk = bOk && luaMgr.RegisterFunction( "EgtExecTsc", LuaExecTsc) ; bOk = bOk && luaMgr.RegisterFunction( "EgtOutLog", LuaOutLog) ; bOk = bOk && luaMgr.RegisterFunction( "EgtOutBox", LuaOutBox) ; diff --git a/LUA_GeomDB.cpp b/LUA_GeomDB.cpp index a5c7d0b..0748069 100644 --- a/LUA_GeomDB.cpp +++ b/LUA_GeomDB.cpp @@ -13,6 +13,7 @@ //--------------------------- Include ---------------------------------------- #include "stdafx.h" +#include "EXE.h" #include "LUA.h" #include "/EgtDev/Include/EXeExecutor.h" #include "/EgtDev/Include/EGkGdbConst.h" @@ -21,6 +22,71 @@ using namespace std ; +//------------------------------------------------------------------------------- +static int +LuaCreateContext( lua_State* L) +{ + // nessun parametro + LuaClearStack( L) ; + // creo il contesto (senza grafica) + int nCtx = ExeInitContext() ; + // restituisco il risultato + if ( nCtx != 0) + LuaSetParam( L, nCtx) ; + else + LuaSetParam( L) ; + return 1 ; +} + +//------------------------------------------------------------------------------- +static int +LuaSetContext( lua_State* L) +{ + // un solo parametro intero + int nGseCtx ; + LuaCheckParam( L, 1, nGseCtx) + LuaClearStack( L) ; + // imposto il contesto + bool bOk = ExeSetCurrentContext( nGseCtx) ; + // restituisco il risultato + LuaSetParam( L, bOk) ; + return 1 ; +} + +//------------------------------------------------------------------------------- +static int +LuaGetContext( lua_State* L) +{ + // nessun parametro + LuaClearStack( L) ; + // recupero il contesto corrente + int nCtx = ExeGetCurrentContext() ; + // restituisco il risultato + if ( nCtx != 0) + LuaSetParam( L, nCtx) ; + else + LuaSetParam( L) ; + return 1 ; +} + +//------------------------------------------------------------------------------- +static int +LuaDeleteContext( lua_State* L) +{ + // un solo parametro intero + int nGseCtx ; + LuaCheckParam( L, 1, nGseCtx) + LuaClearStack( L) ; + // posso cancellare solo contesti senza grafica (con lua si possono creare solo cosė) + GseContext* pGseCtx = GetGseContext( nGseCtx) ; + bool bOk = false ; + if ( pGseCtx != nullptr && pGseCtx->m_pScene == nullptr) + bOk = ExeDeleteContext( nGseCtx) ; + // restituisco il risultato + LuaSetParam( L, bOk) ; + return 1 ; +} + //------------------------------------------------------------------------------- static int LuaSetDefaultMaterial( lua_State* L) @@ -232,6 +298,10 @@ bool LuaInstallGeomDB( LuaMgr& luaMgr) { bool bOk = ( &luaMgr != nullptr) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtCreateContext", LuaCreateContext) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtSetContext", LuaSetContext) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtGetContext", LuaGetContext) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtDeleteContext", LuaDeleteContext) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSetDefaultMaterial", LuaSetDefaultMaterial) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSetGridFrame", LuaSetGridFrame) ; bOk = bOk && luaMgr.RegisterFunction( "EgtGetGridFrame", LuaGetGridFrame) ;