diff --git a/SurfTriMesh.cpp b/SurfTriMesh.cpp index 2fdf8e2..1a80f28 100644 --- a/SurfTriMesh.cpp +++ b/SurfTriMesh.cpp @@ -4415,6 +4415,35 @@ SurfTriMesh::ClonePart( int nPart) const return Release( pSurfTM) ; } +//---------------------------------------------------------------------------- +bool +SurfTriMesh::GetPartAndShellFromFacet( int nFacet, int& nPart, int& nShell) const +{ + // l'indice della faccia deve essere nei limiti + if ( nFacet < 0 || nFacet >= int( m_vFacet.size())) + return false ; + + // mi assicuro che siano calcolate il numero di parti e di shell + int nParts = GetPartCount() ; + + int nTria = m_vFacet[nFacet] ; + nShell = m_vTria[nTria].nShell ; + + // scopro in quale part รจ la shell + int nPartTemp = 0 ; + nPart = - 1 ; + while ( nPartTemp < nParts && nPart == - 1) { + for ( int i : m_vPart[nPartTemp].vShell) { + if ( i == nShell) { + nPart = nPartTemp ; + break ; + } + } + ++nPartTemp ; + } + return true ; +} + //---------------------------------------------------------------------------- bool SurfTriMesh::ResetTFlags( void) diff --git a/SurfTriMesh.h b/SurfTriMesh.h index 3ab9637..44b1fa2 100644 --- a/SurfTriMesh.h +++ b/SurfTriMesh.h @@ -347,6 +347,7 @@ class SurfTriMesh : public ISurfTriMesh, public IGeoObjRW bool GetPartVolume( int nPart, double& dVolume) const override ; bool GetPartLoops( int nPart, POLYLINEVECTOR& vPL) const override ; SurfTriMesh* ClonePart( int nPart) const override ; + bool GetPartAndShellFromFacet( int nFacet, int& nPart, int& nShell) const override ; bool SetTFlag( int nId, int nTFlag) override ; bool GetTFlag( int nId, int& nFlag) const override ; int GetMaxTFlag( void) const override