Salome HOME
Add “Grading” parameter to Adaptive 1D hypothesis
[modules/smesh.git] / src / StdMeshers / StdMeshers_Adaptive1D.cxx
index ecb30b1aa86f3821e5655b71fee58aa1abf382d9..55d5d00b48efb02fd29c996e0ca3910b5bc96499 100644 (file)
@@ -942,6 +942,7 @@ StdMeshers_Adaptive1D::StdMeshers_Adaptive1D(int         hypId,
   myMinSize       = 1e-10;
   myMaxSize       = 1e+10;
   myDeflection    = 1e-2;
+  myGrading       = 1e-2;
   myAlgo          = NULL;
   _name           = "Adaptive1D";
   _param_algo_dim = 1; // is used by SMESH_Regular_1D
@@ -968,6 +969,20 @@ void StdMeshers_Adaptive1D::SetDeflection(double value)
   }
 }
 //=======================================================================
+//function : SetGrading
+//purpose  :
+void StdMeshers_Adaptive1D::SetGrading(double value)
+  throw(SALOME_Exception)
+{
+  if (value <= std::numeric_limits<double>::min() )
+    throw SALOME_Exception("Grading must be greater that zero");
+  if (myGrading != value)
+  {
+    myGrading = value;
+    NotifySubMeshesHypothesisModification();
+  }
+}
+//=======================================================================
 //function : SetMinSize
 //purpose  : Sets minimal allowed segment length
 void StdMeshers_Adaptive1D::SetMinSize(double minSize)
@@ -1002,7 +1017,7 @@ void StdMeshers_Adaptive1D::SetMaxSize(double maxSize)
 //purpose  : Persistence
 ostream & StdMeshers_Adaptive1D::SaveTo(ostream & save)
 {
-  save << myMinSize << " " << myMaxSize << " " << myDeflection;
+  save << myMinSize << " " << myMaxSize << " " << myDeflection << " " << myGrading;
   save << " " << -1 << " " << -1; // preview addition of parameters
   return save;
 }
@@ -1012,7 +1027,7 @@ ostream & StdMeshers_Adaptive1D::SaveTo(ostream & save)
 istream & StdMeshers_Adaptive1D::LoadFrom(istream & load)
 {
   int dummyParam;
-  bool isOK = (load >> myMinSize >> myMaxSize >> myDeflection >> dummyParam >> dummyParam);
+  bool isOK = (load >> myMinSize >> myMaxSize >> myDeflection >> myGrading >> dummyParam >> dummyParam);
   if (!isOK)
     load.clear(ios::badbit | load.rdstate());
   return load;
@@ -1082,6 +1097,7 @@ bool StdMeshers_Adaptive1D::SetParametersByDefaults(const TDefaults&  dflts,
   myMinSize = dflts._elemLength / 10;
   myMaxSize = dflts._elemLength * 2;
   myDeflection = myMinSize / 7;
+  myGrading = 0.7;
   return true;
 }
 
@@ -1145,7 +1161,7 @@ bool AdaptiveAlgo::Compute(SMESH_Mesh &         theMesh,
 
   myMesh = &theMesh;
   SMESH_MesherHelper helper( theMesh );
-  const double grading = 0.7;
+  const double grading = myHyp->GetGrading();
 
   TopTools_IndexedMapOfShape edgeMap, faceMap;
   TopExp::MapShapes( theShape,                 TopAbs_EDGE, edgeMap );