EgtGeomKernel :

- aggiunto a SurfTriMesh metodo RemoveFacet.
This commit is contained in:
Dario Sassi
2020-04-05 15:36:47 +00:00
parent 0b0a8c8f96
commit c341a8d036
2 changed files with 32 additions and 1 deletions
+1
View File
@@ -221,6 +221,7 @@ class SurfTriMesh : public ISurfTriMesh, public IGeoObjRW
bool GetFacetNormal( int nF, Vector3d& vtN) const override ;
bool GetFacetArea( int nF, double& dArea) const override ;
bool GetFacetsContact( int nF1, int nF2, bool& bAdjac, Point3d& ptP1, Point3d& ptP2, double& dAng) const override ;
bool RemoveFacet( int nF) override ;
SurfTriMesh* CloneFacet( int nF) const override ;
bool SwapFacets( int nF1, int nF2) override ;
bool GetFacetLocalBBox( int nF, BBox3d& b3Loc, int nFlag = BBF_STANDARD) const override ;
+31 -1
View File
@@ -645,6 +645,8 @@ SurfTriMesh::GetFacetArea( int nF, double& dArea) const
SurfTriMesh*
SurfTriMesh::CloneFacet( int nF) const
{
if ( ! IsValid())
return nullptr ;
// alloco la nuova superficie
PtrOwner<SurfTriMesh> pSTM( CreateBasicSurfTriMesh()) ;
if ( IsNull( pSTM))
@@ -689,12 +691,40 @@ SurfTriMesh::CloneFacet( int nF) const
return Release( pSTM) ;
}
//----------------------------------------------------------------------------
bool
SurfTriMesh::RemoveFacet( int nF)
{
// verifico esistenza delle due facce
if ( ! IsValid() || nF < 0 || nF >= GetFacetCount())
return false ;
// recupero l'elenco dei triangoli della faccia
INTVECTOR vTria ;
if ( ! GetAllTriaInFacet( nF, vTria))
return false ;
// Rimuovo i triangoli della faccia
for ( int i : vTria)
RemoveTriangle( i) ;
// aggiorno le strutture di base dell'oggetto
if ( ! DoCompacting())
return false ;
// dichiaro necessità ricalcolo della grafica e di hashgrids3d
m_OGrMgr.Reset() ;
ResetHashGrids3d() ;
return true ;
}
//----------------------------------------------------------------------------
bool
SurfTriMesh::SwapFacets( int nF1, int nF2)
{
// verifico esistenza delle due facce
if ( nF1 < 0 || nF1 >= GetFacetCount() || nF2 < 0 || nF2 >= GetFacetCount())
if ( ! IsValid() || nF1 < 0 || nF1 >= GetFacetCount() || nF2 < 0 || nF2 >= GetFacetCount())
return false ;
// recupero gli indici dei triangoli della prima e seconda faccia