QGIS API Documentation  3.4.15-Madeira (e83d02e274)
qgsrasterrange.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsrasterrange.h
3  --------------------------------------
4  Date : Oct 9, 2012
5  Copyright : (C) 2012 by Radim Blazek
6  email : radim dot blazek at gmail dot com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef QGSRASTERRANGE_H
19 #define QGSRASTERRANGE_H
20 
21 #include "qgis_core.h"
22 #include "qgis_sip.h"
23 #include "qgis.h"
24 #include <QList>
25 
27 
28 typedef QList<QgsRasterRange> QgsRasterRangeList;
29 
35 class CORE_EXPORT QgsRasterRange
36 {
37  public:
38 
41  {
42  IncludeMinAndMax = 0,
46  };
47 
51  QgsRasterRange() = default;
52 
59  QgsRasterRange( double min, double max, BoundsType bounds = IncludeMinAndMax );
60 
65  double min() const { return mMin; }
66 
71  double max() const { return mMax; }
72 
80  BoundsType bounds() const { return mType; }
81 
86  double setMin( double min ) { return mMin = min; }
87 
92  double setMax( double max ) { return mMax = max; }
93 
101  void setBounds( BoundsType type ) { mType = type; }
102 
103  inline bool operator==( const QgsRasterRange &o ) const
104  {
105  return ( ( std::isnan( mMin ) && std::isnan( o.mMin ) ) || qgsDoubleNear( mMin, o.mMin ) )
106  && ( ( std::isnan( mMax ) && std::isnan( o.mMax ) ) || qgsDoubleNear( mMax, o.mMax ) )
107  && mType == o.mType;
108  }
109 
114  bool contains( double value ) const
115  {
116  return ( value > mMin
117  || ( !std::isnan( mMin ) && qgsDoubleNear( value, mMin ) && ( mType == IncludeMinAndMax || mType == IncludeMin ) )
118  || std::isnan( mMin ) )
119  &&
120  ( value < mMax
121  || ( !std::isnan( mMax ) && qgsDoubleNear( value, mMax ) && ( mType == IncludeMinAndMax || mType == IncludeMax ) )
122  || std::isnan( mMax ) );
123  }
124 
131  static bool contains( double value, const QgsRasterRangeList &rangeList )
132  {
133  for ( QgsRasterRange range : rangeList )
134  {
135  if ( range.contains( value ) )
136  {
137  return true;
138  }
139  }
140  return false;
141  }
142 
147  bool overlaps( const QgsRasterRange &other ) const;
148 
153  QString asText() const;
154 
155  private:
156  double mMin = std::numeric_limits<double>::quiet_NaN();
157  double mMax = std::numeric_limits<double>::quiet_NaN();
158  BoundsType mType = IncludeMinAndMax;
159 };
160 
161 #endif
162 
163 
bool operator==(const QgsRasterRange &o) const
Include the max value, but not the min value, e.g. min < value <= max.
BoundsType bounds() const
Returns the bounds type for the range, which specifies whether or not the min and max values themselv...
Include the min value, but not the max value, e.g. min <= value < max.
bool contains(double value) const
Returns true if this range contains the specified value.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition: qgis.h:278
BoundsType
Handling for min and max bounds.
Raster values range container.
static bool contains(double value, const QgsRasterRangeList &rangeList)
Tests if a value is within the list of ranges.
double min() const
Returns the minimum value for the range.
QList< QgsRasterRange > QgsRasterRangeList
double setMax(double max)
Sets the maximum value for the range.
void setBounds(BoundsType type)
Sets the bounds type for the range, which specifies whether or not the min and max values themselves ...
double max() const
Returns the maximum value for the range.
double setMin(double min)
Sets the minimum value for the range.
Don&#39;t include either the min or max value, e.g. min < value < max.