X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMDS%2FSMDS_VolumeOfNodes.cxx;fp=src%2FSMDS%2FSMDS_VolumeOfNodes.cxx;h=af3c64cf5c2ee25342407b826dd76e6b9ff6e267;hp=0428095da1cdc839f6395a7cdf9c8facd8872384;hb=79b1ac2b6df9117f16f11d444b1f165d477a1813;hpb=984c4ffdd7df62aeaedc544cd0b8e64ff8f53f1a diff --git a/src/SMDS/SMDS_VolumeOfNodes.cxx b/src/SMDS/SMDS_VolumeOfNodes.cxx index 0428095da..af3c64cf5 100644 --- a/src/SMDS/SMDS_VolumeOfNodes.cxx +++ b/src/SMDS/SMDS_VolumeOfNodes.cxx @@ -26,8 +26,11 @@ #include "SMDS_VolumeOfNodes.hxx" #include "SMDS_MeshNode.hxx" #include "SMDS_SetIterator.hxx" +#include "SMDS_VolumeTool.hxx" #include "utilities.h" +#include + using namespace std; /////////////////////////////////////////////////////////////////////////////// @@ -171,6 +174,12 @@ int SMDS_VolumeOfNodes::NbEdges() const return 0; } +/// =================================================================== +/*! + * \brief Iterator on node of volume + */ +/// =================================================================== + class SMDS_VolumeOfNodes_MyIterator:public SMDS_NodeArrayElemIterator { public: @@ -178,6 +187,31 @@ class SMDS_VolumeOfNodes_MyIterator:public SMDS_NodeArrayElemIterator SMDS_NodeArrayElemIterator( s, & s[ l ]) {} }; +/// =================================================================== +/*! + * \brief Iterator on faces or edges of volume + */ +/// =================================================================== + +class _MySubIterator : public SMDS_ElemIterator +{ + vector< const SMDS_MeshElement* > myElems; + int myIndex; +public: + _MySubIterator(const SMDS_VolumeOfNodes* vol, SMDSAbs_ElementType type):myIndex(0) { + SMDS_VolumeTool vTool(vol); + if (type == SMDSAbs_Face) + vTool.GetAllExistingFaces( myElems ); + else + vTool.GetAllExistingFaces( myElems ); + } + /// 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_VolumeOfNodes::elementsIterator(SMDSAbs_ElementType type) const { switch(type) @@ -186,6 +220,10 @@ SMDS_ElemIteratorPtr SMDS_VolumeOfNodes::elementsIterator(SMDSAbs_ElementType ty return SMDS_MeshElement::elementsIterator(SMDSAbs_Volume); case SMDSAbs_Node: return SMDS_ElemIteratorPtr(new SMDS_VolumeOfNodes_MyIterator(myNodes,myNbNodes)); + case SMDSAbs_Face: + return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Face)); + case SMDSAbs_Edge: + return SMDS_ElemIteratorPtr(new _MySubIterator(this,SMDSAbs_Edge)); default: MESSAGE("ERROR : Iterator not implemented"); return SMDS_ElemIteratorPtr((SMDS_ElemIterator*)NULL);