QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
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
26class QgsRasterRange;
27
28typedef QList<QgsRasterRange> QgsRasterRangeList;
29
35class 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 ( const 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
Raster values range container.
double setMin(double min)
Sets the minimum value for the range.
BoundsType
Handling for min and max bounds.
@ IncludeMin
Include the min value, but not the max value, e.g. min <= value < max.
@ Exclusive
Don't include either the min or max value, e.g. min < value < max.
@ IncludeMax
Include the max value, but not the min value, e.g. min < value <= max.
bool operator==(const QgsRasterRange &o) const
double min() const
Returns the minimum 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 ...
bool contains(double value) const
Returns true if this range contains the specified value.
double setMax(double max)
Sets the maximum value for the range.
double max() const
Returns the maximum value for the range.
QgsRasterRange()=default
Default constructor, both min and max value for the range will be set to NaN.
BoundsType bounds() const
Returns the bounds type for the range, which specifies whether or not the min and max values themselv...
static bool contains(double value, const QgsRasterRangeList &rangeList)
Tests if a value is within the list of ranges.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition: qgis.h:5207
QList< QgsRasterRange > QgsRasterRangeList