e68153fb70
- a Exe e lua TestSurfaceSurface aggiunto il parametro opzionale bTestEnclusion per segnalare collisione anche quando una delle due è chiusa (ovvero racchiude un volume) e contiene l'altra
205 lines
6.4 KiB
C++
205 lines
6.4 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2024-2024
|
|
//----------------------------------------------------------------------------
|
|
// File : LUA_TestObjSurface.cpp Data : 24.03.24 Versione : 2.6c2
|
|
// Contenuto : Funzioni di verifica intersezione tra oggetti e superfici.
|
|
// Oggetti = Box, Sfere, Cilindri, Coni, RectPrismoid, SurfTriMesh
|
|
// Superfici = SurfTriMesh, ( Bezier).
|
|
//
|
|
// Modifiche : 24.03.24 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"
|
|
#include "/EgtDev/Include/EGnStringUtils.h"
|
|
|
|
using namespace std ;
|
|
|
|
//-------------------------------------------------------------------------------
|
|
static int
|
|
LuaTestBoxSurface( lua_State* L)
|
|
{
|
|
// 4 o 5 parametri : frBox, vtDiag, nSurfId, dSafeDist [, nRefType]
|
|
Frame3d frBox ;
|
|
LuaCheckParam( L, 1, frBox)
|
|
Vector3d vtDiag ;
|
|
LuaCheckParam( L, 2, vtDiag)
|
|
int nSurfId ;
|
|
LuaCheckParam( L, 3, nSurfId)
|
|
double dSafeDist ;
|
|
LuaCheckParam( L, 4, dSafeDist)
|
|
int nRefType = RTY_DEFAULT ;
|
|
LuaGetParam( L, 5, nRefType) ;
|
|
LuaClearStack( L) ;
|
|
// eseguo verifica di collisione
|
|
int nRes = ExeTestBoxSurface( frBox, vtDiag, nSurfId, dSafeDist, nRefType) ;
|
|
// restituisco il risultato
|
|
if ( nRes >= 0)
|
|
LuaSetParam( L, ( nRes != 0)) ;
|
|
else
|
|
LuaSetParam( L) ;
|
|
return 1 ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
static int
|
|
LuaTestRectPrismoidSurface( lua_State* L)
|
|
{
|
|
// 8 o 9 parametri : frBox, dBaseLenX, dBaseLenY, dTopLenX, dTopLenY, dHeight, nSurfId, dSafeDist [, nRefType]
|
|
Frame3d frBox ;
|
|
LuaCheckParam( L, 1, frBox)
|
|
double dBaseLenX ;
|
|
LuaCheckParam( L, 2, dBaseLenX)
|
|
double dBaseLenY ;
|
|
LuaCheckParam( L, 3, dBaseLenY)
|
|
double dTopLenX ;
|
|
LuaCheckParam( L, 4, dTopLenX)
|
|
double dTopLenY ;
|
|
LuaCheckParam( L, 5, dTopLenY)
|
|
double dHeight ;
|
|
LuaCheckParam( L, 6, dHeight)
|
|
int nSurfId ;
|
|
LuaCheckParam( L, 7, nSurfId)
|
|
double dSafeDist ;
|
|
LuaCheckParam( L, 8, dSafeDist)
|
|
int nRefType = RTY_DEFAULT ;
|
|
LuaGetParam( L, 9, nRefType) ;
|
|
LuaClearStack( L) ;
|
|
// eseguo verifica di collisione
|
|
int nRes = ExeTestRectPrismoidSurface( frBox, dBaseLenX, dBaseLenY, dTopLenX, dTopLenY, dHeight, nSurfId, dSafeDist, nRefType) ;
|
|
// restituisco il risultato
|
|
if ( nRes >= 0)
|
|
LuaSetParam( L, ( nRes != 0)) ;
|
|
else
|
|
LuaSetParam( L) ;
|
|
return 1 ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
static int
|
|
LuaTestCylSurface( lua_State* L)
|
|
{
|
|
// 5 o 6 parametri : frCyl, dR, dH, nSurfId, dSafeDist [, nRefType]
|
|
Frame3d frCyl ;
|
|
LuaCheckParam( L, 1, frCyl)
|
|
double dR ;
|
|
LuaCheckParam( L, 2, dR)
|
|
double dH ;
|
|
LuaCheckParam( L, 3, dH)
|
|
int nSurfId ;
|
|
LuaCheckParam( L, 4, nSurfId)
|
|
double dSafeDist ;
|
|
LuaCheckParam( L, 5, dSafeDist)
|
|
int nRefType = RTY_DEFAULT ;
|
|
LuaGetParam( L, 6, nRefType) ;
|
|
LuaClearStack( L) ;
|
|
// eseguo verifica di collisione
|
|
int nRes = ExeTestCylSurface( frCyl, dR, dH, nSurfId, dSafeDist, nRefType) ;
|
|
// restituisco il risultato
|
|
if ( nRes >= 0)
|
|
LuaSetParam( L, ( nRes != 0)) ;
|
|
else
|
|
LuaSetParam( L) ;
|
|
return 1 ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
static int
|
|
LuaTestConeSurface( lua_State* L)
|
|
{
|
|
// 6 o 7 parametri : frCone, dR1, dR2, dH, nSurfId, dSafeDist [, nRefType]
|
|
Frame3d frCone ;
|
|
LuaCheckParam( L, 1, frCone)
|
|
double dR1 ;
|
|
LuaCheckParam( L, 2, dR1)
|
|
double dR2 ;
|
|
LuaCheckParam( L, 3, dR2)
|
|
double dH ;
|
|
LuaCheckParam( L, 4, dH)
|
|
int nSurfId ;
|
|
LuaCheckParam( L, 5, nSurfId)
|
|
double dSafeDist ;
|
|
LuaCheckParam( L, 6, dSafeDist)
|
|
int nRefType = RTY_DEFAULT ;
|
|
LuaGetParam( L, 7, nRefType) ;
|
|
LuaClearStack( L) ;
|
|
// eseguo verifica di collisione
|
|
int nRes = ExeTestConeSurface( frCone, dR1, dR2, dH, nSurfId, dSafeDist, nRefType) ;
|
|
// restituisco il risultato
|
|
if ( nRes >= 0)
|
|
LuaSetParam( L, ( nRes != 0)) ;
|
|
else
|
|
LuaSetParam( L) ;
|
|
return 1 ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
static int
|
|
LuaTestSpheSurface( lua_State* L)
|
|
{
|
|
// 4 o 5 parametri : ptCen, dRad, nSurfId, dSafeDist [, nRefType]
|
|
Point3d ptCen ;
|
|
LuaCheckParam( L, 1, ptCen)
|
|
double dR ;
|
|
LuaCheckParam( L, 2, dR)
|
|
int nSurfId ;
|
|
LuaCheckParam( L, 3, nSurfId)
|
|
double dSafeDist ;
|
|
LuaCheckParam( L, 4, dSafeDist)
|
|
int nRefType = RTY_DEFAULT ;
|
|
LuaGetParam( L, 5, nRefType) ;
|
|
LuaClearStack( L) ;
|
|
// eseguo verifica di collisione
|
|
int nRes = ExeTestSpheSurface( ptCen, dR, nSurfId, dSafeDist, nRefType) ;
|
|
// restituisco il risultato
|
|
if ( nRes >= 0)
|
|
LuaSetParam( L, ( nRes != 0)) ;
|
|
else
|
|
LuaSetParam( L) ;
|
|
return 1 ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
static int
|
|
LuaTestSurfaceSurface( lua_State* L)
|
|
{
|
|
// 3 o 4 parametri : nSurf1Id, nSurf2Id, dSafeDist [, bTestEnclusion]
|
|
int nSurf1Id ;
|
|
LuaCheckParam( L, 1, nSurf1Id)
|
|
int nSurf2Id ;
|
|
LuaCheckParam( L, 2, nSurf2Id)
|
|
double dSafeDist ;
|
|
LuaCheckParam( L, 3, dSafeDist)
|
|
bool bTestEnclusion = false ;
|
|
LuaGetParam( L, 4, bTestEnclusion) ;
|
|
LuaClearStack( L) ;
|
|
// eseguo verifica di interferenza
|
|
int nRes = ExeTestSurfaceSurface( nSurf1Id, nSurf2Id, dSafeDist, bTestEnclusion) ;
|
|
// restituisco il risultato
|
|
if ( nRes >= 0)
|
|
LuaSetParam( L, ( nRes != 0)) ;
|
|
else
|
|
LuaSetParam( L) ;
|
|
return 1 ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------
|
|
bool
|
|
LuaInstallTestObjSurface( LuaMgr& luaMgr)
|
|
{
|
|
bool bOk = ( &luaMgr != nullptr) ;
|
|
bOk = bOk && luaMgr.RegisterFunction( "EgtTestBoxSurface", LuaTestBoxSurface) ;
|
|
bOk = bOk && luaMgr.RegisterFunction( "EgtTestRectPrismoidSurface", LuaTestRectPrismoidSurface) ;
|
|
bOk = bOk && luaMgr.RegisterFunction( "EgtTestCylSurface", LuaTestCylSurface) ;
|
|
bOk = bOk && luaMgr.RegisterFunction( "EgtTestConeSurface", LuaTestConeSurface) ;
|
|
bOk = bOk && luaMgr.RegisterFunction( "EgtTestSpheSurface", LuaTestSpheSurface) ;
|
|
bOk = bOk && luaMgr.RegisterFunction( "EgtTestSurfaceSurface", LuaTestSurfaceSurface) ;
|
|
return bOk ;
|
|
}
|