Skip to content

Commit 499a35d

Browse files
committed
Refine paletted raster renderer classification
Change behaviour from clearing all existing values on classification to instead keeping any existing values which do exist in the raster, maintaining their current color and label.
1 parent bccba30 commit 499a35d

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

src/gui/raster/qgspalettedrendererwidget.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ void QgsPalettedRendererWidget::classify()
406406
return;
407407
}
408408

409-
mGatherer = new QgsPalettedRendererClassGatherer( mRasterLayer, mBandComboBox->currentData().toInt(), btnColorRamp->colorRamp() );
409+
mGatherer = new QgsPalettedRendererClassGatherer( mRasterLayer, mBandComboBox->currentData().toInt(), mModel->classData(), btnColorRamp->colorRamp() );
410410

411411
connect( mGatherer, &QgsPalettedRendererClassGatherer::progressChanged, mCalculatingProgressBar, &QProgressBar::setValue );
412412
mCalculatingProgressBar->show();
@@ -450,7 +450,7 @@ void QgsPalettedRendererWidget::gathererThreadFinished()
450450
{
451451
mGatherer->deleteLater();
452452
mGatherer = nullptr;
453-
mClassifyButton->setText( tr( "Add Unique Values" ) );
453+
mClassifyButton->setText( tr( "Populate Values" ) );
454454
mClassifyButton->setEnabled( true );
455455
mCalculatingProgressBar->hide();
456456
mCancelButton->hide();

src/gui/raster/qgspalettedrendererwidget.h

+21-2
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,11 @@ class QgsPalettedRendererClassGatherer: public QThread
3838
Q_OBJECT
3939

4040
public:
41-
QgsPalettedRendererClassGatherer( QgsRasterLayer *layer, int bandNumber, QgsColorRamp *ramp = nullptr )
41+
QgsPalettedRendererClassGatherer( QgsRasterLayer *layer, int bandNumber, const QgsPalettedRasterRenderer::ClassData &existingClasses, QgsColorRamp *ramp = nullptr )
4242
: mLayer( layer )
4343
, mBandNumber( bandNumber )
4444
, mRamp( ramp )
45+
, mClasses( existingClasses )
4546
, mFeedback( nullptr )
4647
, mWasCanceled( false )
4748
{}
@@ -54,7 +55,25 @@ class QgsPalettedRendererClassGatherer: public QThread
5455
mFeedback = new QgsRasterBlockFeedback();
5556
connect( mFeedback, &QgsRasterBlockFeedback::progressChanged, this, &QgsPalettedRendererClassGatherer::progressChanged );
5657

57-
mClasses = QgsPalettedRasterRenderer::classDataFromRaster( mLayer->dataProvider(), mBandNumber, mRamp.get(), mFeedback );
58+
QgsPalettedRasterRenderer::ClassData newClasses = QgsPalettedRasterRenderer::classDataFromRaster( mLayer->dataProvider(), mBandNumber, mRamp.get(), mFeedback );
59+
60+
// combine existing classes with new classes
61+
QgsPalettedRasterRenderer::ClassData::iterator classIt = newClasses.begin();
62+
for ( ; classIt != newClasses.end(); ++classIt )
63+
{
64+
// check if existing classes contains this same class
65+
Q_FOREACH ( const QgsPalettedRasterRenderer::Class &existingClass, mClasses )
66+
{
67+
if ( existingClass.value == classIt->value )
68+
{
69+
classIt->color = existingClass.color;
70+
classIt->label = existingClass.label;
71+
break;
72+
}
73+
}
74+
}
75+
mClasses = newClasses;
76+
5877
// be overly cautious - it's *possible* stop() might be called between deleting mFeedback and nulling it
5978
mFeedbackMutex.lock();
6079
delete mFeedback;

src/ui/qgspalettedrendererwidgetbase.ui

+4-1
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,11 @@
4343
</property>
4444
<item>
4545
<widget class="QPushButton" name="mClassifyButton">
46+
<property name="toolTip">
47+
<string>Adds all missing unique values from the raster</string>
48+
</property>
4649
<property name="text">
47-
<string>Add Unique Values</string>
50+
<string>Populate Values</string>
4851
</property>
4952
</widget>
5053
</item>

0 commit comments

Comments
 (0)