- // Same as GetInverseElementIterator but the create iterator only return
- // wanted type elements.
- class MyIterator:public SMDS_Iterator<const SMDS_MeshElement*>
- {
- set<const SMDS_MeshElement*> mySet;
- set<const SMDS_MeshElement*>::iterator myIterator;
- public:
- MyIterator(SMDSAbs_ElementType type,
- const set<const SMDS_MeshElement*>& s)
- {
- const SMDS_MeshElement * e;
- bool toInsert;
- set<const SMDS_MeshElement*>::iterator it=s.begin();
- while(it!=s.end())
- {
- e=*it;
- switch(type)
- {
- case SMDSAbs_Edge: toInsert=true; break;
- case SMDSAbs_Face: toInsert=(e->GetType()!=SMDSAbs_Edge); break;
- case SMDSAbs_Volume: toInsert=(e->GetType()==SMDSAbs_Volume); break;
- }
- if(toInsert) mySet.insert(e);
- it++;
- }
- myIterator=mySet.begin();
- }
-
- bool more()
- {
- myIterator!=mySet.end();
- }
-
- const SMDS_MeshElement* next()
- {
- const SMDS_MeshElement* current=*myIterator;
- myIterator++;
- return current;
- }
- };
-
- if(type==SMDSAbs_Node)
- return SMDS_MeshElement::elementsIterator(SMDSAbs_Node);
- else
- return new SMDS_IteratorOfElements(this,type,
- new MyIterator(type, myInverseElements));
+ if(type==SMDSAbs_Node)
+ return SMDS_MeshElement::elementsIterator(SMDSAbs_Node);
+ else
+ return SMDS_ElemIteratorPtr
+ (new SMDS_IteratorOfElements
+ (this,type,
+ SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyIterator(type, myInverseElements))));