From 37c6e26a4373f744dbc2d7cec79304eae3a69971 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Thu, 23 May 2024 09:41:29 +0200 Subject: [PATCH] EgtExecutor : - riaggiunte le funzioni per mostrare i punti di controllo di una curva Bezier. --- EXE_GdbGetCurve.cpp | 34 ++++++++++++++++++++++++++++++++++ LUA_GdbGetCurve.cpp | 23 +++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/EXE_GdbGetCurve.cpp b/EXE_GdbGetCurve.cpp index 5f1c641..1a1a620 100644 --- a/EXE_GdbGetCurve.cpp +++ b/EXE_GdbGetCurve.cpp @@ -677,4 +677,38 @@ ExeCurveCompoNormVersor( int nId, int nSimpCrv, int nRefId, Vector3d& vtNorm) } // gestione trasformazione ( eventuale) return TransformVector( pGeomDB, nId, nRefId, vtNorm) ; +} + + +//---------------------------------------------------------------------------- +bool +ExeShowCurveBezierControlPoints( int nCrvId, int* pnCount) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, false) + // recupero la curva di bezier + const ICurveBezier* pCrvBezier = GetCurveBezier( pGeomDB->GetGeoObj( nCrvId)) ; + if ( pCrvBezier == nullptr || pCrvBezier->GetType() != CRV_BEZIER) + return false ; + int nParent = pGeomDB->GetParentId( nCrvId) ; + int nDeg = pCrvBezier->GetDegree() ; + bool bRat = pCrvBezier->IsRational() ; + int nFirstId = -1 ; + int nCount = 0 ; + for ( int i = 0 ; i < nDeg + 1 ; ++i) { + IGeoPoint3d* pGeoPt( CreateGeoPoint3d()) ; + if ( ! bRat) + pGeoPt->Set( pCrvBezier->GetControlPoint( i)) ; + else + pGeoPt->Set( pCrvBezier->GetControlPoint( i) * pCrvBezier->GetControlWeight( i)) ; + int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nParent, pGeoPt) ; + if ( nFirstId == GDB_ID_NULL) + nFirstId = nId ; + if ( nId != GDB_ID_NULL) + ++nCount ; + } + // restituisco i risultati + if ( pnCount != nullptr) + *pnCount = nCount ; + return nFirstId ; } \ No newline at end of file diff --git a/LUA_GdbGetCurve.cpp b/LUA_GdbGetCurve.cpp index 112d39d..3ab6b87 100644 --- a/LUA_GdbGetCurve.cpp +++ b/LUA_GdbGetCurve.cpp @@ -531,6 +531,28 @@ LuaCurveCompoNormVersor( lua_State* L) return 1 ; } +//---------------------------------------------------------------------------- +static int +LuaShowCurveBezierControlPoint( lua_State* L) +{ + // 1 parametro : nCrvId + int nCrvId ; + LuaCheckParam( L, 1, nCrvId) + LuaClearStack( L) ; + int nCount = 0 ; + int nId = ExeShowCurveBezierControlPoints( nCrvId, &nCount) ; + // restituisco il risultato + if ( nId != GDB_ID_NULL) { + LuaSetParam( L, nId) ; + LuaSetParam( L, nCount) ; + } + else { + LuaSetParam( L) ; + LuaSetParam( L) ; + } + return 2 ; +} + //------------------------------------------------------------------------------- bool LuaInstallGdbGetCurve( LuaMgr& luaMgr) @@ -562,5 +584,6 @@ LuaInstallGdbGetCurve( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtCurveCompoRadius", LuaCurveCompoRadius) ; bOk = bOk && luaMgr.RegisterFunction( "EgtCurveCompoAngCenter", LuaCurveCompoAngCenter) ; bOk = bOk && luaMgr.RegisterFunction( "EgtCurveCompoNormVersor", LuaCurveCompoNormVersor) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtShowCurveBezierControlPoints", LuaShowCurveBezierControlPoint) ; return bOk ; }