X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMDS%2FSMDS_MeshElement.hxx;h=8d0d674e09166beed2108b114a915e6260369296;hb=df9cc07c95bbe75654ed43634939a133ccebe2f6;hp=a8a3ad4224f038efcf96ad34d21b539b19eb4c58;hpb=24d5088297c103c52c52e47df887532bc650038b;p=modules%2Fsmesh.git diff --git a/src/SMDS/SMDS_MeshElement.hxx b/src/SMDS/SMDS_MeshElement.hxx index a8a3ad422..8d0d674e0 100644 --- a/src/SMDS/SMDS_MeshElement.hxx +++ b/src/SMDS/SMDS_MeshElement.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -79,7 +79,7 @@ public: virtual int NbNodes() const; virtual int NbEdges() const; virtual int NbFaces() const; - inline int GetID() const { return myID; }; + inline int GetID() const { return myID; } ///Return the type of the current element virtual SMDSAbs_ElementType GetType() const = 0; @@ -141,7 +141,7 @@ public: * \param node - the node to check * \retval int - node index within the element, -1 if not found */ - int GetNodeIndex( const SMDS_MeshNode* node ) const; + virtual int GetNodeIndex( const SMDS_MeshNode* node ) const; inline ShortType getMeshId() const { return myMeshId; } inline LongType getshapeId() const { return myShapeId; } @@ -151,19 +151,28 @@ public: /*! * \brief Filters of elements, to be used with SMDS_SetIterator */ - struct TypeFilter + struct Filter + { + virtual bool operator()(const SMDS_MeshElement* e) const = 0; + virtual ~Filter() {} + }; + struct NonNullFilter: public Filter + { + bool operator()(const SMDS_MeshElement* e) const { return e; } + }; + struct TypeFilter : public Filter { SMDSAbs_ElementType _type; TypeFilter( SMDSAbs_ElementType t = SMDSAbs_NbElementTypes ):_type(t) {} bool operator()(const SMDS_MeshElement* e) const { return e && e->GetType() == _type; } }; - struct EntityFilter + struct EntityFilter : public Filter { SMDSAbs_EntityType _type; EntityFilter( SMDSAbs_EntityType t = SMDSEntity_Last ):_type(t) {} bool operator()(const SMDS_MeshElement* e) const { return e && e->GetEntityType() == _type; } }; - struct GeomFilter + struct GeomFilter : public Filter { SMDSAbs_GeometryType _type; GeomFilter( SMDSAbs_GeometryType t = SMDSGeom_NONE ):_type(t) {} @@ -199,9 +208,16 @@ protected: */ // ============================================================ -struct TIDCompare { +struct TIDTypeCompare { bool operator () (const SMDS_MeshElement* e1, const SMDS_MeshElement* e2) const { return e1->GetType() == e2->GetType() ? e1->GetID() < e2->GetID() : e1->GetType() < e2->GetType(); } }; +// WARNING: this comparator makes impossible to store both nodes and elements in the same set +// because there are nodes and elements with the same ID. Use TIDTypeCompare for such containers. +struct TIDCompare { + bool operator () (const SMDS_MeshElement* e1, const SMDS_MeshElement* e2) const + { return e1->GetID() < e2->GetID(); } +}; + #endif