diff --git a/python/core/symbology-ng/qgsheatmaprenderer.sip b/python/core/symbology-ng/qgsheatmaprenderer.sip index e2dffcaa763..f018934908c 100644 --- a/python/core/symbology-ng/qgsheatmaprenderer.sip +++ b/python/core/symbology-ng/qgsheatmaprenderer.sip @@ -37,6 +37,19 @@ class QgsHeatmapRenderer : QgsFeatureRendererV2 * @see colorRamp */ void setColorRamp( QgsVectorColorRampV2* ramp /Transfer/ ); + + /**Returns whether the ramp is inverted + * @returns true if color ramp is inverted + * @see setInvertRamp + * @see colorRamp + */ + double invertRamp() const; + /**Sets whether the ramp is inverted + * @param invert set to true to invert color ramp + * @see invertRamp + * @see setColorRamp + */ + void setInvertRamp( const bool invert ); /**Returns the radius for the heatmap * @returns heatmap radius diff --git a/src/core/symbology-ng/qgsheatmaprenderer.cpp b/src/core/symbology-ng/qgsheatmaprenderer.cpp index 27cf405c3ce..45c7ea9b8cd 100644 --- a/src/core/symbology-ng/qgsheatmaprenderer.cpp +++ b/src/core/symbology-ng/qgsheatmaprenderer.cpp @@ -34,6 +34,7 @@ QgsHeatmapRenderer::QgsHeatmapRenderer( ) , mRadius( 10 ) , mRadiusUnit( QgsSymbolV2::MM ) , mGradientRamp( 0 ) + , mInvertRamp( false ) , mExplicitMax( 0.0 ) , mRenderQuality( 1 ) { @@ -208,7 +209,7 @@ void QgsHeatmapRenderer::renderImage( QgsRenderContext& context ) pixVal = mValues.at( idx ) > 0 ? qMin(( mValues.at( idx ) / scaleMax ), 1.0 ) : 0; //convert value to color from ramp - pixColor = mGradientRamp->color( pixVal ); + pixColor = mGradientRamp->color( mInvertRamp ? 1 - pixVal : pixVal ); scanLine[widthIndex] = pixColor.rgba(); idx++; @@ -239,6 +240,7 @@ QgsFeatureRendererV2* QgsHeatmapRenderer::clone() const { newRenderer->setColorRamp( mGradientRamp->clone() ); } + newRenderer->setInvertRamp( mInvertRamp ); newRenderer->setRadius( mRadius ); newRenderer->setRadiusUnit( mRadiusUnit ); newRenderer->setRadiusMapUnitScale( mRadiusMapUnitScale ); @@ -286,6 +288,7 @@ QgsFeatureRendererV2* QgsHeatmapRenderer::create( QDomElement& element ) { r->setColorRamp( QgsSymbolLayerV2Utils::loadColorRamp( sourceColorRampElem ) ); } + r->setInvertRamp( element.attribute( "invert_ramp", "0" ).toInt() ); return r; } @@ -303,6 +306,7 @@ QDomElement QgsHeatmapRenderer::save( QDomDocument& doc ) QDomElement colorRampElem = QgsSymbolLayerV2Utils::saveColorRamp( "[source]", mGradientRamp, doc ); rendererElem.appendChild( colorRampElem ); } + rendererElem.setAttribute( "invert_ramp", QString::number( mInvertRamp ) ); return rendererElem; } diff --git a/src/core/symbology-ng/qgsheatmaprenderer.h b/src/core/symbology-ng/qgsheatmaprenderer.h index eb1230fbc75..4dbe921332b 100644 --- a/src/core/symbology-ng/qgsheatmaprenderer.h +++ b/src/core/symbology-ng/qgsheatmaprenderer.h @@ -67,6 +67,19 @@ class CORE_EXPORT QgsHeatmapRenderer : public QgsFeatureRendererV2 */ void setColorRamp( QgsVectorColorRampV2* ramp ); + /**Returns whether the ramp is inverted + * @returns true if color ramp is inverted + * @see setInvertRamp + * @see colorRamp + */ + double invertRamp() const { return mInvertRamp; } + /**Sets whether the ramp is inverted + * @param invert set to true to invert color ramp + * @see invertRamp + * @see setColorRamp + */ + void setInvertRamp( const bool invert ) { mInvertRamp = invert; } + /**Returns the radius for the heatmap * @returns heatmap radius * @see setRadius @@ -155,6 +168,7 @@ class CORE_EXPORT QgsHeatmapRenderer : public QgsFeatureRendererV2 QgsMapUnitScale mRadiusMapUnitScale; QgsVectorColorRampV2* mGradientRamp; + bool mInvertRamp; double mExplicitMax; int mRenderQuality; diff --git a/src/gui/symbology-ng/qgsheatmaprendererwidget.cpp b/src/gui/symbology-ng/qgsheatmaprendererwidget.cpp index 3595faad63f..0859004e9f4 100644 --- a/src/gui/symbology-ng/qgsheatmaprendererwidget.cpp +++ b/src/gui/symbology-ng/qgsheatmaprendererwidget.cpp @@ -97,6 +97,9 @@ QgsHeatmapRendererWidget::QgsHeatmapRendererWidget( QgsVectorLayer* layer, QgsSt mQualitySlider->blockSignals( true ); mQualitySlider->setValue( mRenderer->renderQuality() ); mQualitySlider->blockSignals( false ); + mInvertCheckBox->blockSignals( true ); + mInvertCheckBox->setChecked( mRenderer->invertRamp() ); + mInvertCheckBox->blockSignals( false ); } QgsFeatureRendererV2* QgsHeatmapRendererWidget::renderer() @@ -193,3 +196,13 @@ void QgsHeatmapRendererWidget::on_mQualitySlider_valueChanged( int v ) mRenderer->setRenderQuality( v ); } + +void QgsHeatmapRendererWidget::on_mInvertCheckBox_toggled( bool v ) +{ + if ( !mRenderer ) + { + return; + } + + mRenderer->setInvertRamp( v ); +} diff --git a/src/gui/symbology-ng/qgsheatmaprendererwidget.h b/src/gui/symbology-ng/qgsheatmaprendererwidget.h index f305f59342f..e8c7684c14f 100644 --- a/src/gui/symbology-ng/qgsheatmaprendererwidget.h +++ b/src/gui/symbology-ng/qgsheatmaprendererwidget.h @@ -54,6 +54,7 @@ class GUI_EXPORT QgsHeatmapRendererWidget : public QgsRendererV2Widget, private void on_mRadiusSpinBox_valueChanged( double d ); void on_mMaxSpinBox_valueChanged( double d ); void on_mQualitySlider_valueChanged( int v ); + void on_mInvertCheckBox_toggled( bool v ); }; diff --git a/src/ui/symbollayer/qgsheatmaprendererwidgetbase.ui b/src/ui/symbollayer/qgsheatmaprendererwidgetbase.ui index 896033d1b9e..f681a810342 100644 --- a/src/ui/symbollayer/qgsheatmaprendererwidgetbase.ui +++ b/src/ui/symbollayer/qgsheatmaprendererwidgetbase.ui @@ -15,7 +15,7 @@ - + @@ -32,16 +32,23 @@ + + + + Invert + + + - + Radius - + @@ -67,14 +74,14 @@ - + Maximum value - + @@ -96,14 +103,14 @@ - + Rendering quality - + @@ -152,7 +159,7 @@ - + Qt::Vertical @@ -188,6 +195,7 @@ mRampComboBox mButtonEditRamp + mInvertCheckBox mRadiusSpinBox mMaxSpinBox mQualitySlider