//---------------------------------------------------------------------------- // 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 parametri : nSurf1Id, nSurf2Id, dSafeDist int nSurf1Id ; LuaCheckParam( L, 1, nSurf1Id) int nSurf2Id ; LuaCheckParam( L, 2, nSurf2Id) double dSafeDist ; LuaCheckParam( L, 3, dSafeDist) LuaClearStack( L) ; // eseguo verifica di interferenza int nRes = ExeTestSurfaceSurface( nSurf1Id, nSurf2Id, dSafeDist) ; // 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 ; }