Files
EgtExecutor/LUA_ShortestPath.cpp
T
Riccardo Elitropi 2c1d4ee259 EgtExecutor :
- Aggiunte funzioni Lua per ottimizzazione ordine delle lavorazioni.
2025-04-23 10:10:38 +02:00

210 lines
6.3 KiB
C++

//----------------------------------------------------------------------------
// 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 ;
}