mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-18 12:50:36 +05:00
0021336: EDF 1717 SMESH: New algorithm "body fitting" cartesian unstructured
+ static std::string CheckExpressionFunction( const std::string& expr, + const int convMode) + throw (SALOME_Exception);
This commit is contained in:
parent
e182c4b354
commit
7a8ade40f7
@ -31,6 +31,7 @@
|
|||||||
#include "StdMeshers_Distribution.hxx"
|
#include "StdMeshers_Distribution.hxx"
|
||||||
#include "SMESHDS_SubMesh.hxx"
|
#include "SMESHDS_SubMesh.hxx"
|
||||||
#include "SMESH_Mesh.hxx"
|
#include "SMESH_Mesh.hxx"
|
||||||
|
#include "SMESH_Comment.hxx"
|
||||||
|
|
||||||
#include <ExprIntrp_GenExp.hxx>
|
#include <ExprIntrp_GenExp.hxx>
|
||||||
#include <Expr_Array1OfNamedUnknown.hxx>
|
#include <Expr_Array1OfNamedUnknown.hxx>
|
||||||
@ -394,8 +395,27 @@ void StdMeshers_NumberOfSegments::SetExpressionFunction(const char* expr)
|
|||||||
_distrType = DT_ExprFunc;
|
_distrType = DT_ExprFunc;
|
||||||
//throw SALOME_Exception(LOCALIZED("not an expression function distribution"));
|
//throw SALOME_Exception(LOCALIZED("not an expression function distribution"));
|
||||||
|
|
||||||
|
string func = CheckExpressionFunction( expr, _convMode );
|
||||||
|
if( _func != func )
|
||||||
|
{
|
||||||
|
_func = func;
|
||||||
|
NotifySubMeshesHypothesisModification();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : CheckExpressionFunction
|
||||||
|
//purpose : Checks validity of the expression of the function f(t), e.g. "sin(t)".
|
||||||
|
// In case of validity returns a cleaned expression
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
std::string
|
||||||
|
StdMeshers_NumberOfSegments::CheckExpressionFunction( const std::string& expr,
|
||||||
|
const int convMode)
|
||||||
|
throw (SALOME_Exception)
|
||||||
|
{
|
||||||
// remove white spaces
|
// remove white spaces
|
||||||
TCollection_AsciiString str((Standard_CString)expr);
|
TCollection_AsciiString str((Standard_CString)expr.c_str());
|
||||||
str.RemoveAll(' ');
|
str.RemoveAll(' ');
|
||||||
str.RemoveAll('\t');
|
str.RemoveAll('\t');
|
||||||
str.RemoveAll('\r');
|
str.RemoveAll('\r');
|
||||||
@ -403,15 +423,15 @@ void StdMeshers_NumberOfSegments::SetExpressionFunction(const char* expr)
|
|||||||
|
|
||||||
bool syntax, args, non_neg, singulars, non_zero;
|
bool syntax, args, non_neg, singulars, non_zero;
|
||||||
double sing_point;
|
double sing_point;
|
||||||
bool res = process( str, _convMode, syntax, args, non_neg, non_zero, singulars, sing_point );
|
bool res = process( str, convMode, syntax, args, non_neg, non_zero, singulars, sing_point );
|
||||||
if( !res )
|
if( !res )
|
||||||
{
|
{
|
||||||
if( !syntax )
|
if( !syntax )
|
||||||
throw SALOME_Exception(LOCALIZED("invalid expression syntax"));
|
throw SALOME_Exception(SMESH_Comment("invalid expression syntax: ") << str );
|
||||||
if( !args )
|
if( !args )
|
||||||
throw SALOME_Exception(LOCALIZED("only 't' may be used as function argument"));
|
throw SALOME_Exception(LOCALIZED("only 't' may be used as function argument"));
|
||||||
if( !non_neg )
|
if( !non_neg )
|
||||||
throw SALOME_Exception(LOCALIZED("only non-negative function can be used as density"));
|
throw SALOME_Exception(LOCALIZED("only non-negative function can be used"));
|
||||||
if( singulars )
|
if( singulars )
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
@ -419,17 +439,10 @@ void StdMeshers_NumberOfSegments::SetExpressionFunction(const char* expr)
|
|||||||
throw SALOME_Exception( buf );
|
throw SALOME_Exception( buf );
|
||||||
}
|
}
|
||||||
if( !non_zero )
|
if( !non_zero )
|
||||||
throw SALOME_Exception(LOCALIZED("f(t)=0 cannot be used as density"));
|
throw SALOME_Exception(LOCALIZED("f(t)=0 cannot be used"));
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string func = expr;
|
return str.ToCString();
|
||||||
if( _func != func )
|
|
||||||
{
|
|
||||||
_func = func;
|
|
||||||
NotifySubMeshesHypothesisModification();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
@ -142,6 +142,15 @@ public:
|
|||||||
const char* GetExpressionFunction() const
|
const char* GetExpressionFunction() const
|
||||||
throw (SALOME_Exception);
|
throw (SALOME_Exception);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Checks validity of the expression of the function f(t), e.g. "sin(t)".
|
||||||
|
* In case of validity returns a cleaned expression
|
||||||
|
* \param convMode - 0 for "Exponent mode", 1 for "Cut negative mode"
|
||||||
|
*/
|
||||||
|
static std::string CheckExpressionFunction( const std::string& expr,
|
||||||
|
const int convMode)
|
||||||
|
throw (SALOME_Exception);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Set conversion mode. When it is 0, it means "exponent mode":
|
* \brief Set conversion mode. When it is 0, it means "exponent mode":
|
||||||
* the function of distribution of density is used as an exponent of 10, i,e, 10^f(t).
|
* the function of distribution of density is used as an exponent of 10, i,e, 10^f(t).
|
||||||
|
Loading…
Reference in New Issue
Block a user