Salome HOME
Protection before invalid hypothesises for "Evaluate" operation.
authorskl <skl@opencascade.com>
Thu, 6 Aug 2009 12:44:45 +0000 (12:44 +0000)
committerskl <skl@opencascade.com>
Thu, 6 Aug 2009 12:44:45 +0000 (12:44 +0000)
src/StdMeshers/StdMeshers_Hexa_3D.cxx
src/StdMeshers/StdMeshers_Prism_3D.cxx

index f0738bb8921c82a6f283584cd59ddf93ff62dfb2..5afb4cc43bf9de4f90a644e41368fe9cdd516b2d 100644 (file)
@@ -772,6 +772,15 @@ bool StdMeshers_Hexa_3D::Evaluate(SMESH_Mesh & aMesh,
     //TopoDS_Shape aFace = meshFaces[i]->GetSubShape();
     TopoDS_Shape aFace = aFaces.Value(i+1);
     SMESH_Algo *algo = _gen->GetAlgo(aMesh, aFace);
+    if( !algo ) {
+      std::vector<int> aResVec(17);
+      for(int i=0; i<17; i++) aResVec[i] = 0;
+      SMESH_subMesh * sm = aMesh.GetSubMesh(aShape);
+      aResMap.insert(std::make_pair(sm,aResVec));
+      SMESH_ComputeErrorPtr& smError = sm->GetComputeError();
+      smError.reset( new SMESH_ComputeError(COMPERR_ALGO_FAILED,"Submesh can not be evaluated",this));
+      return false;
+    }
     string algoName = algo->GetName();
     bool isAllQuad = false;
     if (algoName == "Quadrangle_2D") {
index 41657596df51d63b4e4263b8db56c8c340f30b66..f53624f82b5b823776f6e3e92c82778580a726d7 100644 (file)
@@ -388,6 +388,11 @@ bool StdMeshers_Prism_3D::Evaluate(SMESH_Mesh& theMesh,
     SMESH_subMesh *aSubMesh = theMesh.GetSubMesh(exp.Current());
     meshFaces.push_back(aSubMesh);
     MapShapeNbElemsItr anIt = aResMap.find(meshFaces[i-1]);
+    if( anIt==aResMap.end() ) {
+      SMESH_ComputeErrorPtr& smError = aSubMesh->GetComputeError();
+      smError.reset( new SMESH_ComputeError(COMPERR_ALGO_FAILED,"Submesh can not be evaluated",this));
+      return false;
+    }
     std::vector<int> aVec = (*anIt).second;
     int nbtri = Max(aVec[3],aVec[4]);
     int nbqua = Max(aVec[5],aVec[6]);