diff --git a/python/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in b/python/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in index becf8effe51..36390ce5588 100644 --- a/python/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in +++ b/python/core/auto_generated/mesh/qgsmeshrenderersettings.sip.in @@ -90,6 +90,19 @@ Returns color ramp shader function void setColorRampShader( const QgsColorRampShader &shader ); %Docstring Sets color ramp shader function +%End + + double classificationMin() const; +%Docstring +Returns min value used for creation of the color ramp shader +%End + double classificationMax() const; +%Docstring +Returns max value used for creation of the color ramp shader +%End + void setClassificationMinMax( double vMin, double vMax ); +%Docstring +Sets min/max values used for creation of the color ramp shader %End QDomElement writeXml( QDomDocument &doc ) const; diff --git a/src/app/mesh/qgsmeshrendererscalarsettingswidget.cpp b/src/app/mesh/qgsmeshrendererscalarsettingswidget.cpp index 9cf26c30ac2..1e919707466 100644 --- a/src/app/mesh/qgsmeshrendererscalarsettingswidget.cpp +++ b/src/app/mesh/qgsmeshrendererscalarsettingswidget.cpp @@ -45,6 +45,7 @@ QgsMeshRendererScalarSettings QgsMeshRendererScalarSettingsWidget::settings() co { QgsMeshRendererScalarSettings settings; settings.setColorRampShader( mScalarColorRampShaderWidget->shader() ); + settings.setClassificationMinMax( lineEditValue( mScalarMinLineEdit ), lineEditValue( mScalarMaxLineEdit ) ); return settings; } @@ -59,8 +60,8 @@ void QgsMeshRendererScalarSettingsWidget::syncToLayer( ) const QgsMeshRendererSettings rendererSettings = mMeshLayer->rendererSettings(); const QgsMeshRendererScalarSettings settings = rendererSettings.scalarSettings( mActiveDatasetGroup ); const QgsColorRampShader shader = settings.colorRampShader(); - whileBlocking( mScalarMinLineEdit )->setText( QString::number( shader.minimumValue() ) ); - whileBlocking( mScalarMaxLineEdit )->setText( QString::number( shader.maximumValue() ) ); + whileBlocking( mScalarMinLineEdit )->setText( QString::number( settings.classificationMin() ) ); + whileBlocking( mScalarMaxLineEdit )->setText( QString::number( settings.classificationMax() ) ); whileBlocking( mScalarColorRampShaderWidget )->setFromShader( shader ); } diff --git a/src/core/mesh/qgsmeshlayer.cpp b/src/core/mesh/qgsmeshlayer.cpp index 5b39188ef6c..d0101f93e42 100644 --- a/src/core/mesh/qgsmeshlayer.cpp +++ b/src/core/mesh/qgsmeshlayer.cpp @@ -216,6 +216,7 @@ void QgsMeshLayer::assignDefaultStyleToDatasetGroup( int groupIndex ) fcn.classifyColorRamp( 5, -1, QgsRectangle(), nullptr ); QgsMeshRendererScalarSettings scalarSettings; + scalarSettings.setClassificationMinMax( groupMin, groupMax ); scalarSettings.setColorRampShader( fcn ); mRendererSettings.setScalarSettings( groupIndex, scalarSettings ); } diff --git a/src/core/mesh/qgsmeshlayerrenderer.cpp b/src/core/mesh/qgsmeshlayerrenderer.cpp index 966d75a78c4..5dd402a6710 100644 --- a/src/core/mesh/qgsmeshlayerrenderer.cpp +++ b/src/core/mesh/qgsmeshlayerrenderer.cpp @@ -205,13 +205,14 @@ void QgsMeshLayerRenderer::renderScalarDataset() if ( !index.isValid() ) return; // no shader - QgsColorRampShader *fcn = new QgsColorRampShader( mRendererSettings.scalarSettings( index.group() ).colorRampShader() ); + const QgsMeshRendererScalarSettings scalarSettings = mRendererSettings.scalarSettings( index.group() ); + QgsColorRampShader *fcn = new QgsColorRampShader( scalarSettings.colorRampShader() ); QgsRasterShader *sh = new QgsRasterShader(); sh->setRasterShaderFunction( fcn ); // takes ownership of fcn QgsMeshLayerInterpolator interpolator( mTriangularMesh, mScalarDatasetValues, mScalarDataOnVertices, mContext, mOutputSize ); QgsSingleBandPseudoColorRenderer renderer( &interpolator, 0, sh ); // takes ownership of sh - renderer.setClassificationMin( fcn->minimumValue() ); - renderer.setClassificationMax( fcn->maximumValue() ); + renderer.setClassificationMin( scalarSettings.classificationMin() ); + renderer.setClassificationMax( scalarSettings.classificationMax() ); std::unique_ptr bl( renderer.block( 0, mContext.extent(), mOutputSize.width(), mOutputSize.height(), mFeedback.get() ) ); QImage img = bl->image(); diff --git a/src/core/mesh/qgsmeshrenderersettings.cpp b/src/core/mesh/qgsmeshrenderersettings.cpp index 59a7622344e..95c7a70e1d5 100644 --- a/src/core/mesh/qgsmeshrenderersettings.cpp +++ b/src/core/mesh/qgsmeshrenderersettings.cpp @@ -78,9 +78,17 @@ void QgsMeshRendererScalarSettings::setColorRampShader( const QgsColorRampShader mColorRampShader = shader; } +void QgsMeshRendererScalarSettings::setClassificationMinMax( double vMin, double vMax ) +{ + mClassificationMin = vMin; + mClassificationMax = vMax; +} + QDomElement QgsMeshRendererScalarSettings::writeXml( QDomDocument &doc ) const { QDomElement elem = doc.createElement( "scalar-settings" ); + elem.setAttribute( "min-val", mClassificationMin ); + elem.setAttribute( "max-val", mClassificationMax ); QDomElement elemShader = mColorRampShader.writeXml( doc ); elem.appendChild( elemShader ); return elem; @@ -88,6 +96,8 @@ QDomElement QgsMeshRendererScalarSettings::writeXml( QDomDocument &doc ) const void QgsMeshRendererScalarSettings::readXml( const QDomElement &elem ) { + mClassificationMin = elem.attribute( "min-val" ).toDouble(); + mClassificationMax = elem.attribute( "max-val" ).toDouble(); QDomElement elemShader = elem.firstChildElement( QStringLiteral( "colorrampshader" ) ); mColorRampShader.readXml( elemShader ); } diff --git a/src/core/mesh/qgsmeshrenderersettings.h b/src/core/mesh/qgsmeshrenderersettings.h index 31387a65326..e17b700af02 100644 --- a/src/core/mesh/qgsmeshrenderersettings.h +++ b/src/core/mesh/qgsmeshrenderersettings.h @@ -82,6 +82,13 @@ class CORE_EXPORT QgsMeshRendererScalarSettings //! Sets color ramp shader function void setColorRampShader( const QgsColorRampShader &shader ); + //! Returns min value used for creation of the color ramp shader + double classificationMin() const { return mClassificationMin; } + //! Returns max value used for creation of the color ramp shader + double classificationMax() const { return mClassificationMax; } + //! Sets min/max values used for creation of the color ramp shader + void setClassificationMinMax( double vMin, double vMax ); + //! Writes configuration to a new DOM element QDomElement writeXml( QDomDocument &doc ) const; //! Reads configuration from the given DOM element @@ -89,6 +96,8 @@ class CORE_EXPORT QgsMeshRendererScalarSettings private: QgsColorRampShader mColorRampShader; + double mClassificationMin = 0; + double mClassificationMax = 0; }; /** diff --git a/src/ui/mesh/qgsmeshrendererscalarsettingswidgetbase.ui b/src/ui/mesh/qgsmeshrendererscalarsettingswidgetbase.ui index 97c01cf2e9d..05832480ae6 100644 --- a/src/ui/mesh/qgsmeshrendererscalarsettingswidgetbase.ui +++ b/src/ui/mesh/qgsmeshrendererscalarsettingswidgetbase.ui @@ -47,7 +47,7 @@ - Recalculate + Load