//---------------------------------------------------------------------------- // EgalTech 2015-2015 //---------------------------------------------------------------------------- // File : LUA_ShortestPath.cpp Data : 23.12.15 Versione : 1.6l4 // Contenuto : Funzioni di calcolo Shortest Path per LUA. // // // // Modifiche : 29.09.14 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "LUA.h" #include "/EgtDev/Include/EXeExecutor.h" #include "/EgtDev/Include/EGkLuaAux.h" #include "/EgtDev/Include/EGnStringUtils.h" using namespace std ; //------------------------------------------------------------------------------- static int LuaSpInit( lua_State* L) { // nessun parametro LuaClearStack( L) ; // inizializzo il calcolatore di minimo percorso bool bOk = ExeSpInit() ; // restituisco il risultato LuaSetParam( L, bOk) ; return 1 ; } //------------------------------------------------------------------------------- static int LuaSpTerminate( lua_State* L) { // nessun parametro LuaClearStack( L) ; // termino il calcolatore di minimo percorso bool bOk = ExeSpTerminate() ; // restituisco il risultato LuaSetParam( L, bOk) ; return 1 ; } //------------------------------------------------------------------------------- static int LuaSpAddPoint( lua_State* L) { // definizione parametri double dXi = 0, dYi = 0, dZi = 0, dHi = 0, dVi = 0 ; double dXf = 0, dYf = 0, dZf = 0, dHf = 0, dVf = 0 ; // recupero numero di parametri int nNum = lua_gettop( L) ; // 2 parametri : dX, dY if ( nNum == 2) { LuaCheckParam( L, 1, dXi) LuaCheckParam( L, 2, dYi) dXf = dXi ; dYf = dYi ; } // 4 parametri : dXi, dYi, dXf, dYf else if ( nNum == 4) { LuaCheckParam( L, 1, dXi) LuaCheckParam( L, 2, dYi) LuaCheckParam( L, 3, dXf) LuaCheckParam( L, 4, dYf) } // 10 parametri dXi, dYi, dZi, dHi, dVi, dXf, dYf, dZf, dHf, dVf else { LuaCheckParam( L, 1, dXi) LuaCheckParam( L, 2, dYi) LuaCheckParam( L, 3, dZi) LuaCheckParam( L, 4, dHi) LuaCheckParam( L, 5, dVi) LuaCheckParam( L, 6, dXf) LuaCheckParam( L, 7, dYf) LuaCheckParam( L, 8, dZf) LuaCheckParam( L, 9, dHf) LuaCheckParam( L, 10, dVf) } LuaClearStack( L) ; // aggiungo il punto bool bOk = ExeSpAddPoint( dXi, dYi, dZi, dHi, dVi, dXf, dYf, dZf, dHf, dVf) ; // restituisco il risultato LuaSetParam( L, bOk) ; return 1 ; } //------------------------------------------------------------------------------- static int LuaSpSetOpenBound( lua_State* L) { // definizione parametri bool bStartVsEnd ; int nFlag ; double dX = 0, dY = 0, dZ = 0, dH = 0, dV = 0 ; // recupero numero di parametri int nNum = lua_gettop( L) ; // 2 parametri : bStartVsEnd, nFlag if ( nNum == 2) { LuaCheckParam( L, 1, bStartVsEnd) LuaCheckParam( L, 2, nFlag) } // 4 parametri : bStartVsEnd, nFlag, dX, dY else if ( nNum == 4) { LuaCheckParam( L, 1, bStartVsEnd) LuaCheckParam( L, 2, nFlag) LuaCheckParam( L, 3, dX) LuaCheckParam( L, 4, dY) } // 7 parametri : bStartVsEnd, nFlag, dX, dY, dZ, dH, dV else { LuaCheckParam( L, 1, bStartVsEnd) LuaCheckParam( L, 2, nFlag) LuaCheckParam( L, 3, dX) LuaCheckParam( L, 4, dY) LuaCheckParam( L, 5, dZ) LuaCheckParam( L, 6, dH) LuaCheckParam( L, 7, dV) } LuaClearStack( L) ; // imposto condizione al contorno bool bOk = ExeSpSetOpenBound( bStartVsEnd, nFlag, dX, dY, dZ, dH, dV) ; // restituisco il risultato LuaSetParam( L, bOk) ; return 1 ; } //------------------------------------------------------------------------------- static int LuaSpSetAngularParams( lua_State* L) { // 4 parametri : dAngHAdd, dAngHMul, dAngVAdd, dAngVMul double dAngHAdd ; LuaCheckParam( L, 1, dAngHAdd) double dAngHMul ; LuaCheckParam( L, 2, dAngHMul) double dAngVAdd ; LuaCheckParam( L, 3, dAngVAdd) double dAngVMul ; LuaCheckParam( L, 4, dAngVMul) LuaClearStack( L) ; // imposto parametri per coordinate angolari bool bOk = ExeSpSetAngularParams( dAngHAdd, dAngHMul, dAngVAdd, dAngVMul) ; // restituisco il risultato LuaSetParam( L, bOk) ; return 1 ; } //------------------------------------------------------------------------------- static int LuaSpSetZzOwStep( lua_State* L) { // 1 parametro : dStep double dStep ; LuaCheckParam( L, 1, dStep) LuaClearStack( L) ; // imposto lo step per tipologie ZigZag e OneWay bool bOk = ExeSpSetZzOwStep( dStep) ; // restituisco il risultato LuaSetParam( L, bOk) ; return 1 ; } //------------------------------------------------------------------------------- static int LuaSpCalculate( lua_State* L) { // 1 parametro : nType int nType ; LuaCheckParam( L, 1, nType) LuaClearStack( L) ; // eseguo calcolo di minimo percorso INTVECTOR vOrder ; double dMinLen ; bool bOk = ExeSpCalculate( nType) && ExeSpGetOrder( vOrder) && ExeSpGetMinLength( dMinLen) ; // restituisco il risultato if ( bOk) { // aggiusto gli indici per Lua (1 based), sommando 1 for ( auto& i : vOrder) ++ i ; LuaSetParam( L, vOrder) ; LuaSetParam( L, dMinLen) ; } else { LuaSetParam( L) ; LuaSetParam( L) ; } return 2 ; } //------------------------------------------------------------------------------- bool LuaInstallShortestPath( LuaMgr& luaMgr) { bool bOk = ( &luaMgr != nullptr) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSpInit", LuaSpInit) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSpTerminate", LuaSpTerminate) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSpAddPoint", LuaSpAddPoint) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSpSetOpenBound", LuaSpSetOpenBound) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSpSetAngularParams", LuaSpSetAngularParams) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSpSetZzOwStep", LuaSpSetZzOwStep) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSpCalculate", LuaSpCalculate) ; return bOk ; }