From 8192bd0febe3399653d9a351ff1c6b7eb8df43ad Mon Sep 17 00:00:00 2001 From: DarioS Date: Tue, 11 Oct 2022 12:28:47 +0200 Subject: [PATCH] EgtExecutor 2.4i7 : - aggiunta funzione Exe e Lua SurfTmToTriangles. --- EXE_GdbModifySurf.cpp | 68 ++++++++++++++++++++++++++++++++++++++++++ EgtExecutor.rc | Bin 18890 -> 18890 bytes LUA_GdbModifySurf.cpp | 20 +++++++++++++ 3 files changed, 88 insertions(+) diff --git a/EXE_GdbModifySurf.cpp b/EXE_GdbModifySurf.cpp index 715142b..85a5a05 100644 --- a/EXE_GdbModifySurf.cpp +++ b/EXE_GdbModifySurf.cpp @@ -367,6 +367,74 @@ ExeSurfFrRotateSimpleNoCollision( int nId1, int nId2, const Point3d& ptCen, doub return ( bOk && CAvSimpleSurfFrMove( *pSfr1, *pSfr2L).Rotate(ptCenL, dAngDeg)) ; } +//------------------------------------------------------------------------------- +static int +MySurfTmToTriangles( int nId, int& nCount) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + // recupero la superficie TriMesh + const ISurfTriMesh* pStm = GetSurfTriMesh( pGeomDB->GetGeoObj( nId)) ; + if ( pStm == nullptr) + return GDB_ID_NULL ; + // recupero il numero di triangoli + int nTria = pStm->GetTriangleCount() ; + // se ci sono più triangoli, li separo + if ( nTria > 1) { + // copio tutti triangoli + int nFirstId = GDB_ID_NULL ; + nCount = 0 ; + for ( int i = 0 ; i < pStm->GetTriangleSize() ; ++ i) { + ISurfTriMesh* pFac = pStm->CloneTriangle( i) ; + if ( pFac == nullptr) + continue ; + // inserisco la superficie nello stesso gruppo e nello stesso posto del GeomDB + int nNewId = pGeomDB->InsertGeoObj( GDB_ID_NULL, nId, GDB_BEFORE, pFac) ; + if ( nNewId == GDB_ID_NULL) + return GDB_ID_NULL ; + // copio gli attributi + if ( ! pGeomDB->CopyAttributes( nId, nNewId)) + return GDB_ID_NULL ; + // aggiorno contatori + if ( nFirstId == GDB_ID_NULL) + nFirstId = nNewId ; + ++ nCount ; + } + // elimino la superficie originale + pGeomDB->Erase( nId) ; + // restituisco risultati + return nFirstId ; + } + // non devo fare alcunché + nCount = 1 ; + return nId ; +} + +//------------------------------------------------------------------------------- +int +ExeSurfTmToTriangles( int nId, int* pnCount) +{ + IGeomDB* pGeomDB = GetCurrGeomDB() ; + VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) + // verifico sia una superficie trimesh + int nFirstId = GDB_ID_NULL ; + int nCount = 0 ; + if ( pGeomDB->GetGeoType( nId) == SRF_TRIMESH) { + nFirstId = MySurfTmToTriangles( nId, nCount) ; + } + ExeSetModified() ; + // se richiesto, salvo il comando Lua equivalente + if ( IsCmdLog()) { + string sLua = "EgtSurfTmToTriangles(" + ToString( nId) + ")" + + " -- Id1=" + ToString( nFirstId) + ",Nbr=" + ToString( nCount) ; + LOG_INFO( GetCmdLogger(), sLua.c_str()) ; + } + // restituisco risultati + if ( pnCount != nullptr) + *pnCount = nCount ; + return nFirstId ; +} + //------------------------------------------------------------------------------- bool ExeSurfTmRemoveFacet( int nId, int nFacet) diff --git a/EgtExecutor.rc b/EgtExecutor.rc index e6409abaadb2c26a917c01fa13a192bfab7343c2..4ed6e2b8ccdb54656669d20ba3bc06521a5411d0 100644 GIT binary patch delta 81 zcmX>#neo(Q#tpyN7|l2TW^-i*QjT29S-`yGOp`YVRxz4ScH~Ol+$UrM5#neo(Q#tpyN7|k~SW^-i*QjT29S-`yGOp`YVRxz4QcH~Ol+$UrM5