From 5a998a5d13dee48ca36b5baee8f54c19d2b20bbc Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Tue, 4 Nov 2025 15:52:48 +0100 Subject: [PATCH] EgtExecutor 2.7k2 : - aggiunta funzione per il calcolo della Curvatura in un vertice per una Superficie TriMesh. --- EXE_GdbGetSurf.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++++ EgtExecutor.rc | Bin 19714 -> 19660 bytes LUA_GdbGetSurf.cpp | 27 +++++++++++++++++++++ 3 files changed, 85 insertions(+) diff --git a/EXE_GdbGetSurf.cpp b/EXE_GdbGetSurf.cpp index 2f89b9e..9e117c2 100644 --- a/EXE_GdbGetSurf.cpp +++ b/EXE_GdbGetSurf.cpp @@ -1431,6 +1431,64 @@ ExeSurfTmGetEdges( int nId, int nDestGrpId, bool bSmoothAng, int* pnCount) return nFirstId ; } +//---------------------------------------------------------------------------- +bool +ExeSurfTmGetCurvatures( int nId, int nV, int nType, double& dK1, Vector3d& vtK1, double& dK2, Vector3d& vtK2) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + + // Inzializzo i parametri di ritorno + dK1 = 0. ; dK2 = 0. ; + vtK1 = V_NULL ; vtK2 = V_NULL ; + + // Recupero la superficie TriMesh + const ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nId)) ; + bool bOk = ( pStm != nullptr) ; + // Recupero il riferimento globale del gruppo cui appartiene + Frame3d frSurf ; + bOk = bOk && pGeomDB->GetGlobFrame( nId, frSurf) ; + + // Calcolo la Curvatura + bool bPlanar = false ; + if ( nType == STM_CURVATURE_STD) { + // Se curvatura Standard + Vector3d vtNorm = V_NULL ; + bOk = bOk && pStm->GetCurvature( nV, dK1, vtK1, dK2, vtK2, bPlanar, vtNorm) ; + } + else { + double dMinK = 0., dMaxK = 0. ; + Vector3d vtMinK = V_NULL, vtMaxK = V_NULL ; + if ( nType == STM_CURVATURE_GAUSS) + bOk = bOk && pStm->GetCurvature( nV, dMinK, vtMinK, dMaxK, vtMaxK, bPlanar, vtK1, &dK1) ; + else if ( nType == STM_CURVATURE_MEAN) + bOk = bOk && pStm->GetCurvature( nV, dMinK, vtMinK, dMaxK, vtMaxK, bPlanar, vtK1, nullptr, &dK1) ; + else if ( nType == STM_CURVATURE_NORM) { + bOk = bOk && pStm->GetCurvature( nV, dMinK, vtMinK, dMaxK, vtMaxK, bPlanar, vtK1, nullptr, nullptr, &dK1, &dK2) ; + vtK2 = vtK1 ; + } + } + // Se superficie localmente piana + if ( bPlanar) { + vtK1 = V_NULL ; // Sarebbe un vettore generico parallelo alla superficie ( sempre dK1 circa 0.) + vtK2 = V_NULL ; // Sarebbe un vettore generico parallelo alla superficie e perpendicolare a vtK1 + // ( sempre dK2 circa 0.) + } + + ExeSetModified() ; + // Se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtSurfTmGetCurvature(" + ToString( nId) + + ToString( nV) + + ToString( nType) + + " -- bOk=" + ToString( bOk) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + + // Restituisco il risultato + return bOk ; +} + //---------------------------------------------------------------------------- bool ExeSurfBezierGetPoint( int nSurfId, double dU, double dV, int nRefId, Point3d& ptP) diff --git a/EgtExecutor.rc b/EgtExecutor.rc index 2e22e9b94f0e4dfa4233006bdeb735f2b8eb3483..9743bcf8e147de3f3699acf405a1098de1f8beab 100644 GIT binary patch delta 252 zcmZpg#du~WYfaF4CxFx45Q1%wsf~9LTM^xqz#N1t@w@?lRNl1A;J710^@c&5MNfn86xcffQ7+ zALHgp(qQ3(a*i-z1Ep>9llfE?HrqI5FcIsf&F5W;83psfj`jpQItS?3#LfP08<{bM OC!cpYxcQuy2@?PTM?)z9 delta 286 zcmX>zld)+Qgdx3>plfK#@#_5{6WU6d*qs$VvqBiYHHW zk>31)nS+_paPwKQ>r9g`aON=@PBs+Q-RvOc$GCYHw;o7puiRy($$JE$Qj;B|%r^H4 z*|C5%xdIhHHPnDa_R2XzMWE^g7&jLw7syS%Ai*&?#8HOTgu#HpVzR%A_+$rBvB`Zt re47QFqL@f=_2!8##f-clk9mT