23386: EDF 13811 - Crash SALOME during compute

reason: empty NbSegments in FixedPoints1D hypothesis
This commit is contained in:
eap 2016-11-11 16:39:46 +03:00
parent 1c1bbf6798
commit 6ea484ee5f
3 changed files with 10 additions and 42 deletions

View File

@ -27,16 +27,6 @@
#include "SMESH_Algo.hxx"
#include "SMESH_Mesh.hxx"
//#include <BRep_Tool.hxx>
//#include <GCPnts_AbscissaPoint.hxx>
//#include <GeomAdaptor_Curve.hxx>
//#include <Geom_Curve.hxx>
//#include <TopExp.hxx>
//#include <TopLoc_Location.hxx>
//#include <TopTools_IndexedMapOfShape.hxx>
//#include <TopoDS.hxx>
//#include <TopoDS_Edge.hxx>
using namespace std;
//=============================================================================
@ -50,14 +40,14 @@ StdMeshers_FixedPoints1D::StdMeshers_FixedPoints1D(int hypId, int studyId,
:SMESH_Hypothesis(hypId, studyId, gen)
{
_name = "FixedPoints1D";
_param_algo_dim = 1;
_param_algo_dim = 1;
_nbsegs.reserve( 1 );
_nbsegs.push_back( 1 );
}
//=============================================================================
/*!
*
*
*/
//=============================================================================
@ -72,7 +62,7 @@ StdMeshers_FixedPoints1D::~StdMeshers_FixedPoints1D()
//=============================================================================
void StdMeshers_FixedPoints1D::SetPoints(std::vector<double>& listParams)
throw(SALOME_Exception)
throw(SALOME_Exception)
{
_params = listParams;
NotifySubMeshesHypothesisModification();
@ -85,7 +75,7 @@ void StdMeshers_FixedPoints1D::SetPoints(std::vector<double>& listParams)
//=============================================================================
void StdMeshers_FixedPoints1D::SetNbSegments(std::vector<int>& listNbSeg)
throw(SALOME_Exception)
throw(SALOME_Exception)
{
_nbsegs = listNbSeg;
NotifySubMeshesHypothesisModification();
@ -140,7 +130,7 @@ ostream & StdMeshers_FixedPoints1D::SaveTo(ostream & save)
//=============================================================================
/*!
*
*
*/
//=============================================================================
@ -185,28 +175,6 @@ istream & StdMeshers_FixedPoints1D::LoadFrom(istream & load)
return load;
}
//=============================================================================
/*!
*
*/
//=============================================================================
ostream & operator <<(ostream & save, StdMeshers_FixedPoints1D & hyp)
{
return hyp.SaveTo( save );
}
//=============================================================================
/*!
*
*/
//=============================================================================
istream & operator >>(istream & load, StdMeshers_FixedPoints1D & hyp)
{
return hyp.LoadFrom( load );
}
//================================================================================
/*!
* \brief Initialize start and end length by the mesh built on the geometry

View File

@ -61,14 +61,12 @@ public:
virtual std::ostream & SaveTo(std::ostream & save);
virtual std::istream & LoadFrom(std::istream & load);
friend std::ostream& operator << (std::ostream & save, StdMeshers_FixedPoints1D & hyp);
friend std::istream& operator >> (std::istream & load, StdMeshers_FixedPoints1D & hyp);
/*!
* \brief Initialize start and end length 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
* \param theMesh - the built mesh
* \param theShape - the geometry of interest
* \retval bool - true if parameter values have been successfully defined
*/
virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);

View File

@ -994,6 +994,8 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh & theMesh,
std::vector<int> nbsegs = _fpHyp->GetNbSegments();
if ( theReverse )
std::reverse( nbsegs.begin(), nbsegs.end() );
if ( nbsegs.empty() )
nbsegs.push_back( 1 );
// sort normalized params, taking into account theReverse
TColStd_SequenceOfReal Params;