1 // SMESH SMESHDS : idl implementation based on 'SMESH' unit's classes
3 // Copyright (C) 2004 CEA
5 // This library is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation; either
8 // version 2.1 of the License.
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // Lesser General Public License for more details.
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with this library; if not, write to the Free Software
17 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // File : SMESHDS_Group.cxx
27 #include "SMESHDS_GroupBase.hxx"
28 #include "SMESHDS_Mesh.hxx"
30 #include "utilities.h"
34 //=============================================================================
38 //=============================================================================
40 SMESHDS_GroupBase::SMESHDS_GroupBase (const int theID,
41 const SMESHDS_Mesh* theMesh,
42 const SMDSAbs_ElementType theType):
43 myID(theID), myMesh(theMesh), myType(theType), myStoreName(""),
44 myCurIndex(0), myCurID(-1), myColorGroup(0)
48 //=============================================================================
52 //=============================================================================
54 int SMESHDS_GroupBase::GetID (const int theIndex)
56 if (myCurIndex < 1 || myCurIndex > theIndex) {
57 myIterator = GetElements();
61 while (myCurIndex < theIndex && myIterator->more()) {
63 myCurID = myIterator->next()->GetID();
65 return myCurIndex == theIndex ? myCurID : -1;
68 //=============================================================================
72 //=============================================================================
74 const SMDS_MeshElement* SMESHDS_GroupBase::findInMesh (const int theID) const
76 SMDSAbs_ElementType aType = GetType();
77 const SMDS_MeshElement* aElem = NULL;
78 if (aType == SMDSAbs_Node) {
79 aElem = GetMesh()->FindNode(theID);
81 else if (aType != SMDSAbs_All) {
82 aElem = GetMesh()->FindElement(theID);
83 if (aElem && aType != aElem->GetType())
89 //=============================================================================
91 * Internal method: resets cached iterator, should be called by ancestors
92 * when they are modified (ex: Add() or Remove() )
94 //=============================================================================
95 void SMESHDS_GroupBase::resetIterator()
101 //=======================================================================
104 //=======================================================================
106 int SMESHDS_GroupBase::Extent()
108 SMDS_ElemIteratorPtr it = GetElements();
111 for ( ; it->more(); it->next() )
116 //=======================================================================
119 //=======================================================================
121 bool SMESHDS_GroupBase::IsEmpty()
123 SMDS_ElemIteratorPtr it = GetElements();
124 return ( !it || !it->more() );
127 //=======================================================================
128 //function : Contains
130 //=======================================================================
132 bool SMESHDS_GroupBase::Contains (const int theID)
134 SMDS_ElemIteratorPtr it = GetElements();
135 bool contains = false;
137 while ( !contains && it->more() )
138 contains = ( it->next()->GetID() == theID );
142 //=======================================================================
145 //=======================================================================
147 void SMESHDS_GroupBase::SetType(SMDSAbs_ElementType theType)