Skip to content

Commit 802a4ac

Browse files
committedNov 22, 2014
Add an invert checkbox for heatmap renderer
1 parent 7277476 commit 802a4ac

File tree

6 files changed

+62
-9
lines changed

6 files changed

+62
-9
lines changed
 

‎python/core/symbology-ng/qgsheatmaprenderer.sip

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,19 @@ class QgsHeatmapRenderer : QgsFeatureRendererV2
3737
* @see colorRamp
3838
*/
3939
void setColorRamp( QgsVectorColorRampV2* ramp /Transfer/ );
40+
41+
/**Returns whether the ramp is inverted
42+
* @returns true if color ramp is inverted
43+
* @see setInvertRamp
44+
* @see colorRamp
45+
*/
46+
double invertRamp() const;
47+
/**Sets whether the ramp is inverted
48+
* @param invert set to true to invert color ramp
49+
* @see invertRamp
50+
* @see setColorRamp
51+
*/
52+
void setInvertRamp( const bool invert );
4053

4154
/**Returns the radius for the heatmap
4255
* @returns heatmap radius

‎src/core/symbology-ng/qgsheatmaprenderer.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ QgsHeatmapRenderer::QgsHeatmapRenderer( )
3434
, mRadius( 10 )
3535
, mRadiusUnit( QgsSymbolV2::MM )
3636
, mGradientRamp( 0 )
37+
, mInvertRamp( false )
3738
, mExplicitMax( 0.0 )
3839
, mRenderQuality( 1 )
3940
{
@@ -208,7 +209,7 @@ void QgsHeatmapRenderer::renderImage( QgsRenderContext& context )
208209
pixVal = mValues.at( idx ) > 0 ? qMin(( mValues.at( idx ) / scaleMax ), 1.0 ) : 0;
209210

210211
//convert value to color from ramp
211-
pixColor = mGradientRamp->color( pixVal );
212+
pixColor = mGradientRamp->color( mInvertRamp ? 1 - pixVal : pixVal );
212213

213214
scanLine[widthIndex] = pixColor.rgba();
214215
idx++;
@@ -239,6 +240,7 @@ QgsFeatureRendererV2* QgsHeatmapRenderer::clone() const
239240
{
240241
newRenderer->setColorRamp( mGradientRamp->clone() );
241242
}
243+
newRenderer->setInvertRamp( mInvertRamp );
242244
newRenderer->setRadius( mRadius );
243245
newRenderer->setRadiusUnit( mRadiusUnit );
244246
newRenderer->setRadiusMapUnitScale( mRadiusMapUnitScale );
@@ -286,6 +288,7 @@ QgsFeatureRendererV2* QgsHeatmapRenderer::create( QDomElement& element )
286288
{
287289
r->setColorRamp( QgsSymbolLayerV2Utils::loadColorRamp( sourceColorRampElem ) );
288290
}
291+
r->setInvertRamp( element.attribute( "invert_ramp", "0" ).toInt() );
289292
return r;
290293
}
291294

@@ -303,6 +306,7 @@ QDomElement QgsHeatmapRenderer::save( QDomDocument& doc )
303306
QDomElement colorRampElem = QgsSymbolLayerV2Utils::saveColorRamp( "[source]", mGradientRamp, doc );
304307
rendererElem.appendChild( colorRampElem );
305308
}
309+
rendererElem.setAttribute( "invert_ramp", QString::number( mInvertRamp ) );
306310

307311
return rendererElem;
308312
}

‎src/core/symbology-ng/qgsheatmaprenderer.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,19 @@ class CORE_EXPORT QgsHeatmapRenderer : public QgsFeatureRendererV2
6767
*/
6868
void setColorRamp( QgsVectorColorRampV2* ramp );
6969

