Salome HOME
Merge branch merge_1_2_d
[modules/smesh.git] / src / SMESH / SMESH_subMesh.cxx
index 711baf691739a8a014279b5228ebbfff735f381d..2e6799ed22b80a7348e8c5f73bfc0dde843632ae 100644 (file)
@@ -249,12 +249,60 @@ bool SMESH_subMesh::SubMeshesComputed() throw(SALOME_Exception)
        for (itsub = subMeshes.begin(); itsub != subMeshes.end(); itsub++)
        {
                SMESH_subMesh *sm = (*itsub).second;
+
+               const TopoDS_Shape & ss = sm->GetSubShape();
+               int type = ss.ShapeType();
 //       SCRUTE(sm->GetId());
 //       SCRUTE(sm->GetComputeState());
                bool computeOk = (sm->GetComputeState() == COMPUTE_OK);
                if (!computeOk)
                {
                        subMeshesComputed = false;
+
+                       switch (type)
+                         {
+                         case TopAbs_COMPOUND:
+                           {
+                             MESSAGE("The not computed sub mesh is a COMPOUND");
+                             break;
+                           }
+                         case TopAbs_COMPSOLID:
+                           {
+                             MESSAGE("The not computed sub mesh is a COMPSOLID");
+                             break;
+                           }
+                         case TopAbs_SHELL:
+                           {
+                             MESSAGE("The not computed sub mesh is a SHEL");
+                             break;
+                           }
+                         case TopAbs_WIRE:
+                           {
+                             MESSAGE("The not computed sub mesh is a WIRE");
+                             break;
+                           }
+                         case TopAbs_SOLID:
+                           {
+                             MESSAGE("The not computed sub mesh is a SOLID");
+                             break;
+                           }
+                         case TopAbs_FACE:
+                           {
+                             MESSAGE("The not computed sub mesh is a FACE");
+                             break;
+                           }
+                         case TopAbs_EDGE:
+                           {
+                             MESSAGE("The not computed sub mesh is a EDGE");
+                             break;
+                           }
+                         default:
+                           {
+                             MESSAGE("The not computed sub mesh is of unknown type");
+                             break;
+                           }
+                         }
+
                        SCRUTE(sm->GetId());
                        break;
                }
@@ -1321,27 +1369,23 @@ void SMESH_subMesh::RemoveSubMeshElementsAndNodes()
        _subMeshDS = _meshDS->MeshElements(_subShape);
        if (_subMeshDS!=NULL)
        {
-               const vector<int> & indElt = _subMeshDS->GetIDElements();
-               vector<int>::const_iterator ite=indElt.begin();
-               for (; ite!=indElt.end(); ite++)
+               SMDS_Iterator<const SMDS_MeshElement *> * ite=_subMeshDS->GetElements();
+               while(ite->more())
                {
-                       int eltId = *ite;
-                       SCRUTE(eltId);
-                       const SMDS_MeshElement * elt = _meshDS->FindElement(eltId);
+                       const SMDS_MeshElement * elt = ite->next();
                        _subMeshDS->RemoveElement(elt);
-                       _meshDS->RemoveElement(eltId);
+                       _meshDS->RemoveElement(elt);
                }
-
-               const vector<int> & indNodes = _subMeshDS->GetIDNodes();
-               vector<int>::const_iterator itn=indNodes.begin();
-               for (; itn!=indNodes.end(); itn++)
+               delete ite;
+               
+               SMDS_Iterator<const SMDS_MeshNode *> * itn=_subMeshDS->GetNodes();
+               while(itn->more())
                {
-                       int nodeId = *itn;
-                       SCRUTE(nodeId);
-                       const SMDS_MeshNode * node = _meshDS->FindNode(nodeId);
+                       const SMDS_MeshNode * node = itn->next();
                        _subMeshDS->RemoveNode(node);
-                       _meshDS->RemoveNode(nodeId);
+                       _meshDS->RemoveNode(node);
                }
+               delete itn;
        }
 }