Skip to content

Commit

Permalink
Fix symbol sizes in Meters at Scale cannot be negative
Browse files Browse the repository at this point in the history
Fixes #45298
  • Loading branch information
nyalldawson committed Sep 29, 2021
1 parent 6826531 commit 360351a
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/core/qgsrendercontext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -572,7 +572,9 @@ double QgsRenderContext::convertMetersToMapUnits( double meters ) const
{
pointCenter = mCoordTransform.transform( pointCenter );
}
return mDistanceArea.measureLineProjected( pointCenter, meters );

const int multiplier = meters < 0 ? -1 : 1;
return multiplier * mDistanceArea.measureLineProjected( pointCenter, std::fabs( meters ) );
}
case QgsUnitTypes::DistanceKilometers:
case QgsUnitTypes::DistanceFeet:
Expand Down
5 changes: 5 additions & 0 deletions tests/src/python/test_qgsrendercontext.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,9 +253,14 @@ def testRenderMetersInMapUnits(self):
r.setDistanceArea(da_wsg84)
result_test_painterunits = r.convertToPainterUnits(meters_test, QgsUnitTypes.RenderMetersInMapUnits, c)
self.assertAlmostEqual(result_test_painterunits, 60.0203759, 1)
result_test_painterunits = r.convertToPainterUnits(-meters_test, QgsUnitTypes.RenderMetersInMapUnits, c)
self.assertAlmostEqual(result_test_painterunits, -60.0203759, 1)
result_test_mapunits = r.convertToMapUnits(meters_test, QgsUnitTypes.RenderMetersInMapUnits, c)
self.assertEqual(QgsDistanceArea.formatDistance(result_test_mapunits, 7, QgsUnitTypes.DistanceDegrees, True),
QgsDistanceArea.formatDistance(meters_test_mapunits, 7, QgsUnitTypes.DistanceDegrees, True))
result_test_mapunits = r.convertToMapUnits(-meters_test, QgsUnitTypes.RenderMetersInMapUnits, c)
self.assertEqual(QgsDistanceArea.formatDistance(result_test_mapunits, 7, QgsUnitTypes.DistanceDegrees, True),
QgsDistanceArea.formatDistance(-meters_test_mapunits, 7, QgsUnitTypes.DistanceDegrees, True))
result_test_meters = r.convertFromMapUnits(meters_test_mapunits, QgsUnitTypes.RenderMetersInMapUnits)
self.assertEqual(QgsDistanceArea.formatDistance(result_test_meters, 1, QgsUnitTypes.DistanceMeters, True),
QgsDistanceArea.formatDistance(meters_test, 1, QgsUnitTypes.DistanceMeters, True))
Expand Down

0 comments on commit 360351a

Please sign in to comment.