70+
/**Returns whether the ramp is inverted
71+
* @returns true if color ramp is inverted
72+
* @see setInvertRamp
73+
* @see colorRamp
74+
*/
75+
double invertRamp() const { return mInvertRamp; }
76+
/**Sets whether the ramp is inverted
77+
* @param invert set to true to invert color ramp
78+
* @see invertRamp
79+
* @see setColorRamp
80+
*/
81+
void setInvertRamp( const bool invert ) { mInvertRamp = invert; }
82+
7083
/**Returns the radius for the heatmap
7184
* @returns heatmap radius
7285
* @see setRadius
@@ -155,6 +168,7 @@ class CORE_EXPORT QgsHeatmapRenderer : public QgsFeatureRendererV2
155168
QgsMapUnitScale mRadiusMapUnitScale;
156169

157170
QgsVectorColorRampV2* mGradientRamp;
171+
bool mInvertRamp;
158172

159173
double mExplicitMax;
160174
int mRenderQuality;

‎src/gui/symbology-ng/qgsheatmaprendererwidget.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ QgsHeatmapRendererWidget::QgsHeatmapRendererWidget( QgsVectorLayer* layer, QgsSt
9797
mQualitySlider->blockSignals( true );
9898
mQualitySlider->setValue( mRenderer->renderQuality() );
9999
mQualitySlider->blockSignals( false );
100+
mInvertCheckBox->blockSignals( true );
101+
mInvertCheckBox->setChecked( mRenderer->invertRamp() );
102+
mInvertCheckBox->blockSignals( false );
100103
}
101104

102105
QgsFeatureRendererV2* QgsHeatmapRendererWidget::renderer()
@@ -193,3 +196,13 @@ void QgsHeatmapRendererWidget::on_mQualitySlider_valueChanged( int v )
193196

194197
mRenderer->setRenderQuality( v );
195198
}
199+
200+
void QgsHeatmapRendererWidget::on_mInvertCheckBox_toggled( bool v )
201+
{
202+
if ( !mRenderer )
203+
{
204+
return;
205+
}
206+
207+
mRenderer->setInvertRamp( v );
208+
}

‎src/gui/symbology-ng/qgsheatmaprendererwidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class GUI_EXPORT QgsHeatmapRendererWidget : public QgsRendererV2Widget, private
5454
void on_mRadiusSpinBox_valueChanged( double d );
5555
void on_mMaxSpinBox_valueChanged( double d );
5656
void on_mQualitySlider_valueChanged( int v );
57+
void on_mInvertCheckBox_toggled( bool v );
5758

5859
};
5960

‎src/ui/symbollayer/qgsheatmaprendererwidgetbase.ui

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
</property>
1616
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1">
1717
<item row="0" column="0" colspan="2">
18-
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0">
18+
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,0">
1919
<item>
2020
<widget class="QgsColorRampComboBox" name="mRampComboBox"/>
2121
</item>
@@ -32,16 +32,23 @@
3232
</property>
3333
</widget>
3434
</item>
35+
<item>
36+
<widget class="QCheckBox" name="mInvertCheckBox">
37+
<property name="text">
38+
<string>Invert</string>
39+
</property>
40+
</widget>
41+
</item>
3542
</layout>
3643
</item>
37-
<item row="1" column="0">
44+
<item row="2" column="0">
3845
<widget class="QLabel" name="label_2">
3946
<property name="text">
4047
<string>Radius</string>
4148
</property>
4249
</widget>
4350
</item>
44-
<item row="1" column="1">
51+
<item row="2" column="1">
4552
<layout class="QHBoxLayout" name="horizontalLayout_2">
4653
<item>
4754
<widget class="QgsDoubleSpinBox" name="mRadiusSpinBox">
@@ -67,14 +74,14 @@
6774
</item>
6875
</layout>
6976
</item>
70-
<item row="2" column="0">
77+
<item row="3" column="0">
7178
<widget class="QLabel" name="label">
7279
<property name="text">
7380
<string>Maximum value</string>
7481
</property>
7582
</widget>
7683
</item>
77-
<item row="2" column="1">
84+
<item row="3" column="1">
7885
<widget class="QgsDoubleSpinBox" name="mMaxSpinBox">
7986
<property name="sizePolicy">
8087
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -96,14 +103,14 @@
96103
</property>
97104
</widget>
98105
</item>
99-
<item row="3" column="0">
106+
<item row="4" column="0">
100107
<widget class="QLabel" name="label_3">
101108
<property name="text">
102109
<string>Rendering quality</string>
103110
</property>
104111
</widget>
105112
</item>
106-
<item row="3" column="1">
113+
<item row="4" column="1">
107114
<layout class="QHBoxLayout" name="horizontalLayout_3">
108115
<item>
109116
<widget class="QLabel" name="label_4">
@@ -152,7 +159,7 @@
152159
</item>
153160
</layout>
154161
</item>
155-
<item row="4" column="1">
162+
<item row="5" column="1">
156163
<spacer name="verticalSpacer">
157164
<property name="orientation">
158165
<enum>Qt::Vertical</enum>
@@ -188,6 +195,7 @@
188195
<tabstops>
189196
<tabstop>mRampComboBox</tabstop>
190197
<tabstop>mButtonEditRamp</tabstop>
198+
<tabstop>mInvertCheckBox</tabstop>
191199
<tabstop>mRadiusSpinBox</tabstop>
192200
<tabstop>mMaxSpinBox</tabstop>
193201
<tabstop>mQualitySlider</tabstop>

0 commit comments

Comments
 (0)
Please sign in to comment.