diff --git a/EXE_GdbGetCurve.cpp b/EXE_GdbGetCurve.cpp index 1e1c33b..a1b7022 100644 --- a/EXE_GdbGetCurve.cpp +++ b/EXE_GdbGetCurve.cpp @@ -72,6 +72,27 @@ ExeCurveParamAtLength( int nId, double dLen, double* pdPar) return ( pCurve != nullptr && pCurve->GetParamAtLength( dLen, *pdPar)) ; } +//---------------------------------------------------------------------------- +bool +ExeCurveParamAtPoint( int nId, const Point3d& ptP, double dTol, int nRefType, double* pdPar) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, false) + // verifico il parametro + if ( pdPar == nullptr) + return false ; + // recupero la curva + ICurve* pCurve = GetCurve( pGeomDB->GetGeoObj( nId)) ; + bool bOk = ( pCurve != nullptr) ; + // recupero il riferimento locale + Frame3d frLoc ; + bOk = bOk && pGeomDB->GetGlobFrame( nId, frLoc) ; + // porto il punto in locale + Point3d ptL = GetPointLocal( pGeomDB, ptP, nRefType, frLoc) ; + // recupero il parametro in corrispondenza ptL + return ( bOk && pCurve->GetParamAtPoint( ptL, *pdPar, dTol)) ; +} + //---------------------------------------------------------------------------- bool ExeCurveLengthAtPoint( int nId, const Point3d& ptOn, double dExtend, double* pdLen) diff --git a/EgtExecutor.rc b/EgtExecutor.rc index 1983f21..0ca4a04 100644 Binary files a/EgtExecutor.rc and b/EgtExecutor.rc differ diff --git a/LUA_GdbGetCurve.cpp b/LUA_GdbGetCurve.cpp index a60fd7d..8f32e0b 100644 --- a/LUA_GdbGetCurve.cpp +++ b/LUA_GdbGetCurve.cpp @@ -76,6 +76,29 @@ LuaCurveParamAtLength( lua_State* L) return 1 ; } +//---------------------------------------------------------------------------- +static int +LuaCurveParamAtPoint( lua_State* L) +{ + // 2 o 3 o 4 parametri : nId, pt [, dTol, nRefType] + int nId ; + LuaCheckParam( L, 1, nId) + Point3d ptP ; + LuaCheckParam( L, 2, ptP) + double dTol = EPS_SMALL ; + LuaGetParam( L, 3, dTol) ; + int nRefType = RTY_DEFAULT ; + LuaGetParam( L, 4, nRefType) ; + LuaClearStack( L) ; + // recupero il parametro in corrispondenza di pt + double dPar ; + if ( ExeCurveParamAtPoint( nId, ptP, dTol, nRefType, &dPar)) + LuaSetParam( L, dPar) ; + else + LuaSetParam( L) ; + return 1 ; +} + //---------------------------------------------------------------------------- static int LuaCurveIsClosed( lua_State* L) @@ -497,6 +520,7 @@ LuaInstallGdbGetCurve( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtCurveDomain", LuaCurveDomain) ; bOk = bOk && luaMgr.RegisterFunction( "EgtCurveLength", LuaCurveLength) ; bOk = bOk && luaMgr.RegisterFunction( "EgtCurveParamAtLength", LuaCurveParamAtLength) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtCurveParamAtPoint", LuaCurveParamAtPoint) ; bOk = bOk && luaMgr.RegisterFunction( "EgtCurveIsClosed", LuaCurveIsClosed) ; bOk = bOk && luaMgr.RegisterFunction( "EgtCurveIsFlat", LuaCurveIsFlat) ; bOk = bOk && luaMgr.RegisterFunction( "EgtCurveIsACircle", LuaCurveIsACircle) ;