X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMDS%2FSMDS_PolygonalFaceOfNodes.cxx;h=67d6160ce842ca5ff0e6aa161eab8b09df1e4b9f;hp=897cd69934d94a4bbf916b0c1b3fbaa4229de7bb;hb=79b1ac2b6df9117f16f11d444b1f165d477a1813;hpb=984c4ffdd7df62aeaedc544cd0b8e64ff8f53f1a diff --git a/src/SMDS/SMDS_PolygonalFaceOfNodes.cxx b/src/SMDS/SMDS_PolygonalFaceOfNodes.cxx index 897cd6993..67d6160ce 100644 --- a/src/SMDS/SMDS_PolygonalFaceOfNodes.cxx +++ b/src/SMDS/SMDS_PolygonalFaceOfNodes.cxx @@ -27,6 +27,8 @@ #include "SMDS_IteratorOfElements.hxx" #include "SMDS_SetIterator.hxx" +#include "SMDS_Mesh.hxx" + #include "utilities.h" using namespace std; @@ -135,6 +137,33 @@ class SMDS_PolygonalFaceOfNodes_MyIterator:public SMDS_NodeVectorElemIterator SMDS_NodeVectorElemIterator( s.begin(), s.end() ) {} }; +/// =================================================================== +/*! + * \brief Iterator on edges of face + */ +/// =================================================================== + +class _MyEdgeIterator : public SMDS_ElemIterator +{ + vector< const SMDS_MeshElement* > myElems; + int myIndex; +public: + _MyEdgeIterator(const SMDS_MeshFace* 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_PolygonalFaceOfNodes::elementsIterator (SMDSAbs_ElementType type) const { @@ -145,7 +174,7 @@ SMDS_ElemIteratorPtr SMDS_PolygonalFaceOfNodes::elementsIterator case SMDSAbs_Node: return SMDS_ElemIteratorPtr(new SMDS_PolygonalFaceOfNodes_MyIterator(myNodes)); case SMDSAbs_Edge: - MESSAGE("Error : edge iterator for SMDS_PolygonalFaceOfNodes not implemented"); + return SMDS_ElemIteratorPtr(new _MyEdgeIterator( this )); break; default: return SMDS_ElemIteratorPtr