From eee787f8255eb923403dd7d95d5755b729ac2a1d Mon Sep 17 00:00:00 2001 From: uclaros Date: Wed, 1 May 2024 13:11:26 +0300 Subject: [PATCH] return magnitude multiplier based on units set --- .../mesh/qgsmeshrenderersettings.sip.in | 3 +- .../mesh/qgsmeshrenderersettings.sip.in | 3 +- src/core/mesh/qgsmeshrenderersettings.cpp | 17 ++++++++++- src/core/mesh/qgsmeshrenderersettings.h | 3 +- .../qgsmeshrenderervectorsettingswidget.cpp | 28 ++++--------------- 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/python/PyQt6/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in b/python/PyQt6/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in index e120c26b1321..e679521e1f16 100644 --- a/python/PyQt6/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in +++ b/python/PyQt6/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in @@ -448,7 +448,8 @@ Represents a mesh renderer settings for vector datasets displayed with wind barb double magnitudeMultiplier() const; %Docstring -Returns the multiplier for the magnitude to convert it to knots +Returns the multiplier for the magnitude to convert it to knots, according to the units set with :py:func:`~QgsMeshRendererVectorWindBarbSettings.setMagnitudeUnits` +A custom multiplier can be set with :py:func:`~QgsMeshRendererVectorWindBarbSettings.setMagnitudeMultiplier` for the case when units are set to OtherUnit %End void setMagnitudeMultiplier( double magnitudeMultiplier ); diff --git a/python/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in b/python/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in index 90062d5f4dce..085a3e0d10b2 100644 --- a/python/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in +++ b/python/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in @@ -448,7 +448,8 @@ Represents a mesh renderer settings for vector datasets displayed with wind barb double magnitudeMultiplier() const; %Docstring -Returns the multiplier for the magnitude to convert it to knots +Returns the multiplier for the magnitude to convert it to knots, according to the units set with :py:func:`~QgsMeshRendererVectorWindBarbSettings.setMagnitudeUnits` +A custom multiplier can be set with :py:func:`~QgsMeshRendererVectorWindBarbSettings.setMagnitudeMultiplier` for the case when units are set to OtherUnit %End void setMagnitudeMultiplier( double magnitudeMultiplier ); diff --git a/src/core/mesh/qgsmeshrenderersettings.cpp b/src/core/mesh/qgsmeshrenderersettings.cpp index b5308a0d0909..94a8a5074429 100644 --- a/src/core/mesh/qgsmeshrenderersettings.cpp +++ b/src/core/mesh/qgsmeshrenderersettings.cpp @@ -782,7 +782,22 @@ QDomElement QgsMeshRendererVectorWindBarbSettings::writeXml( QDomDocument &doc ) double QgsMeshRendererVectorWindBarbSettings::magnitudeMultiplier() const { - return mMagnitudeMultiplier; + switch ( mMagnitudeUnits ) + { + case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::Knots: + return 1.0; + case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::MetersPerSecond: + return 3600.0 / 1852.0; + case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::KilometersPerHour: + return 1.0 / 1.852; + case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::MilesPerHour: + return 1.609344 / 1.852; + case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::FeetPerSecond: + return 3600.0 / 1.852 / 5280.0 * 1.609344 ; + case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::OtherUnit: + return mMagnitudeMultiplier; + } + return 1.0; // should not reach } void QgsMeshRendererVectorWindBarbSettings::setMagnitudeMultiplier( double magnitudeMultiplier ) diff --git a/src/core/mesh/qgsmeshrenderersettings.h b/src/core/mesh/qgsmeshrenderersettings.h index 4668c3a84e3d..2cca7ce0ef20 100644 --- a/src/core/mesh/qgsmeshrenderersettings.h +++ b/src/core/mesh/qgsmeshrenderersettings.h @@ -419,7 +419,8 @@ class CORE_EXPORT QgsMeshRendererVectorWindBarbSettings }; /** - * Returns the multiplier for the magnitude to convert it to knots + * Returns the multiplier for the magnitude to convert it to knots, according to the units set with setMagnitudeUnits() + * A custom multiplier can be set with setMagnitudeMultiplier() for the case when units are set to OtherUnit */ double magnitudeMultiplier() const; diff --git a/src/gui/mesh/qgsmeshrenderervectorsettingswidget.cpp b/src/gui/mesh/qgsmeshrenderervectorsettingswidget.cpp index 76b9e21a3b00..c693ed72950e 100644 --- a/src/gui/mesh/qgsmeshrenderervectorsettingswidget.cpp +++ b/src/gui/mesh/qgsmeshrenderervectorsettingswidget.cpp @@ -50,6 +50,7 @@ QgsMeshRendererVectorSettingsWidget::QgsMeshRendererVectorSettingsWidget( QWidge mTracesMaxLengthSpinBox->setClearValue( 100.0 ); mWindBarbLengthSpinBox->setClearValue( 10.0 ); + mWindBarbMagnitudeMultiplierSpinBox->setValue( 1.0 ); mWindBarbMagnitudeMultiplierSpinBox->setClearValue( 1.0 ); connect( mColorWidget, &QgsColorButton::colorChanged, this, &QgsMeshRendererVectorSettingsWidget::widgetChanged ); @@ -293,9 +294,9 @@ void QgsMeshRendererVectorSettingsWidget::syncToLayer( ) // Wind Barb settings const QgsMeshRendererVectorWindBarbSettings windBarbSettings = settings.windBarbSettings(); mWindBarbLengthSpinBox->setValue( windBarbSettings.shaftLength() ); - mWindBarbMagnitudeMultiplierSpinBox->setValue( windBarbSettings.magnitudeMultiplier() ); mWindBarbUnitsComboBox->setCurrentIndex( static_cast( windBarbSettings.magnitudeUnits() ) ); - onWindBarbUnitsChanged( static_cast( windBarbSettings.magnitudeUnits() ) ); + if ( windBarbSettings.magnitudeUnits() == QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::OtherUnit ) + mWindBarbMagnitudeMultiplierSpinBox->setValue( windBarbSettings.magnitudeMultiplier() ); } void QgsMeshRendererVectorSettingsWidget::onSymbologyChanged( int currentIndex ) @@ -333,30 +334,11 @@ void QgsMeshRendererVectorSettingsWidget::onWindBarbUnitsChanged( int currentInd { const QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit units = static_cast( currentIndex ); - double multiplier; - switch ( units ) - { - case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::Knots: - case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::OtherUnit: - multiplier = 1.0; - break; - case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::MetersPerSecond: - multiplier = 3600.0 / 1852.0; - break; - case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::KilometersPerHour: - multiplier = 1.852; - break; - case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::MilesPerHour: - multiplier = 1.609344 / 1.852; - break; - case QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::FeetPerSecond: - multiplier = 3600.0 / 1.852 / 5280.0 * 1.609344 ; - break; - } mWindBarbMagnitudeMultiplierLabel->setVisible( units == QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::OtherUnit ); mWindBarbMagnitudeMultiplierSpinBox->setVisible( units == QgsMeshRendererVectorWindBarbSettings::WindSpeedUnit::OtherUnit ); - mWindBarbMagnitudeMultiplierSpinBox->setValue( multiplier ); + + emit widgetChanged(); } void QgsMeshRendererVectorSettingsWidget::onColoringMethodChanged()