8901525ac8
- aggiunta funzione per calcolare la distanza tra punto e superficie di Bezier.
155 lines
4.2 KiB
C++
155 lines
4.2 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 ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
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 ;
|
|
}
|