diff --git a/EXE_GdbGetSurf.cpp b/EXE_GdbGetSurf.cpp index 7fff7bf..2f5ae6c 100644 --- a/EXE_GdbGetSurf.cpp +++ b/EXE_GdbGetSurf.cpp @@ -1494,4 +1494,37 @@ ExeExtractSurfBezierLoops( int nId, int nDestGrpId, int* pnCount) if ( pnCount != nullptr) *pnCount = nCount ; return nFirstId ; +} + +//---------------------------------------------------------------------------- +int +ExeShowSurfBezierControlPoints( int nSrfId, int* pnCount) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, false) + int nParent = pGeomDB->GetParentId( nSrfId) ; + // recupero la superficie di bezier + IGeoObj* pGeoObj = pGeomDB->GetGeoObj( nSrfId) ; + if ( pGeoObj->GetType() != SRF_BEZIER) + return GDB_ID_NULL ; + int nDegU = - 1, nDegV = - 1, nSpanU = - 1, nSpanV = - 1 ; + bool bRat = false, bTrimmed = false ; + ISurfBezier* pSrfBez = GetSurfBezier( pGeoObj) ; + pSrfBez->GetInfo( nDegU, nDegV, nSpanU, nSpanV, bRat, bTrimmed) ; + int nFirstId = -1 ; + int nCount = 0 ; + for ( int i = 0 ; i < (nDegU * nSpanU + 1) * ( nDegV * nSpanV + 1) ; ++i) { + bool bOk = true ; + IGeoPoint3d* pGeoPt( CreateGeoPoint3d()) ; + pGeoPt->Set( pSrfBez->GetControlPoint( i, &bOk)) ; + 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_GdbGetSurf.cpp b/LUA_GdbGetSurf.cpp index 3bd9111..b840355 100644 --- a/LUA_GdbGetSurf.cpp +++ b/LUA_GdbGetSurf.cpp @@ -1080,6 +1080,28 @@ LuaExtractSurfBezierLoops( lua_State* L) return 2 ; } +//---------------------------------------------------------------------------- +static int +LuaShowSurfBezierControlPoints( lua_State* L) +{ + // 1 parametro : nCrvId + int nCrvId ; + LuaCheckParam( L, 1, nCrvId) + LuaClearStack( L) ; + int nCount = 0 ; + int nId = ExeShowSurfBezierControlPoints( nCrvId, &nCount) ; + // restituisco il risultato + if ( nId != GDB_ID_NULL) { + LuaSetParam( L, nId) ; + LuaSetParam( L, nCount) ; + } + else { + LuaSetParam( L) ; + LuaSetParam( L) ; + } + return 2 ; +} + //------------------------------------------------------------------------------- bool LuaInstallGdbGetSurf( LuaMgr& luaMgr) @@ -1130,5 +1152,6 @@ LuaInstallGdbGetSurf( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtSurfBezierGetControlCurveU", LuaSurfBezierGetControlCurveU) ; bOk = bOk && luaMgr.RegisterFunction( "EgtSurfBezierGetControlCurveV", LuaSurfBezierGetControlCurveV) ; bOk = bOk && luaMgr.RegisterFunction( "EgtExtractSurfBezierLoops", LuaExtractSurfBezierLoops) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtShowSurfBezierControlPoints", LuaShowSurfBezierControlPoints) ; return bOk ; }