//---------------------------------------------------------------------------- // 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 ; } //---------------------------------------------------------------------------- static int LuaPointSurfBzDist( lua_State* L) { // 2 o 3 parametri : ptP, nSbzId, [, 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 ; Vector3d vtN ; bool bOk = ExePointSurfBzDist( ptP, nId, nRefType, &dDist, ptMin, vtN) ; if ( bOk) { LuaSetParam( L, dDist) ; LuaSetParam( L, ptMin) ; LuaSetParam( L, vtN) ; } 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) ; bOk = bOk && luaMgr.RegisterFunction( "EgtPointSurfBzDist", LuaPointSurfBzDist) ; return bOk ; }