mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-25 05:30:32 +05:00
23544: SMESH's performance issues
This commit is contained in:
parent
dfdbed8fb7
commit
19fe2e412f
@ -41,6 +41,7 @@ namespace
|
||||
SMDSAbs_ElementType myType;
|
||||
SMDSAbs_GeometryType myGeom;
|
||||
bool myIsPoly;
|
||||
bool myIsQuadratic;
|
||||
int myNbCornerNodes;
|
||||
int myNbNodes;
|
||||
int myNbEdges;
|
||||
@ -65,12 +66,12 @@ namespace
|
||||
myType = Type;
|
||||
myGeom = Geom;
|
||||
myIsPoly = IsPoly;
|
||||
myIsQuadratic = ( NbNodes > NbCornerNodes );
|
||||
myNbCornerNodes = NbCornerNodes;
|
||||
myNbNodes = NbNodes;
|
||||
myNbEdges = NbEdges;
|
||||
myNbFaces = NbFaces;
|
||||
}
|
||||
bool IsQuadratic() const { return myNbNodes > myNbCornerNodes; }
|
||||
};
|
||||
|
||||
//! return vector a CellProps
|
||||
@ -259,7 +260,7 @@ bool SMDS_MeshCell::ChangeNodes(const SMDS_MeshNode* nodes[], const int theNbNod
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
int SMDS_MeshCell::NbNodes() const
|
||||
{
|
||||
if ( GetEntityType() == SMDSEntity_Polyhedra )
|
||||
if ( GetVtkType() == VTK_POLYHEDRON )
|
||||
return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbNodes();
|
||||
vtkIdType *pts, npts;
|
||||
getGrid()->GetCellPoints( GetVtkID(), npts, pts );
|
||||
@ -268,7 +269,7 @@ int SMDS_MeshCell::NbNodes() const
|
||||
|
||||
int SMDS_MeshCell::NbFaces() const
|
||||
{
|
||||
if ( GetEntityType() == SMDSEntity_Polyhedra )
|
||||
if ( GetVtkType() == VTK_POLYHEDRON )
|
||||
return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbFaces();
|
||||
return getCellProps( GetVtkType() ).myNbFaces;
|
||||
}
|
||||
@ -290,13 +291,13 @@ int SMDS_MeshCell::NbEdges() const
|
||||
|
||||
int SMDS_MeshCell::NbCornerNodes() const
|
||||
{
|
||||
switch ( GetEntityType() )
|
||||
switch ( GetVtkType() )
|
||||
{
|
||||
case SMDSEntity_Polyhedra:
|
||||
case VTK_POLYHEDRON:
|
||||
return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbCornerNodes();
|
||||
case SMDSEntity_Polygon:
|
||||
case VTK_POLYGON:
|
||||
return NbNodes();
|
||||
case SMDSEntity_Quad_Polygon:
|
||||
case VTK_QUADRATIC_POLYGON:
|
||||
return NbNodes() / 2;
|
||||
default:;
|
||||
}
|
||||
@ -308,7 +309,7 @@ int SMDS_MeshCell::NbCornerNodes() const
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
SMDS_ElemIteratorPtr SMDS_MeshCell::nodesIterator() const
|
||||
{
|
||||
if ( GetEntityType() == SMDSEntity_Polyhedra )
|
||||
if ( GetVtkType() == VTK_POLYHEDRON )
|
||||
return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::nodesIterator();
|
||||
|
||||
return boost::make_shared< SMDS_VtkCellIterator<> >( GetMesh(), GetVtkID(), GetEntityType());
|
||||
@ -319,7 +320,7 @@ SMDS_ElemIteratorPtr SMDS_MeshCell::nodesIterator() const
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
SMDS_NodeIteratorPtr SMDS_MeshCell::nodeIterator() const
|
||||
{
|
||||
if ( GetEntityType() == SMDSEntity_Polyhedra )
|
||||
if ( GetVtkType() == VTK_POLYHEDRON )
|
||||
return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::nodeIterator();
|
||||
|
||||
return SMDS_NodeIteratorPtr
|
||||
@ -340,7 +341,7 @@ SMDS_NodeIteratorPtr SMDS_MeshCell::nodesIteratorToUNV() const
|
||||
|
||||
SMDSAbs_ElementType SMDS_MeshCell::GetType() const
|
||||
{
|
||||
return ElemType( GetEntityType() );
|
||||
return getCellProps( GetVtkType() ).myType;
|
||||
}
|
||||
|
||||
SMDSAbs_EntityType SMDS_MeshCell::GetEntityType() const
|
||||
@ -365,12 +366,12 @@ bool SMDS_MeshCell::IsPoly() const
|
||||
|
||||
bool SMDS_MeshCell::IsQuadratic() const
|
||||
{
|
||||
return getCellProps( GetVtkType() ).IsQuadratic();
|
||||
return getCellProps( GetVtkType() ).myIsQuadratic;
|
||||
}
|
||||
|
||||
const SMDS_MeshNode* SMDS_MeshCell::GetNode(const int ind) const
|
||||
{
|
||||
if ( GetEntityType() == SMDSEntity_Polyhedra )
|
||||
if ( GetVtkType() == VTK_POLYHEDRON )
|
||||
return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::GetNode( ind );
|
||||
|
||||
vtkIdType npts, *pts;
|
||||
@ -381,7 +382,7 @@ const SMDS_MeshNode* SMDS_MeshCell::GetNode(const int ind) const
|
||||
|
||||
int SMDS_MeshCell::GetNodeIndex( const SMDS_MeshNode* node ) const
|
||||
{
|
||||
if ( GetEntityType() == SMDSEntity_Polyhedra )
|
||||
if ( GetVtkType() == VTK_POLYHEDRON )
|
||||
return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::GetNodeIndex( node );
|
||||
|
||||
vtkIdType npts, *pts;
|
||||
@ -767,7 +768,7 @@ bool SMDS_MeshCell::IsPoly( SMDSAbs_EntityType entityType )
|
||||
|
||||
bool SMDS_MeshCell::IsQuadratic( SMDSAbs_EntityType entityType )
|
||||
{
|
||||
return getCellProps( entityType ).IsQuadratic();
|
||||
return getCellProps( entityType ).myIsQuadratic;
|
||||
}
|
||||
|
||||
int SMDS_MeshCell::NbCornerNodes( SMDSAbs_EntityType entityType )
|
||||
|
@ -45,7 +45,7 @@
|
||||
|
||||
SMDS_MeshGroup::SMDS_MeshGroup(const SMDS_Mesh * theMesh,
|
||||
const SMDSAbs_ElementType theType)
|
||||
: SMDS_ElementHolder( theMesh ), myType(theType), myTic(0)
|
||||
: SMDS_ElementHolder( theMesh ), myType( theType ), myTic( 0 )
|
||||
{
|
||||
}
|
||||
|
||||
@ -69,15 +69,15 @@ void SMDS_MeshGroup::Clear()
|
||||
bool SMDS_MeshGroup::Add(const SMDS_MeshElement * theElem)
|
||||
{
|
||||
// the type of the group is determined by the first element added
|
||||
if (myElements.empty()) {
|
||||
if ( myElements.empty() ) {
|
||||
myType = theElem->GetType();
|
||||
}
|
||||
else if (theElem->GetType() != myType) {
|
||||
else if ( theElem->GetType() != myType ) {
|
||||
MESSAGE("SMDS_MeshGroup::Add : Type Mismatch "<<theElem->GetType()<<"!="<<myType);
|
||||
return false;
|
||||
}
|
||||
|
||||
myElements.insert(theElem);
|
||||
myElements.insert( theElem );
|
||||
++myTic;
|
||||
|
||||
return true;
|
||||
@ -88,12 +88,12 @@ bool SMDS_MeshGroup::Add(const SMDS_MeshElement * theElem)
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
bool SMDS_MeshGroup::Remove(const SMDS_MeshElement * theElem)
|
||||
bool SMDS_MeshGroup::Remove( const SMDS_MeshElement * theElem )
|
||||
{
|
||||
TElementSet::iterator found = myElements.find(theElem);
|
||||
if ( found != myElements.end() ) {
|
||||
myElements.erase(found);
|
||||
if (myElements.empty()) myType = SMDSAbs_All;
|
||||
myElements.erase( found );
|
||||
if ( myElements.empty() ) myType = SMDSAbs_All;
|
||||
++myTic;
|
||||
return true;
|
||||
}
|
||||
@ -102,12 +102,12 @@ bool SMDS_MeshGroup::Remove(const SMDS_MeshElement * theElem)
|
||||
|
||||
//=======================================================================
|
||||
//function : Contains
|
||||
//purpose :
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
bool SMDS_MeshGroup::Contains(const SMDS_MeshElement * theElem) const
|
||||
{
|
||||
return myElements.find(theElem) != myElements.end();
|
||||
return myElements.find( theElem ) != myElements.end();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@ -152,6 +152,5 @@ void SMDS_MeshGroup::operator=( SMDS_MeshGroup && other )
|
||||
|
||||
void SMDS_MeshGroup::tmpClear()
|
||||
{
|
||||
compact();
|
||||
myElements.clear();
|
||||
}
|
||||
|
@ -33,8 +33,6 @@
|
||||
#include "SMDS_Mesh.hxx"
|
||||
#include <set>
|
||||
|
||||
#include <boost/container/flat_set.hpp>
|
||||
|
||||
class SMDS_EXPORT SMDS_MeshGroup: public SMDS_MeshObject, SMDS_ElementHolder
|
||||
{
|
||||
public:
|
||||
@ -43,7 +41,7 @@ class SMDS_EXPORT SMDS_MeshGroup: public SMDS_MeshObject, SMDS_ElementHolder
|
||||
|
||||
void SetType (const SMDSAbs_ElementType theType);
|
||||
void Clear();
|
||||
void Reserve(size_t nbElems) { myElements.reserve( nbElems ); }
|
||||
void Reserve(size_t nbElems) {}
|
||||
bool Add(const SMDS_MeshElement * theElem);
|
||||
bool Remove(const SMDS_MeshElement * theElem);
|
||||
bool IsEmpty() const { return myElements.empty(); }
|
||||
@ -62,12 +60,12 @@ class SMDS_EXPORT SMDS_MeshGroup: public SMDS_MeshObject, SMDS_ElementHolder
|
||||
virtual SMDS_ElemIteratorPtr getElements() { return GetElements(); }
|
||||
virtual void tmpClear();
|
||||
virtual void add( const SMDS_MeshElement* element ) { Add( element ); }
|
||||
virtual void compact() { myElements.shrink_to_fit(); }
|
||||
virtual void compact() {}
|
||||
|
||||
private:
|
||||
|
||||
typedef boost::container::flat_set< const SMDS_MeshElement* > TElementSet;
|
||||
typedef TElementSet::const_iterator TIterator;
|
||||
typedef std::set< const SMDS_MeshElement* > TElementSet;
|
||||
typedef TElementSet::const_iterator TIterator;
|
||||
|
||||
const SMDS_Mesh * myMesh;
|
||||
SMDSAbs_ElementType myType;
|
||||
|
@ -36,7 +36,7 @@ class SMDS_EXPORT SMDS_SpacePosition : public SMDS_Position
|
||||
public:
|
||||
|
||||
virtual SMDS_TypeOfPosition GetTypeOfPosition() const { return SMDS_TOP_3DSPACE; }
|
||||
static SMDS_PositionPtr originSpacePosition();
|
||||
static SMDS_PositionPtr originSpacePosition();
|
||||
virtual const double* GetParameters() const { return 0; }
|
||||
|
||||
private:
|
||||
|
Loading…
Reference in New Issue
Block a user