From 68af08cf32172c7a7f5de1bf1739ffb9ca6138d3 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 24 Nov 2023 15:38:24 +0100 Subject: [PATCH] EgtExecutor : - ExeCurveGetVoronoi e ExeCurveGetFatCurve spostate in Modify Curve - aggiunta funzione ExeCurveGetMedialAxis usata da funzione Lua EgtCurveMedialAxisAdv. --- EXE_GdbGetCurve.cpp | 84 ---------------------- EXE_GdbModifyCurve.cpp | 158 +++++++++++++++++++++++++++++++++++++++-- LUA_GdbGetCurve.cpp | 54 -------------- LUA_GdbModifyCurve.cpp | 79 +++++++++++++++++++++ 4 files changed, 233 insertions(+), 142 deletions(-) diff --git a/EXE_GdbGetCurve.cpp b/EXE_GdbGetCurve.cpp index f9a2e7e..a96d1c7 100644 --- a/EXE_GdbGetCurve.cpp +++ b/EXE_GdbGetCurve.cpp @@ -678,87 +678,3 @@ ExeCurveCompoNormVersor( int nId, int nSimpCrv, int nRefId, Vector3d& vtNorm) // gestione trasformazione ( eventuale) return TransformVector( pGeomDB, nId, nRefId, vtNorm) ; } - -//---------------------------------------------------------------------------- -int -ExeCurveGetVoronoi( int nId, int nDestGrpId, int nBound, int* pnCount) -{ - IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, false) - // recupero la curva - const ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nId)) ; - if ( pCrv == nullptr) - return GDB_ID_NULL ; - // recupero il riferimento della curva - Frame3d frCrv ; - if ( ! pGeomDB->GetGlobFrame( nId, frCrv)) - return GDB_ID_NULL ; - // recupero il riferimento di destinazione - Frame3d frDest ; - if ( ! pGeomDB->GetGroupGlobFrame( nDestGrpId, frDest)) - return GDB_ID_NULL ; - - // Calcolo diagramma di Voronoi - ICURVEPOVECTOR vCrv ; - CalcCurveVoronoiDiagram( *pCrv, vCrv, nBound) ; - - // inserisco i risultati nel DB geometrico - int nFirstId = GDB_ID_NULL ; - int nCount = 0 ; - for ( int i = 0 ; i < int( vCrv.size()) ; i++) { - vCrv[i]->LocToLoc( frCrv, frDest) ; - int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( vCrv[i])) ; - if ( nId != GDB_ID_NULL) { - nCount ++ ; - if ( nFirstId == GDB_ID_NULL) - nFirstId = nId ; - } - } - - // restituisco risultati - if ( pnCount != nullptr) - *pnCount = nCount ; - return nFirstId ; -} - -//---------------------------------------------------------------------------- -int -ExeCurveGetFatCurve( int nId, int nDestGrpId, double dRad, bool bSquareEnds, bool bSquareMids, int* pnCount) -{ - IGeomDB* pGeomDB = GetCurrGeomDB() ; - VERIFY_GEOMDB( pGeomDB, false) - // recupero la curva - const ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nId)) ; - if ( pCrv == nullptr) - return GDB_ID_NULL ; - // recupero il riferimento della curva - Frame3d frCrv ; - if ( ! pGeomDB->GetGlobFrame( nId, frCrv)) - return GDB_ID_NULL ; - // recupero il riferimento di destinazione - Frame3d frDest ; - if ( ! pGeomDB->GetGroupGlobFrame( nDestGrpId, frDest)) - return GDB_ID_NULL ; - - // Calcolo la curva ingrossata - ICURVEPOVECTOR vCrv ; - CalcCurveFatCurve( *pCrv, vCrv, dRad, bSquareEnds, bSquareMids) ; - - // inserisco i risultati nel DB geometrico - int nFirstId = GDB_ID_NULL ; - int nCount = 0 ; - for ( int i = 0 ; i < int( vCrv.size()) ; i++) { - vCrv[i]->LocToLoc( frCrv, frDest) ; - int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( vCrv[i])) ; - if ( nId != GDB_ID_NULL) { - nCount ++ ; - if ( nFirstId == GDB_ID_NULL) - nFirstId = nId ; - } - } - - // restituisco risultati - if ( pnCount != nullptr) - *pnCount = nCount ; - return nFirstId ; -} diff --git a/EXE_GdbModifyCurve.cpp b/EXE_GdbModifyCurve.cpp index 2a6d5e4..55fb0c3 100644 --- a/EXE_GdbModifyCurve.cpp +++ b/EXE_GdbModifyCurve.cpp @@ -2622,12 +2622,162 @@ ExePocketing( const INTVECTOR vId, double dRad, double dStep, double dAngle, int ToString( dRad) + "," + ToString( dStep) + "," + ToString( dAngle) + "," + - ToString( nType) + ")" + - ToString( bSmooth) + ")" + + ToString( nType) + "," + + ToString( bSmooth) + "," + ToString( nDestGrpId) + ")" + - " -- Ok=" + ToString( bOk) + " FirstId=" + ToString( nFirstId) + - " nCurveCount=" + ToString( nCrvCount) ; + " -- Ok=" + ToString( bOk) + " FirstId=" + ToString( nFirstId) + " CurveCount=" + ToString( nCrvCount) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } return bOk ; } + +//---------------------------------------------------------------------------- +int +ExeCurveGetVoronoi( int nId, int nDestGrpId, int nBound, int* pnCount) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + // recupero la curva + const ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nId)) ; + if ( pCrv == nullptr) + return GDB_ID_NULL ; + // recupero il riferimento della curva + Frame3d frCrv ; + if ( ! pGeomDB->GetGlobFrame( nId, frCrv)) + return GDB_ID_NULL ; + // recupero il riferimento di destinazione + Frame3d frDest ; + if ( ! pGeomDB->GetGroupGlobFrame( nDestGrpId, frDest)) + return GDB_ID_NULL ; + + // Calcolo diagramma di Voronoi + ICURVEPOVECTOR vCrv ; + CalcCurveVoronoiDiagram( *pCrv, vCrv, nBound) ; + + // inserisco i risultati nel DB geometrico + int nFirstId = GDB_ID_NULL ; + int nCount = 0 ; + for ( int i = 0 ; i < int( vCrv.size()) ; i++) { + vCrv[i]->LocToLoc( frCrv, frDest) ; + int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( vCrv[i])) ; + if ( nId != GDB_ID_NULL) { + nCount ++ ; + if ( nFirstId == GDB_ID_NULL) + nFirstId = nId ; + } + } + ExeSetModified() ; + + if ( IsCmdLog()) { + string sLua = "EgtCurveGetVoronoi(" + ToString( nId) + "," + + ToString( nDestGrpId) + ")" + + " FirstId=" + ToString( nFirstId) + " nCurveCount=" + ToString( nCount) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + + // restituisco risultati + if ( pnCount != nullptr) + *pnCount = nCount ; + return nFirstId ; +} + +//---------------------------------------------------------------------------- +int +ExeCurveGetMedialAxis( int nId, int nDestGrpId, int nSide, int* pnCount) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + // recupero la curva + const ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nId)) ; + if ( pCrv == nullptr) + return GDB_ID_NULL ; + // recupero il riferimento della curva + Frame3d frCrv ; + if ( ! pGeomDB->GetGlobFrame( nId, frCrv)) + return GDB_ID_NULL ; + // recupero il riferimento di destinazione + Frame3d frDest ; + if ( ! pGeomDB->GetGroupGlobFrame( nDestGrpId, frDest)) + return GDB_ID_NULL ; + + // Calcolo il Medial Axis + ICURVEPOVECTOR vCrv ; + CalcCurveMedialAxis( *pCrv, vCrv, nSide) ; + + // inserisco i risultati nel DB geometrico + int nFirstId = GDB_ID_NULL ; + int nCount = 0 ; + for ( int i = 0 ; i < int( vCrv.size()) ; i++) { + vCrv[i]->LocToLoc( frCrv, frDest) ; + int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( vCrv[i])) ; + if ( nId != GDB_ID_NULL) { + nCount ++ ; + if ( nFirstId == GDB_ID_NULL) + nFirstId = nId ; + } + } + ExeSetModified() ; + + if ( IsCmdLog()) { + string sLua = "EgtCurveMedialAxisAdv(" + ToString( nId) + "," + + ToString( nSide) + "," + + ToString( nDestGrpId) + ")" + + " FirstId=" + ToString( nFirstId) + " nCurveCount=" + ToString( nCount) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + + // restituisco risultati + if ( pnCount != nullptr) + *pnCount = nCount ; + return nFirstId ; +} + +//---------------------------------------------------------------------------- +int +ExeCurveGetFatCurve( int nId, int nDestGrpId, double dRad, bool bSquareEnds, bool bSquareMids, int* pnCount) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + // recupero la curva + const ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nId)) ; + if ( pCrv == nullptr) + return GDB_ID_NULL ; + // recupero il riferimento della curva + Frame3d frCrv ; + if ( ! pGeomDB->GetGlobFrame( nId, frCrv)) + return GDB_ID_NULL ; + // recupero il riferimento di destinazione + Frame3d frDest ; + if ( ! pGeomDB->GetGroupGlobFrame( nDestGrpId, frDest)) + return GDB_ID_NULL ; + + // Calcolo la curva ingrossata + ICURVEPOVECTOR vCrv ; + CalcCurveFatCurve( *pCrv, vCrv, dRad, bSquareEnds, bSquareMids) ; + + // inserisco i risultati nel DB geometrico + int nFirstId = GDB_ID_NULL ; + int nCount = 0 ; + for ( int i = 0 ; i < int( vCrv.size()) ; i++) { + vCrv[i]->LocToLoc( frCrv, frDest) ; + int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( vCrv[i])) ; + if ( nId != GDB_ID_NULL) { + nCount ++ ; + if ( nFirstId == GDB_ID_NULL) + nFirstId = nId ; + } + } + ExeSetModified() ; + + if ( IsCmdLog()) { + string sLua = "EgtCurveGetFatCurve(" + ToString( nId) + "," + + ToString( nDestGrpId) + ")" + + " FirstId=" + ToString( nFirstId) + " nCurveCount=" + ToString( nCount) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + + // restituisco risultati + if ( pnCount != nullptr) + *pnCount = nCount ; + return nFirstId ; +} diff --git a/LUA_GdbGetCurve.cpp b/LUA_GdbGetCurve.cpp index edaa44a..4f34bbf 100644 --- a/LUA_GdbGetCurve.cpp +++ b/LUA_GdbGetCurve.cpp @@ -532,58 +532,6 @@ LuaCurveCompoNormVersor( lua_State* L) return 1 ; } -//---------------------------------------------------------------------------- -static int -LuaCurveGetVoronoi( lua_State* L) -{ - // 2 o 3 parametri : Id, nDestId [, nBound] - int nId ; - LuaCheckParam( L, 1, nId) - int nDestGrpId ; - LuaCheckParam( L, 2, nDestGrpId) - int nBound = VORONOI_STD_BOUND ; - LuaGetParam( L, 3, nBound) ; - - LuaClearStack( L) ; - int nCount = 0 ; - int nNewId = ExeCurveGetVoronoi( nId, nDestGrpId, nBound, &nCount) ; - if ( nNewId != GDB_ID_NULL) - LuaSetParam( L, nNewId) ; - else - LuaSetParam( L) ; - - LuaSetParam( L, nCount) ; - return 2 ; -} - -//---------------------------------------------------------------------------- -static int -LuaCurveGetFatCurve( lua_State* L) -{ - // 4 o 5 parametri : Id, nDestId, dRad, bSquare [, bSquareMids] - int nId ; - LuaCheckParam( L, 1, nId) - int nDestGrpId ; - LuaCheckParam( L, 2, nDestGrpId) - double dRad ; - LuaCheckParam( L, 3, dRad) - bool bSquareEnds ; - LuaCheckParam( L, 4, bSquareEnds) - bool bSquareMids = bSquareEnds ; - LuaGetParam( L, 5, bSquareMids) ; - - LuaClearStack( L) ; - int nCount = 0 ; - int nNewId = ExeCurveGetFatCurve( nId, nDestGrpId, dRad, bSquareEnds, bSquareMids, &nCount) ; - if ( nNewId != GDB_ID_NULL) - LuaSetParam( L, nNewId) ; - else - LuaSetParam( L) ; - - LuaSetParam( L, nCount) ; - return 2 ; -} - //------------------------------------------------------------------------------- bool LuaInstallGdbGetCurve( LuaMgr& luaMgr) @@ -615,7 +563,5 @@ 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( "EgtCurveGetVoronoi", LuaCurveGetVoronoi) ; - bOk = bOk && luaMgr.RegisterFunction( "EgtCurveGetFatCurve", LuaCurveGetFatCurve) ; return bOk ; } diff --git a/LUA_GdbModifyCurve.cpp b/LUA_GdbModifyCurve.cpp index 09229f1..adb82f0 100644 --- a/LUA_GdbModifyCurve.cpp +++ b/LUA_GdbModifyCurve.cpp @@ -998,6 +998,82 @@ LuaPocketing( lua_State* L) { return 3 ; } +//---------------------------------------------------------------------------- +static int +LuaCurveGetVoronoi( lua_State* L) +{ + // 2 o 3 parametri : Id, nDestGrpId [, nBound] + int nId ; + LuaCheckParam( L, 1, nId) + int nDestGrpId ; + LuaCheckParam( L, 2, nDestGrpId) + int nBound = VORONOI_STD_BOUND ; + LuaGetParam( L, 3, nBound) ; + LuaClearStack( L) ; + // eseguo + int nCount = 0 ; + int nNewId = ExeCurveGetVoronoi( nId, nDestGrpId, nBound, &nCount) ; + if ( nNewId != GDB_ID_NULL) + LuaSetParam( L, nNewId) ; + else + LuaSetParam( L) ; + LuaSetParam( L, nCount) ; + + return 2 ; +} + +//---------------------------------------------------------------------------- +static int +LuaCurveMedialAxisAdv( lua_State* L) +{ + // 2 o 3 parametri : Id, nDestGrpId [, nSide] + int nId ; + LuaCheckParam( L, 1, nId) + int nDestGrpId ; + LuaCheckParam( L, 2, nDestGrpId) + int nSide = Voronoi::WMAT_LEFT ; + LuaGetParam( L, 3, nSide) ; + LuaClearStack( L) ; + // eseguo + int nCount = 0 ; + int nNewId = ExeCurveGetMedialAxis( nId, nDestGrpId, nSide, &nCount) ; + if ( nNewId != GDB_ID_NULL) + LuaSetParam( L, nNewId) ; + else + LuaSetParam( L) ; + LuaSetParam( L, nCount) ; + + return 2 ; +} + +//---------------------------------------------------------------------------- +static int +LuaCurveGetFatCurve( lua_State* L) +{ + // 4 o 5 parametri : Id, nDestGrpId, dRad, bSquare [, bSquareMids] + int nId ; + LuaCheckParam( L, 1, nId) + int nDestGrpId ; + LuaCheckParam( L, 2, nDestGrpId) + double dRad ; + LuaCheckParam( L, 3, dRad) + bool bSquareEnds ; + LuaCheckParam( L, 4, bSquareEnds) + bool bSquareMids = bSquareEnds ; + LuaGetParam( L, 5, bSquareMids) ; + LuaClearStack( L) ; + // eseguo + int nCount = 0 ; + int nNewId = ExeCurveGetFatCurve( nId, nDestGrpId, dRad, bSquareEnds, bSquareMids, &nCount) ; + if ( nNewId != GDB_ID_NULL) + LuaSetParam( L, nNewId) ; + else + LuaSetParam( L) ; + LuaSetParam( L, nCount) ; + + return 2 ; +} + //------------------------------------------------------------------------------- bool LuaInstallGdbModifyCurve( LuaMgr& luaMgr) @@ -1055,5 +1131,8 @@ LuaInstallGdbModifyCurve( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtReorderCurvesInGroup", LuaReorderCurvesInGroup) ; bOk = bOk && luaMgr.RegisterFunction( "EgtProjectCurveOnSurfTm", LuaProjectCurveOnSurfTm) ; bOk = bOk && luaMgr.RegisterFunction( "EgtPocketing", LuaPocketing) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtCurveGetVoronoi", LuaCurveGetVoronoi) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtCurveMedialAxisAdv", LuaCurveMedialAxisAdv) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtCurveGetFatCurve", LuaCurveGetFatCurve) ; return bOk ; }