small optimization

This commit is contained in:
eap 2020-03-18 19:02:52 +03:00
parent 24a8566eb1
commit 896ab9bad6
6 changed files with 34 additions and 13 deletions

View File

@ -521,9 +521,7 @@ int SMDS_MeshCell::NbNodes() const
{ {
if ( GetVtkType() == VTK_POLYHEDRON ) if ( GetVtkType() == VTK_POLYHEDRON )
return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbNodes(); return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbNodes();
vtkIdType npts; vtkIdType npts = getGrid()->GetCells()->GetCellSize( GetVtkID() );
vtkIdType const *pts;
getGrid()->GetCellPoints( GetVtkID(), npts, pts );
return npts; return npts;
} }

View File

@ -9349,7 +9349,7 @@ void SMESH_MeshEditor::ConvertFromQuadratic(TIDSortedElemSet& theElements)
const SMDS_MeshElement* eComplex = invIt2->next(); const SMDS_MeshElement* eComplex = invIt2->next();
if ( eComplex->IsQuadratic() && !allMediumNodesIn( eComplex, mediumNodes)) if ( eComplex->IsQuadratic() && !allMediumNodesIn( eComplex, mediumNodes))
{ {
int nbCommonNodes = SMESH_MeshAlgos::GetCommonNodes( e, eComplex ).size(); int nbCommonNodes = SMESH_MeshAlgos::NbCommonNodes( e, eComplex );
if ( nbCommonNodes == e->NbNodes()) if ( nbCommonNodes == e->NbNodes())
{ {
complexFound = true; complexFound = true;

View File

@ -1098,7 +1098,7 @@ TopAbs_State SMESH_ElementSearcherImpl::GetPointState(const gp_Pnt& point)
const SMDS_MeshElement* prevFace = u_int1->second._face; const SMDS_MeshElement* prevFace = u_int1->second._face;
while ( ok && u_int2->second._coincides ) while ( ok && u_int2->second._coincides )
{ {
if ( SMESH_MeshAlgos::GetCommonNodes(prevFace , u_int2->second._face).empty() ) if ( SMESH_MeshAlgos::NbCommonNodes(prevFace , u_int2->second._face) == 0 )
ok = false; ok = false;
else else
{ {
@ -2210,10 +2210,26 @@ bool SMESH_MeshAlgos::FaceNormal(const SMDS_MeshElement* F, gp_XYZ& normal, bool
return ok; return ok;
} }
//======================================================================= //================================================================================
//function : GetCommonNodes /*!
//purpose : Return nodes common to two elements * \brief Return nodes common to two elements
//======================================================================= */
//================================================================================
int SMESH_MeshAlgos::NbCommonNodes(const SMDS_MeshElement* e1,
const SMDS_MeshElement* e2)
{
int nb = 0;
for ( int i = 0 ; i < e1->NbNodes(); ++i )
nb += ( e2->GetNodeIndex( e1->GetNode( i )) >= 0 );
return nb;
}
//================================================================================
/*!
* \brief Return nodes common to two elements
*/
//================================================================================
std::vector< const SMDS_MeshNode*> SMESH_MeshAlgos::GetCommonNodes(const SMDS_MeshElement* e1, std::vector< const SMDS_MeshNode*> SMESH_MeshAlgos::GetCommonNodes(const SMDS_MeshElement* e1,
const SMDS_MeshElement* e2) const SMDS_MeshElement* e2)
@ -2224,6 +2240,7 @@ std::vector< const SMDS_MeshNode*> SMESH_MeshAlgos::GetCommonNodes(const SMDS_Me
common.push_back( e1->GetNode( i )); common.push_back( e1->GetNode( i ));
return common; return common;
} }
//================================================================================ //================================================================================
/*! /*!
* \brief Return true if node1 encounters first in the face and node2, after * \brief Return true if node1 encounters first in the face and node2, after

View File

@ -187,6 +187,12 @@ namespace SMESH_MeshAlgos
SMESHUtils_EXPORT SMESHUtils_EXPORT
bool FaceNormal(const SMDS_MeshElement* F, gp_XYZ& normal, bool normalized=true); bool FaceNormal(const SMDS_MeshElement* F, gp_XYZ& normal, bool normalized=true);
/*!
* \brief Return number of nodes common to two elements
*/
SMESHUtils_EXPORT
int NbCommonNodes(const SMDS_MeshElement* e1,
const SMDS_MeshElement* e2);
/*! /*!
* \brief Return nodes common to two elements * \brief Return nodes common to two elements
*/ */

View File

@ -2981,8 +2981,8 @@ namespace
bool isAdded = checkedCoplanar.insert( myLinks[iE].myFace ).second; bool isAdded = checkedCoplanar.insert( myLinks[iE].myFace ).second;
if ( !isAdded ) if ( !isAdded )
continue; continue;
toErase = SMESH_MeshAlgos::GetCommonNodes( myLinks[i ].myFace, toErase = ( SMESH_MeshAlgos::NbCommonNodes( myLinks[i ].myFace,
myLinks[iE].myFace ).size() < 1; myLinks[iE].myFace ) < 1 );
} }
} }
} }
@ -3075,7 +3075,7 @@ namespace
//check if the faces are connected //check if the faces are connected
int nbCommonNodes = 0; int nbCommonNodes = 0;
if ( e.myFace && myFace ) if ( e.myFace && myFace )
nbCommonNodes = SMESH_MeshAlgos::GetCommonNodes( e.myFace, myFace ).size(); nbCommonNodes = SMESH_MeshAlgos::NbCommonNodes( e.myFace, myFace );
bool toReplace = (( myIndex == _INTERNAL && nbCommonNodes > 1 ) || bool toReplace = (( myIndex == _INTERNAL && nbCommonNodes > 1 ) ||
( myIndex == _COPLANAR && nbCommonNodes < 2 )); ( myIndex == _COPLANAR && nbCommonNodes < 2 ));
if ( toReplace ) if ( toReplace )

View File

@ -1369,7 +1369,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh&
while ( vIt->more() ) while ( vIt->more() )
{ {
const SMDS_MeshElement* PrmJ = vIt->next(); const SMDS_MeshElement* PrmJ = vIt->next();
if ( SMESH_MeshAlgos::GetCommonNodes( PrmI, PrmJ ).size() > 1 ) if ( SMESH_MeshAlgos::NbCommonNodes( PrmI, PrmJ ) > 1 )
checkedPyrams.insert( PrmJ ); checkedPyrams.insert( PrmJ );
} }
} }