Also fix pretty-breaks when single class

This commit is contained in:
Alessandro Pasotti 2025-09-22 16:02:13 +02:00
parent 25444cca9f
commit 2c7980b97d
2 changed files with 38 additions and 0 deletions

View File

@ -45,6 +45,13 @@ QList<double> QgsClassificationPrettyBreaks::calculateBreaks( double &minimum, d
if ( symmetricModeEnabled() )
makeBreaksSymmetric( breaks, symmetryPoint(), symmetryAstride() );
// Special case for single class
if ( minimum == maximum && breaks.isEmpty() )
{
// 1 is totally arbitrary but we need something
breaks << maximum + 1.0;
}
return breaks;
}

View File

@ -26,6 +26,8 @@ from qgis.core import (
QgsRendererRangeLabelFormat,
QgsVectorLayer,
QgsFillSymbol,
QgsClassificationFixedInterval,
QgsClassificationPrettyBreaks,
)
import unittest
from qgis.testing import start_app, QgisTestCase
@ -799,6 +801,35 @@ class TestQgsGraduatedSymbolRenderer(QgisTestCase):
"Equal interval classification not correct",
)
def testPrettyBreakSingleClass(self):
"""Test single class with pretty break, issue GH #63277"""
# Create a renderer
renderer = QgsGraduatedSymbolRenderer()
renderer.setClassificationMethod(QgsClassificationPrettyBreaks())
symbol = createMarkerSymbol()
renderer.setSourceSymbol(symbol.clone())
# Test retrieving data values from a layer
ml = createMemoryLayer((0, 0))
renderer.setClassAttribute("value")
# Equal interval calculations
renderer.updateClasses(ml, 5)
self.assertEqual(
dumpRangeBreaks(renderer.ranges()),
"(0.0000-1.0000,)",
"Equal interval classification not correct",
)
ml = createMemoryLayer((1, 1))
renderer.updateClasses(ml, 5)
self.assertEqual(
dumpRangeBreaks(renderer.ranges()),
"(1.0000-2.0000,)",
"Equal interval classification not correct",
)
if __name__ == "__main__":
unittest.main()