mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-11-14 17:48:34 +05:00
0020948]: EDF 1468 SMESH: Histogram of the quality controls
Add arg to limit range of values void GetHistogram(int nbIntervals, std::vector<int>& nbEvents, std::vector<double>& funValues, const std::vector<int>& elements, + const double* minmax=0);
This commit is contained in:
parent
16a840f9c1
commit
938bc72f7a
@ -284,13 +284,15 @@ double NumericalFunctor::GetValue( long theId )
|
||||
* \param nbEvents - number of mesh elements having values within i-th interval
|
||||
* \param funValues - boundaries of intervals
|
||||
* \param elements - elements to check vulue of; empty list means "of all"
|
||||
* \param minmax - boundaries of diapason of values to divide into intervals
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
void NumericalFunctor::GetHistogram(int nbIntervals,
|
||||
std::vector<int>& nbEvents,
|
||||
std::vector<double>& funValues,
|
||||
const vector<int>& elements)
|
||||
const vector<int>& elements,
|
||||
const double* minmax)
|
||||
{
|
||||
if ( nbIntervals < 1 ||
|
||||
!myMesh ||
|
||||
@ -314,9 +316,17 @@ void NumericalFunctor::GetHistogram(int nbIntervals,
|
||||
values.insert( GetValue( *id ));
|
||||
}
|
||||
|
||||
if ( minmax )
|
||||
{
|
||||
funValues[0] = minmax[0];
|
||||
funValues[nbIntervals] = minmax[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
funValues[0] = *values.begin();
|
||||
funValues[nbIntervals] = *values.rbegin();
|
||||
}
|
||||
// case nbIntervals == 1
|
||||
funValues[0] = *values.begin();
|
||||
funValues[nbIntervals] = *values.rbegin();
|
||||
if ( nbIntervals == 1 )
|
||||
{
|
||||
nbEvents[0] = values.size();
|
||||
@ -334,15 +344,21 @@ void NumericalFunctor::GetHistogram(int nbIntervals,
|
||||
std::multiset< double >::iterator min = values.begin(), max;
|
||||
for ( int i = 0; i < nbIntervals; ++i )
|
||||
{
|
||||
// find end value of i-th interval
|
||||
double r = (i+1) / double( nbIntervals );
|
||||
funValues[i+1] = funValues.front() * (1-r) + funValues.back() * r;
|
||||
|
||||
// count values in the i-th interval if there are any
|
||||
if ( min != values.end() && *min <= funValues[i+1] )
|
||||
{
|
||||
max = values.upper_bound( funValues[i+1] ); // greater than funValues[i+1], or end()
|
||||
// find the first value out of the interval
|
||||
max = values.upper_bound( funValues[i+1] ); // max is greater than funValues[i+1], or end()
|
||||
nbEvents[i] = std::distance( min, max );
|
||||
min = max;
|
||||
}
|
||||
}
|
||||
// add values larger than minmax[1]
|
||||
nbEvents.back() += std::distance( min, values.end() );
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
|
@ -127,10 +127,11 @@ namespace SMESH{
|
||||
virtual void SetMesh( const SMDS_Mesh* theMesh );
|
||||
virtual double GetValue( long theElementId );
|
||||
virtual double GetValue(const TSequenceOfXYZ& thePoints) { return -1.0;};
|
||||
void GetHistogram(int nbIntervals,
|
||||
std::vector<int>& nbEvents,
|
||||
std::vector<double>& funValues,
|
||||
const std::vector<int>& elements);
|
||||
void GetHistogram(int nbIntervals,
|
||||
std::vector<int>& nbEvents,
|
||||
std::vector<double>& funValues,
|
||||
const std::vector<int>& elements,
|
||||
const double* minmax=0);
|
||||
virtual SMDSAbs_ElementType GetType() const = 0;
|
||||
virtual double GetBadRate( double Value, int nbNodes ) const = 0;
|
||||
long GetPrecision() const;
|
||||
|
Loading…
Reference in New Issue
Block a user