X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_AutomaticLength.cxx;h=1176ebe185ad5b6c3d2e49f49f2a26ee8402c1b5;hp=01e8398abdf8d0640834d55b255dafe69d31ad74;hb=5c933ecde0251d3c4894d0cdeab8dc67b6c4c3a5;hpb=236b583d315b14278bda28e118748016d0e4f709;ds=sidebyside diff --git a/src/StdMeshers/StdMeshers_AutomaticLength.cxx b/src/StdMeshers/StdMeshers_AutomaticLength.cxx index 01e8398ab..1176ebe18 100644 --- a/src/StdMeshers/StdMeshers_AutomaticLength.cxx +++ b/src/StdMeshers/StdMeshers_AutomaticLength.cxx @@ -54,6 +54,7 @@ StdMeshers_AutomaticLength::StdMeshers_AutomaticLength(int hypId, int studyId, _param_algo_dim = 1; // is used by SMESH_Regular_1D _mesh = 0; + _fineness = 0; } //============================================================================= @@ -66,6 +67,32 @@ StdMeshers_AutomaticLength::~StdMeshers_AutomaticLength() { } +//================================================================================ +/*! + * \brief Set Fineness + * \param theFineness - The Fineness value [0.0-1.0], + * 0 - coarse mesh + * 1 - fine mesh + * + * Raise if theFineness is out of range + * The "Initial Number of Elements on the Shortest Edge" (S0) + * is divided by (0.5 + 4.5 x theFineness) + */ +//================================================================================ + +void StdMeshers_AutomaticLength::SetFineness(double theFineness) + throw(SALOME_Exception) +{ + if ( theFineness < 0.0 || theFineness > 1.0 ) + throw SALOME_Exception(LOCALIZED("theFineness is out of range [0.0-1.0]")); + + if ( _fineness != theFineness ) + { + NotifySubMeshesHypothesisModification(); + _fineness = theFineness; + } +} + //================================================================================ /*! * \brief Return pointer to TopoDS_TShape @@ -181,7 +208,7 @@ double StdMeshers_AutomaticLength::GetLength(const SMESH_Mesh* theMesh, if ( tshape_length == _TShapeToLength.end() ) return 1; // it is a dgenerated edge - return tshape_length->second; + return tshape_length->second / (0.5 + 4.5 * _fineness); } //============================================================================= @@ -192,6 +219,7 @@ double StdMeshers_AutomaticLength::GetLength(const SMESH_Mesh* theMesh, ostream & StdMeshers_AutomaticLength::SaveTo(ostream & save) { + save << _fineness; return save; } @@ -203,6 +231,8 @@ ostream & StdMeshers_AutomaticLength::SaveTo(ostream & save) istream & StdMeshers_AutomaticLength::LoadFrom(istream & load) { + if ( ! ( load >> _fineness )) + load.clear(ios::badbit | load.rdstate()); return load; }