// Module : SMESH
// $Header$
-using namespace std;
#include "StdMeshers_NumberOfSegments.hxx"
+
#include "StdMeshers_Distribution.hxx"
-#include <Standard_ErrorHandler.hxx>
-#include <TCollection_AsciiString.hxx>
+#include "SMESHDS_SubMesh.hxx"
+#include "SMESH_Mesh.hxx"
+
+#include "CASCatch.hxx"
+
#include <ExprIntrp_GenExp.hxx>
-#include <Expr_NamedUnknown.hxx>
-#include <CASCatch_CatchSignals.hxx>
-#include <CASCatch_Failure.hxx>
-#include <CASCatch_ErrorHandler.hxx>
-#include <OSD.hxx>
#include <Expr_Array1OfNamedUnknown.hxx>
+#include <Expr_NamedUnknown.hxx>
#include <TColStd_Array1OfReal.hxx>
+#include <TCollection_AsciiString.hxx>
+#include <TopExp.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+using namespace std;
const double PRECISION = 1e-7;
throw SALOME_Exception(LOCALIZED("not a scale distribution"));
if (scaleFactor < PRECISION)
throw SALOME_Exception(LOCALIZED("scale factor must be positive"));
- if (fabs(scaleFactor - 1.0) < PRECISION)
- throw SALOME_Exception(LOCALIZED("scale factor must not be equal to 1"));
+ //if (fabs(scaleFactor - 1.0) < PRECISION)
+ // throw SALOME_Exception(LOCALIZED("scale factor must not be equal to 1"));
if (fabs(_scaleFactor - scaleFactor) > PRECISION)
{
double prev = -PRECISION;
bool isSame = table.size() == _table.size();
- OSD::SetSignal( true );
- CASCatch_CatchSignals aCatchSignals;
- aCatchSignals.Activate();
-
bool pos = false;
for (i=0; i < table.size()/2; i++) {
double par = table[i*2];
{
val = pow( 10.0, val );
}
- CASCatch_CATCH(CASCatch_Failure)
+ CASCatch_CATCH(Standard_Failure)
{
- aCatchSignals.Deactivate();
- Handle(CASCatch_Failure) aFail = CASCatch_Failure::Caught();
+ Handle(Standard_Failure) aFail = Standard_Failure::Caught();
throw SALOME_Exception( LOCALIZED( "invalid value"));
return;
}
}
prev = par;
}
- aCatchSignals.Deactivate();
if( !pos )
throw SALOME_Exception(LOCALIZED("value of table function is not positive"));
bool& non_neg, bool& non_zero,
bool& singulars, double& sing_point )
{
- OSD::SetSignal( true );
- CASCatch_CatchSignals aCatchSignals;
- aCatchSignals.Activate();
-
bool parsed_ok = true;
Handle( ExprIntrp_GenExp ) myExpr;
CASCatch_TRY
myExpr = ExprIntrp_GenExp::Create();
myExpr->Process( str.ToCString() );
}
- CASCatch_CATCH(CASCatch_Failure)
+ CASCatch_CATCH(Standard_Failure)
{
- aCatchSignals.Deactivate();
- Handle(CASCatch_Failure) aFail = CASCatch_Failure::Caught();
+ Handle(Standard_Failure) aFail = Standard_Failure::Caught();
parsed_ok = false;
}
- aCatchSignals.Deactivate();
syntax = false;
args = false;
{
return hyp.LoadFrom( load );
}
+
+//================================================================================
+/*!
+ * \brief Initialize number of segments by the mesh built on the geometry
+ * \param theMesh - the built mesh
+ * \param theShape - the geometry of interest
+ * \retval bool - true if parameter values have been successfully defined
+ */
+//================================================================================
+
+bool StdMeshers_NumberOfSegments::SetParametersByMesh(const SMESH_Mesh* theMesh,
+ const TopoDS_Shape& theShape)
+{
+ if ( !theMesh || theShape.IsNull() )
+ return false;
+
+ _numberOfSegments = 0;
+ _distrType = DT_Regular;
+
+ int nbEdges = 0;
+ TopTools_IndexedMapOfShape edgeMap;
+ TopExp::MapShapes( theShape, TopAbs_EDGE, edgeMap );
+ for ( int i = 1; i <= edgeMap.Extent(); ++i )
+ {
+ // get current segment length
+ SMESHDS_Mesh* aMeshDS = const_cast< SMESH_Mesh* >( theMesh )->GetMeshDS();
+ SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( edgeMap( i ));
+ if ( eSubMesh && eSubMesh->NbElements())
+ _numberOfSegments += eSubMesh->NbElements();
+
+ ++nbEdges;
+ }
+ if ( nbEdges )
+ _numberOfSegments /= nbEdges;
+
+ return nbEdges;
+}