+ return myHolder->GetPosition( this );
+}
+
+//=======================================================================
+/*!
+ * \brief Iterator on list of elements
+ */
+//=======================================================================
+
+namespace
+{
+ struct InverseIterator: public SMDS_ElemIterator
+ {
+ const SMDS_Mesh* myMesh;
+ size_t myIter;
+ std::vector<vtkIdType> myCellList;
+
+ InverseIterator(const SMDS_Mesh * mesh = 0,
+ const vtkIdType* cells = 0,
+ const int ncells = 0,
+ SMDSAbs_ElementType type = SMDSAbs_All)
+ : myMesh(mesh), myIter(0)
+ {
+ if ( ncells )
+ {
+ myCellList.reserve( ncells );
+ if (type == SMDSAbs_All)
+ {
+ myCellList.assign( cells, cells + ncells );
+ }
+ else
+ {
+ for (int i = 0; i < ncells; i++)
+ {
+ int vtkId = cells[i];
+ int smdsId = myMesh->FromVtkToSmds( vtkId );
+ const SMDS_MeshElement* elem = myMesh->FindElement( smdsId );
+ if ( elem->GetType() == type )
+ {
+ myCellList.push_back(vtkId);
+ }
+ }
+ }
+ }
+ }
+
+ bool more()
+ {
+ return ( myIter < myCellList.size() );
+ }
+
+ const SMDS_MeshElement* next()
+ {
+ int vtkId = myCellList[ myIter++ ];
+ int smdsId = myMesh->FromVtkToSmds( vtkId );
+ const SMDS_MeshElement* elem = myMesh->FindElement(smdsId);
+ if (!elem)
+ {
+ MESSAGE("InverseIterator problem Null element");
+ throw SALOME_Exception("InverseIterator problem Null element");
+ }
+ return elem;
+ }
+ };