2c1d4ee259
- Aggiunte funzioni Lua per ottimizzazione ordine delle lavorazioni.
210 lines
6.3 KiB
C++
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 ;
|
|
}
|