diff --git a/src/core/qgscoordinateutils.cpp b/src/core/qgscoordinateutils.cpp index 87e4199416b..46de3a830e5 100644 --- a/src/core/qgscoordinateutils.cpp +++ b/src/core/qgscoordinateutils.cpp @@ -24,15 +24,17 @@ #include "qgscoordinateformatter.h" ///@cond NOT_STABLE_API -int QgsCoordinateUtils::calculateCoordinatePrecision( double mapUnitsPerPixel, const QgsCoordinateReferenceSystem &mapCrs ) +int QgsCoordinateUtils::calculateCoordinatePrecision( double mapUnitsPerPixel, const QgsCoordinateReferenceSystem &mapCrs, QgsProject *project ) { + if ( !project ) + project = QgsProject::instance(); // Get the display precision from the project settings - bool automatic = QgsProject::instance()->readBoolEntry( QStringLiteral( "PositionPrecision" ), QStringLiteral( "/Automatic" ) ); + bool automatic = project->readBoolEntry( QStringLiteral( "PositionPrecision" ), QStringLiteral( "/Automatic" ) ); int dp = 0; if ( automatic ) { - QString format = QgsProject::instance()->readEntry( QStringLiteral( "PositionPrecision" ), QStringLiteral( "/DegreeFormat" ), QStringLiteral( "MU" ) ); + QString format = project->readEntry( QStringLiteral( "PositionPrecision" ), QStringLiteral( "/DegreeFormat" ), QStringLiteral( "MU" ) ); bool formatGeographic = ( format == QLatin1String( "DM" ) || format == QLatin1String( "DMS" ) || format == QLatin1String( "D" ) ); // we can only calculate an automatic precision if one of these is true: @@ -49,11 +51,14 @@ int QgsCoordinateUtils::calculateCoordinatePrecision( double mapUnitsPerPixel, c } else { - dp = format == QLatin1String( "D" ) ? 4 : 2; //guess sensible fallback + if ( format == QLatin1String( "D" ) ) + dp = 4; + else + dp = 2; } } else - dp = QgsProject::instance()->readNumEntry( QStringLiteral( "PositionPrecision" ), QStringLiteral( "/DecimalPlaces" ) ); + dp = project->readNumEntry( QStringLiteral( "PositionPrecision" ), QStringLiteral( "/DecimalPlaces" ) ); // Keep dp sensible if ( dp < 0 ) diff --git a/src/core/qgscoordinateutils.h b/src/core/qgscoordinateutils.h index 3b4a9702e72..03b1d8b6a93 100644 --- a/src/core/qgscoordinateutils.h +++ b/src/core/qgscoordinateutils.h @@ -45,17 +45,20 @@ class CORE_EXPORT QgsCoordinateUtils public: /** - * Returns the precision to use for displaying coordinates to the user, respecting - * the user's project settings. If the user has set the project to use "automatic" - * precision, this function tries to calculate an optimal coordinate precision for a given - * map units per pixel by calculating the number of decimal places for the coordinates - * with the aim of always having enough decimal places to show the difference in position - * between adjacent pixels. - * \param mapUnitsPerPixel number of map units per pixel - * \param mapCrs CRS of map - * \returns optimal number of decimal places for coordinates + * Returns the precision to use for displaying coordinates in \a mapCrs to the user. + * It respects the user's \a project settings. + * If the user has set the project to use "automatic" precision, this function tries + * to calculate an optimal coordinate precision for a given \a mapUnitsPerPixel by + * calculating the number of decimal places for the coordinates with the aim of always + * having enough decimal places to show the difference in position between adjacent + * pixels. + * + * \since QGIS 3.6 a new \a project parameter is available. Using the method without this + * a \a project paramter is deprecated and will be removed with QGIS 4. + * For backward compatibility, QgsProject.instance() will be used if the \a project + * parameter is not specified. */ - Q_INVOKABLE static int calculateCoordinatePrecision( double mapUnitsPerPixel, const QgsCoordinateReferenceSystem &mapCrs ); + Q_INVOKABLE static int calculateCoordinatePrecision( double mapUnitsPerPixel, const QgsCoordinateReferenceSystem &mapCrs, QgsProject *project = nullptr ); /** * Formats a \a point coordinate for use with the specified \a project, respecting the project's