_param_algo_dim = 1; // is used by SMESH_Regular_1D
_mesh = 0;
+ _fineness = 0;
}
//=============================================================================
{
}
+//================================================================================
+/*!
+ * \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
for ( int i = 1; i <= edgeMap.Extent(); ++i )
{
TopoDS_Edge edge = TopoDS::Edge( edgeMap(i) );
+ //if ( BRep_Tool::Degenerated( edge )) continue;
+
Standard_Real L = SMESH_Algo::EdgeLength( edge );
- if ( L > Lmax )
- Lmax = L;
- if ( L < Lmin )
- Lmin = L;
+ if ( L < DBL_MIN ) continue;
+
+ if ( L > Lmax ) Lmax = L;
+ if ( L < Lmin ) Lmin = L;
+
// remember i-th edge length
- theTShapeToLengthMap.insert( theTShapeToLengthMap.end(),
- make_pair( getTShape( edge ), L ));
+ theTShapeToLengthMap.insert( make_pair( getTShape( edge ), L ));
}
// Compute S0
map<const TopoDS_TShape*, double>::iterator tshape_length =
_TShapeToLength.find( getTShape( anEdge ));
- ASSERT( tshape_length != _TShapeToLength.end() );
- return tshape_length->second;
+
+ if ( tshape_length == _TShapeToLength.end() )
+ return 1; // it is a dgenerated edge
+
+ return tshape_length->second / (0.5 + 4.5 * _fineness);
}
//=============================================================================
ostream & StdMeshers_AutomaticLength::SaveTo(ostream & save)
{
+ save << _fineness;
return save;
}
istream & StdMeshers_AutomaticLength::LoadFrom(istream & load)
{
+ if ( ! ( load >> _fineness ))
+ load.clear(ios::badbit | load.rdstate());
return load;
}