Files
EgtExecutor/LUA_GeoDist.cpp
Dario Sassi eedd2068fa EgtExecutor 2.5h2 :
- aggiunta funzione lua EgtPointCurveDistSide.
2023-08-11 11:29:21 +02:00

124 lines
3.4 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2018-2018
//----------------------------------------------------------------------------
// File : LUA_GeoDist.cpp Data : 15.12.18 Versione : 1.9l2
// Contenuto : Funzioni distanza tra oggetti geometrici per LUA.
//
//
//
// Modifiche : 15.12.18 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
//--------------------------- Include ----------------------------------------
#include "stdafx.h"
#include "LUA.h"
#include "/EgtDev/Include/EXeExecutor.h"
#include "/EgtDev/Include/EXeConst.h"
#include "/EgtDev/Include/EGkLuaAux.h"
using namespace std ;
//----------------------------------------------------------------------------
static int
LuaPointCurveDist( lua_State* L)
{
// 2 o 3 parametri : ptP, nCrvId, [, nRefId]
Point3d ptP ;
LuaCheckParam( L, 1, ptP)
int nId ;
LuaCheckParam( L, 2, nId)
int nRefType = nId ;
LuaGetParam( L, 3, nRefType) ;
LuaClearStack( L) ;
// calcolo la distanza
double dDist, dU ;
Point3d ptMin ;
bool bOk = ExePointCurveDist( ptP, nId, nRefType, &dDist, ptMin, &dU) ;
if ( bOk) {
LuaSetParam( L, dDist) ;
LuaSetParam( L, ptMin) ;
LuaSetParam( L, dU) ;
}
else {
LuaSetParam( L) ;
LuaSetParam( L) ;
LuaSetParam( L) ;
}
return 3 ;
}
//----------------------------------------------------------------------------
static int
LuaPointCurveDistSide( lua_State* L)
{
// 3 o 4 parametri : ptP, nCrvId, vtN [, nRefId]
Point3d ptP ;
LuaCheckParam( L, 1, ptP)
int nId ;
LuaCheckParam( L, 2, nId)
Vector3d vtN ;
LuaCheckParam( L, 3, vtN)
int nRefType = nId ;
LuaGetParam( L, 4, nRefType) ;
LuaClearStack( L) ;
// calcolo la distanza
int nSide ;
double dDist ;
Point3d ptMin ;
bool bOk = ExePointCurveDistSide( ptP, nId, vtN, nRefType, &dDist, ptMin, &nSide) ;
if ( bOk) {
LuaSetParam( L, dDist) ;
LuaSetParam( L, ptMin) ;
LuaSetParam( L, nSide) ;
}
else {
LuaSetParam( L) ;
LuaSetParam( L) ;
LuaSetParam( L) ;
}
return 3 ;
}
//----------------------------------------------------------------------------
static int
LuaPointSurfTmDist( lua_State* L)
{
// 2 o 3 parametri : ptP, nStmId, [, nRefId]
Point3d ptP ;
LuaCheckParam( L, 1, ptP)
int nId ;
LuaCheckParam( L, 2, nId)
int nRefType = nId ;
LuaGetParam( L, 3, nRefType) ;
LuaClearStack( L) ;
// calcolo la distanza
double dDist ;
Point3d ptMin ;
int nTria ;
bool bOk = ExePointSurfTmDist( ptP, nId, nRefType, &dDist, ptMin, &nTria) ;
if ( bOk) {
LuaSetParam( L, dDist) ;
LuaSetParam( L, ptMin) ;
LuaSetParam( L, nTria) ;
}
else {
LuaSetParam( L) ;
LuaSetParam( L) ;
LuaSetParam( L) ;
}
return 3 ;
}
//-------------------------------------------------------------------------------
bool
LuaInstallGeoDist( LuaMgr& luaMgr)
{
bool bOk = ( &luaMgr != nullptr) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtPointCurveDist", LuaPointCurveDist) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtPointCurveDistSide", LuaPointCurveDistSide) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtPointSurfTmDist", LuaPointSurfTmDist) ;
return bOk ;
}