Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Further expression simplification
  • Loading branch information
nyalldawson committed Sep 10, 2020
1 parent 14b1fde commit 657004d
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
6 changes: 5 additions & 1 deletion src/core/vectortile/qgsmapboxglstyleconverter.cpp
Expand Up @@ -1368,7 +1368,7 @@ QgsProperty QgsMapBoxGlStyleConverter::parseInterpolateOpacityByZoom( const QVar
.arg( interpolateExpression( stops.value( 0 ).toList().value( 0 ).toInt(),
stops.last().toList().value( 0 ).toInt(),
stops.value( 0 ).toList().value( 1 ).toDouble() * maxOpacity,
stops.value( 0 ).toList().value( 1 ).toDouble() * maxOpacity, base ) );
stops.last().toList().value( 1 ).toDouble() * maxOpacity, base ) );
}
}
else
Expand Down Expand Up @@ -1663,6 +1663,10 @@ void QgsMapBoxGlStyleConverter::colorAsHslaComponents( const QColor &color, int

QString QgsMapBoxGlStyleConverter::interpolateExpression( int zoomMin, int zoomMax, double valueMin, double valueMax, double base, double multiplier )
{
// special case!
if ( qgsDoubleNear( valueMin, valueMax ) )
return QString::number( valueMin * multiplier );

const QString expression = QStringLiteral( "scale_exp(@zoom_level,%1,%2,%3,%4,%5)" ).arg( zoomMin )
.arg( zoomMax )
.arg( valueMin )
Expand Down
15 changes: 13 additions & 2 deletions tests/src/python/test_qgsmapboxglconverter.py
Expand Up @@ -41,6 +41,12 @@ def testInterpolateExpression(self):
self.assertEqual(QgsMapBoxGlStyleConverter.interpolateExpression(5, 13, 27, 29, 1.5),
'scale_exp(@zoom_level,5,13,27,29,1.5)')

# same values, return nice and simple expression!
self.assertEqual(QgsMapBoxGlStyleConverter.interpolateExpression(5, 13, 27, 27, 1.5),
'27')
self.assertEqual(QgsMapBoxGlStyleConverter.interpolateExpression(5, 13, 27, 27, 1.5, 2),
'54')

def testColorAsHslaComponents(self):
self.assertEqual(QgsMapBoxGlStyleConverter.colorAsHslaComponents(QColor.fromHsl(30, 50, 70)), (30, 19, 27, 255))

Expand All @@ -65,7 +71,7 @@ def testParseInterpolateColorByZoom(self):
},
conversion_context)
self.assertEqual(props.expressionString(),
'CASE WHEN @zoom_level >= 0 AND @zoom_level < 150 THEN color_hsla(scale_exp(@zoom_level,0,150,59,352,2), scale_exp(@zoom_level,0,150,81,59,2), scale_exp(@zoom_level,0,150,70,44,2), scale_exp(@zoom_level,0,150,255,255,2)) WHEN @zoom_level >= 150 AND @zoom_level < 250 THEN color_hsla(scale_exp(@zoom_level,150,250,352,0,2), scale_exp(@zoom_level,150,250,59,72,2), scale_exp(@zoom_level,150,250,44,63,2), scale_exp(@zoom_level,150,250,255,255,2)) WHEN @zoom_level >= 250 THEN color_hsla(0, 72, 63, 255) ELSE color_hsla(0, 72, 63, 255) END')
'CASE WHEN @zoom_level >= 0 AND @zoom_level < 150 THEN color_hsla(scale_exp(@zoom_level,0,150,59,352,2), scale_exp(@zoom_level,0,150,81,59,2), scale_exp(@zoom_level,0,150,70,44,2), 255) WHEN @zoom_level >= 150 AND @zoom_level < 250 THEN color_hsla(scale_exp(@zoom_level,150,250,352,0,2), scale_exp(@zoom_level,150,250,59,72,2), scale_exp(@zoom_level,150,250,44,63,2), 255) WHEN @zoom_level >= 250 THEN color_hsla(0, 72, 63, 255) ELSE color_hsla(0, 72, 63, 255) END')
self.assertEqual(default_col.name(), '#f1f075')

def testParseStops(self):
Expand Down Expand Up @@ -134,7 +140,12 @@ def testInterpolateOpacityByZoom(self):
'stops': [[0, 0.1],
[150, 0.15]]
}, 255).expressionString(),
"set_color_part(@symbol_color, 'alpha', scale_exp(@zoom_level,0,150,25.5,25.5,2))")
"set_color_part(@symbol_color, 'alpha', scale_exp(@zoom_level,0,150,25.5,38.25,2))")
self.assertEqual(QgsMapBoxGlStyleConverter.parseInterpolateOpacityByZoom({'base': 2,
'stops': [[0, 0.1],
[150, 0.1]]
}, 255).expressionString(),
"set_color_part(@symbol_color, 'alpha', 25.5)")

def testInterpolateListByZoom(self):
conversion_context = QgsMapBoxGlStyleConversionContext()
Expand Down

0 comments on commit 657004d

Please sign in to comment.