- NCollection_List<const SMDS_MeshElement*>::Iterator myIterator;
- SMDSAbs_ElementType myType;
- public:
- SMDS_MeshNode_MyInvIterator(const NCollection_List<const SMDS_MeshElement*>& s,
- SMDSAbs_ElementType type):
- myIterator(s), myType(type)
- {}
+private:
+ SMDS_Mesh* myMesh;
+ vtkIdType* myCells;
+ int myNcells;
+ SMDSAbs_ElementType myType;
+ int iter;
+ vector<vtkIdType> cellList;
+
+public:
+ SMDS_MeshNode_MyInvIterator(SMDS_Mesh *mesh, vtkIdType* cells, int ncells, SMDSAbs_ElementType type) :
+ myMesh(mesh), myCells(cells), myNcells(ncells), myType(type), iter(0)
+ {
+ cellList.reserve( ncells );
+ if (type == SMDSAbs_All)
+ cellList.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)
+ {
+ cellList.push_back(vtkId);
+ }
+ }
+ myCells = cellList.empty() ? 0 : &cellList[0];
+ myNcells = cellList.size();
+ }