Skip to content

Commit a69274a

Browse files
committedJun 13, 2018
Add contains check to QgsRasterRange
1 parent d435a7a commit a69274a

File tree

4 files changed

+73
-4
lines changed

4 files changed

+73
-4
lines changed
 

‎python/core/auto_generated/raster/qgsrasterrange.sip.in

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,13 @@ in the range.
9797

9898
bool operator==( QgsRasterRange o ) const;
9999

100+
bool contains( double value ) const;
101+
%Docstring
102+
Returns true if this range contains the specified ``value``.
103+
104+
.. versionadded:: 3.2
105+
%End
106+
100107
static bool contains( double value, const QgsRasterRangeList &rangeList );
101108
%Docstring
102109
Tests if a ``value`` is within the list of ranges

‎src/core/raster/qgsrasterrange.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,22 @@ QgsRasterRange::QgsRasterRange( double min, double max, BoundsType bounds )
2424
{
2525
}
2626

27+
bool QgsRasterRange::contains( double value ) const
28+
{
29+
return ( value > mMin
30+
|| ( !std::isnan( mMin ) && qgsDoubleNear( value, mMin ) && ( mType == IncludeMinAndMax || mType == IncludeMin ) )
31+
|| std::isnan( mMin ) )
32+
&&
33+
( value < mMax
34+
|| ( !std::isnan( mMax ) && qgsDoubleNear( value, mMax ) && ( mType == IncludeMinAndMax || mType == IncludeMax ) )
35+
|| std::isnan( mMax ) );
36+
}
37+
2738
bool QgsRasterRange::contains( double value, const QgsRasterRangeList &rangeList )
2839
{
29-
Q_FOREACH ( QgsRasterRange range, rangeList )
40+
for ( QgsRasterRange range : rangeList )
3041
{
31-
if ( ( value >= range.mMin && value <= range.mMax ) ||
32-
qgsDoubleNear( value, range.mMin ) ||
33-
qgsDoubleNear( value, range.mMax ) )
42+
if ( range.contains( value ) )
3443
{
3544
return true;
3645
}

‎src/core/raster/qgsrasterrange.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ class CORE_EXPORT QgsRasterRange
107107
&& mType == o.mType;
108108
}
109109

110+
/**
111+
* Returns true if this range contains the specified \a value.
112+
* \since QGIS 3.2
113+
*/
114+
bool contains( double value ) const;
115+
110116
/**
111117
* \brief Tests if a \a value is within the list of ranges
112118
* \param value value

‎tests/src/python/test_qgsrasterrange.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,53 @@ def testEquality(self):
6262
range2.setMax(5)
6363
self.assertEqual(range, range2)
6464

65+
def testContains(self):
66+
range = QgsRasterRange(1, 5)
67+
self.assertTrue(range.contains(1))
68+
self.assertTrue(range.contains(5))
69+
self.assertTrue(range.contains(4))
70+
self.assertTrue(range.contains(1.00001))
71+
self.assertTrue(range.contains(4.99999))
72+
self.assertFalse(range.contains(0.99999))
73+
self.assertFalse(range.contains(5.00001))
74+
75+
# with nan min/maxs
76+
range = QgsRasterRange()
77+
self.assertTrue(range.contains(1))
78+
self.assertTrue(range.contains(-909999999))
79+
self.assertTrue(range.contains(999999999))
80+
range.setMin(5)
81+
self.assertFalse(range.contains(0))
82+
self.assertTrue(range.contains(5))
83+
self.assertTrue(range.contains(10000000))
84+
85+
range = QgsRasterRange()
86+
range.setMax(5)
87+
self.assertFalse(range.contains(6))
88+
self.assertTrue(range.contains(5))
89+
self.assertTrue(range.contains(-99999))
90+
91+
range = QgsRasterRange(1, 5, QgsRasterRange.IncludeMax)
92+
self.assertFalse(range.contains(0))
93+
self.assertFalse(range.contains(1))
94+
self.assertTrue(range.contains(2))
95+
self.assertTrue(range.contains(5))
96+
self.assertFalse(range.contains(6))
97+
98+
range = QgsRasterRange(1, 5, QgsRasterRange.IncludeMin)
99+
self.assertFalse(range.contains(0))
100+
self.assertTrue(range.contains(1))
101+
self.assertTrue(range.contains(2))
102+
self.assertFalse(range.contains(5))
103+
self.assertFalse(range.contains(6))
104+
105+
range = QgsRasterRange(1, 5, QgsRasterRange.Exclusive)
106+
self.assertFalse(range.contains(0))
107+
self.assertFalse(range.contains(1))
108+
self.assertTrue(range.contains(2))
109+
self.assertFalse(range.contains(5))
110+
self.assertFalse(range.contains(6))
111+
65112

66113
if __name__ == '__main__':
67114
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.