Skip to content

Commit 0f0a7dc

Browse files
committed
Add QgsRasterRange::asText for a text representation of a range
1 parent f934c5c commit 0f0a7dc

File tree

4 files changed

+41
-0
lines changed

4 files changed

+41
-0
lines changed

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

+7
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,13 @@ Tests if a ``value`` is within the list of ranges
118118
%Docstring
119119
Returns true if this range overlaps another range.
120120

121+
.. versionadded:: 3.2
122+
%End
123+
124+
QString asText() const;
125+
%Docstring
126+
Returns a text representation of the range.
127+
121128
.. versionadded:: 3.2
122129
%End
123130

src/core/raster/qgsrasterrange.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,16 @@ bool QgsRasterRange::overlaps( const QgsRasterRange &other ) const
6565
return false;
6666
}
6767

68+
QString QgsRasterRange::asText() const
69+
{
70+
const QString minText = std::isnan( mMin ) ? QStringLiteral( "-%1" ).arg( QChar( 0x221e ) ) : QString::number( mMin );
71+
const QString maxText = std::isnan( mMax ) ? QChar( 0x221e ) : QString::number( mMax );
72+
const QString operator1 = ( mType == IncludeMinAndMax || mType == IncludeMin ) ? QChar( 0x2264 ) : '<';
73+
const QString operator2 = ( mType == IncludeMinAndMax || mType == IncludeMax ) ? QChar( 0x2264 ) : '<';
74+
75+
return QStringLiteral( "%1 %2 x %3 %4" ).arg( minText, operator1, operator2, maxText );
76+
}
77+
6878

6979

7080

src/core/raster/qgsrasterrange.h

+6
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,12 @@ class CORE_EXPORT QgsRasterRange
146146
*/
147147
bool overlaps( const QgsRasterRange &other ) const;
148148

149+
/**
150+
* Returns a text representation of the range.
151+
* \since QGIS 3.2
152+
*/
153+
QString asText() const;
154+
149155
private:
150156
double mMin = std::numeric_limits<double>::quiet_NaN();
151157
double mMax = std::numeric_limits<double>::quiet_NaN();

tests/src/python/test_qgsrasterrange.py

+18
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,24 @@ def testOverlaps(self):
320320
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMin)))
321321
self.assertFalse(range.overlaps(QgsRasterRange(10, 11, QgsRasterRange.IncludeMax)))
322322

323+
def testAsText(self):
324+
self.assertEqual(QgsRasterRange(0, 10, QgsRasterRange.IncludeMinAndMax).asText(), '0 ≤ x ≤ 10')
325+
self.assertEqual(QgsRasterRange(-1, float('NaN')).asText(), '-1 ≤ x ≤ ∞')
326+
self.assertEqual(QgsRasterRange(float('NaN'), 5).asText(), '-∞ ≤ x ≤ 5')
327+
self.assertEqual(QgsRasterRange(float('NaN'), float('NaN')).asText(), '-∞ ≤ x ≤ ∞')
328+
self.assertEqual(QgsRasterRange(0, 10, QgsRasterRange.IncludeMin).asText(), '0 ≤ x < 10')
329+
self.assertEqual(QgsRasterRange(-1, float('NaN'), QgsRasterRange.IncludeMin).asText(), '-1 ≤ x < ∞')
330+
self.assertEqual(QgsRasterRange(float('NaN'), 5, QgsRasterRange.IncludeMin).asText(), '-∞ ≤ x < 5')
331+
self.assertEqual(QgsRasterRange(float('NaN'), float('NaN'), QgsRasterRange.IncludeMin).asText(), '-∞ ≤ x < ∞')
332+
self.assertEqual(QgsRasterRange(0, 10, QgsRasterRange.IncludeMax).asText(), '0 < x ≤ 10')
333+
self.assertEqual(QgsRasterRange(-1, float('NaN'), QgsRasterRange.IncludeMax).asText(), '-1 < x ≤ ∞')
334+
self.assertEqual(QgsRasterRange(float('NaN'), 5, QgsRasterRange.IncludeMax).asText(), '-∞ < x ≤ 5')
335+
self.assertEqual(QgsRasterRange(float('NaN'), float('NaN'), QgsRasterRange.IncludeMax).asText(), '-∞ < x ≤ ∞')
336+
self.assertEqual(QgsRasterRange(0, 10, QgsRasterRange.Exclusive).asText(), '0 < x < 10')
337+
self.assertEqual(QgsRasterRange(-1, float('NaN'), QgsRasterRange.Exclusive).asText(), '-1 < x < ∞')
338+
self.assertEqual(QgsRasterRange(float('NaN'), 5, QgsRasterRange.Exclusive).asText(), '-∞ < x < 5')
339+
self.assertEqual(QgsRasterRange(float('NaN'), float('NaN'), QgsRasterRange.Exclusive).asText(), '-∞ < x < ∞')
340+
323341

324342
if __name__ == '__main__':
325343
unittest.main()

0 commit comments

Comments
 (0)