X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMDS%2FSMDS_FaceOfNodes.cxx;h=45ee55ba9e4a467d93a7a26b64097ca94d7e3f50;hp=0ad564ef79012272ce087a206b007b63e3473c28;hb=79b1ac2b6df9117f16f11d444b1f165d477a1813;hpb=c63ee099ad2b149bd70136839c973e8910137bc5 diff --git a/src/SMDS/SMDS_FaceOfNodes.cxx b/src/SMDS/SMDS_FaceOfNodes.cxx index 0ad564ef7..45ee55ba9 100644 --- a/src/SMDS/SMDS_FaceOfNodes.cxx +++ b/src/SMDS/SMDS_FaceOfNodes.cxx @@ -27,6 +27,8 @@ #include "SMDS_FaceOfNodes.hxx" #include "SMDS_IteratorOfElements.hxx" #include "SMDS_MeshNode.hxx" +#include "SMDS_Mesh.hxx" + #include "utilities.h" using namespace std; @@ -76,6 +78,33 @@ class SMDS_FaceOfNodes_MyIterator:public SMDS_NodeArrayElemIterator SMDS_NodeArrayElemIterator( s, & s[ l ] ) {} }; +/// =================================================================== +/*! + * \brief Iterator on edges of face + */ +/// =================================================================== + +class _MyEdgeIterator : public SMDS_ElemIterator +{ + vector< const SMDS_MeshElement* > myElems; + int myIndex; +public: + _MyEdgeIterator(const SMDS_FaceOfNodes* face):myIndex(0) { + myElems.reserve( face->NbNodes() ); + for ( int i = 0; i < face->NbNodes(); ++i ) { + const SMDS_MeshElement* edge = + SMDS_Mesh::FindEdge( face->GetNode( i ), face->GetNode( i + 1 )); + if ( edge ) + myElems.push_back( edge ); + } + } + /// Return true if and only if there are other object in this iterator + virtual bool more() { return myIndex < myElems.size(); } + + /// Return the current object and step to the next one + virtual const SMDS_MeshElement* next() { return myElems[ myIndex++ ]; } +}; + SMDS_ElemIteratorPtr SMDS_FaceOfNodes::elementsIterator (SMDSAbs_ElementType type) const { @@ -86,7 +115,7 @@ SMDS_ElemIteratorPtr SMDS_FaceOfNodes::elementsIterator case SMDSAbs_Node: return SMDS_ElemIteratorPtr(new SMDS_FaceOfNodes_MyIterator(myNodes,myNbNodes)); case SMDSAbs_Edge: - MESSAGE("Error : edge iterator for SMDS_FaceOfNodes not implemented"); + return SMDS_ElemIteratorPtr(new _MyEdgeIterator( this )); break; default: return SMDS_ElemIteratorPtr