X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_Distribution.cxx;h=3a0a7334ba579666a3e6b17f4f1d31f02098cabb;hp=5b0416db66581d1c6dc2a55682e2bcbef0bf806d;hb=52d825495306f72048c8754aa5c86c6a390f8262;hpb=06c42e9c9528a8d54fed01e266c949676fa0d929 diff --git a/src/StdMeshers/StdMeshers_Distribution.cxx b/src/StdMeshers/StdMeshers_Distribution.cxx index 5b0416db6..3a0a7334b 100644 --- a/src/StdMeshers/StdMeshers_Distribution.cxx +++ b/src/StdMeshers/StdMeshers_Distribution.cxx @@ -1,37 +1,50 @@ -// SMESH StdMeshers : implementaion of point distribution algorithm +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. // +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// SMESH StdMeshers : implementaion of point distribution algorithm // File : StdMeshers_Distribution.cxx // Author : Alexandre SOLOVYOV // Module : SMESH // $Header$ - +// #include "StdMeshers_Distribution.hxx" -#include "CASCatch.hxx" #include #include +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 +#define NO_CAS_CATCH +#endif + +#include + +#ifdef NO_CAS_CATCH +#include +#endif + +using namespace std; + +namespace StdMeshers { + Function::Function( const int conv ) : myConv( conv ) { @@ -44,14 +57,13 @@ Function::~Function() bool Function::value( const double, double& f ) const { bool ok = true; - if( myConv==0 ) - { - CASCatch_TRY - { - f = pow( 10, f ); - } - CASCatch_CATCH(Standard_Failure) - { + if (myConv == 0) { + try { +#ifdef NO_CAS_CATCH + OCC_CATCH_SIGNALS; +#endif + f = pow( 10., f ); + } catch(Standard_Failure) { Handle(Standard_Failure) aFail = Standard_Failure::Caught(); f = 0.0; ok = false; @@ -101,6 +113,12 @@ bool FunctionTable::value( const double t, double& f ) const if( !findBounds( t, i1, i2 ) ) return false; + if( i1==i2 ) { + f = myData[ 2*i1+1 ]; + Function::value( t, f ); + return true; + } + double x1 = myData[2*i1], y1 = myData[2*i1+1], x2 = myData[2*i2], y2 = myData[2*i2+1]; @@ -124,8 +142,10 @@ double FunctionTable::integral( const int i, const double d ) const { double f1,f2, res = 0.0; if( value( myData[2*i]+d, f1 ) ) - if(!value(myData[2*i], f2)) + if(!value(myData[2*i], f2)) { f2 = myData[2*i+1]; + Function::value( 1, f2 ); + } res = (f2+f1) * d / 2.0; return res; } @@ -145,7 +165,7 @@ double FunctionTable::integral( const double a, const double b ) const bool FunctionTable::findBounds( const double x, int& x_ind_1, int& x_ind_2 ) const { - int n = myData.size(); + int n = myData.size() / 2; if( n==0 || xProcess( ( Standard_CString )str ); - } - CASCatch_CATCH(Standard_Failure) - { + } catch(Standard_Failure) { Handle(Standard_Failure) aFail = Standard_Failure::Caught(); ok = false; } @@ -191,7 +211,7 @@ FunctionExpr::~FunctionExpr() { } -Standard_Boolean FunctionExpr::Value( Standard_Real T, Standard_Real& F ) +Standard_Boolean FunctionExpr::Value( const Standard_Real T, Standard_Real& F ) { double f; Standard_Boolean res = value( T, f ); @@ -206,10 +226,12 @@ bool FunctionExpr::value( const double t, double& f ) const ( ( TColStd_Array1OfReal& )myValues ).ChangeValue( 1 ) = t; bool ok = true; - CASCatch_TRY { + try { +#ifdef NO_CAS_CATCH + OCC_CATCH_SIGNALS; +#endif f = myExpr->Expression()->Evaluate( myVars, myValues ); - } - CASCatch_CATCH(Standard_Failure) { + } catch(Standard_Failure) { Handle(Standard_Failure) aFail = Standard_Failure::Caught(); f = 0.0; ok = false; @@ -222,14 +244,15 @@ bool FunctionExpr::value( const double t, double& f ) const double FunctionExpr::integral( const double a, const double b ) const { double res = 0.0; - CASCatch_TRY - { - math_GaussSingleIntegration _int( ( math_Function& )*this, a, b, 20 ); + try { +#ifdef NO_CAS_CATCH + OCC_CATCH_SIGNALS; +#endif + math_GaussSingleIntegration _int + ( *static_cast( const_cast (this) ), a, b, 20 ); if( _int.IsDone() ) res = _int.Value(); - } - CASCatch_CATCH(Standard_Failure) - { + } catch(Standard_Failure) { res = 0.0; MESSAGE( "Exception in integral calculating" ); } @@ -283,21 +306,21 @@ double dihotomySolve( Function& f, const double val, const double _start, const } bool buildDistribution( const TCollection_AsciiString& f, const int conv, const double start, const double end, - const int nbSeg, vector& data, const double eps ) + const int nbSeg, vector& data, const double eps ) { FunctionExpr F( f.ToCString(), conv ); return buildDistribution( F, start, end, nbSeg, data, eps ); } bool buildDistribution( const std::vector& f, const int conv, const double start, const double end, - const int nbSeg, vector& data, const double eps ) + const int nbSeg, vector& data, const double eps ) { FunctionTable F( f, conv ); return buildDistribution( F, start, end, nbSeg, data, eps ); } bool buildDistribution( const Function& func, const double start, const double end, const int nbSeg, - vector& data, const double eps ) + vector& data, const double eps ) { if( nbSeg<=0 ) return false; @@ -324,3 +347,4 @@ bool buildDistribution( const Function& func, const double start, const double e data[nbSeg] = end; return true; } +}