@@ -38,10 +38,11 @@ class QgsPalettedRendererClassGatherer: public QThread
38
38
Q_OBJECT
39
39
40
40
public:
41
- QgsPalettedRendererClassGatherer ( QgsRasterLayer *layer, int bandNumber, QgsColorRamp *ramp = nullptr )
41
+ QgsPalettedRendererClassGatherer ( QgsRasterLayer *layer, int bandNumber, const QgsPalettedRasterRenderer::ClassData &existingClasses, QgsColorRamp *ramp = nullptr )
42
42
: mLayer ( layer )
43
43
, mBandNumber ( bandNumber )
44
44
, mRamp ( ramp )
45
+ , mClasses ( existingClasses )
45
46
, mFeedback ( nullptr )
46
47
, mWasCanceled ( false )
47
48
{}
@@ -54,7 +55,25 @@ class QgsPalettedRendererClassGatherer: public QThread
54
55
mFeedback = new QgsRasterBlockFeedback ();
55
56
connect ( mFeedback , &QgsRasterBlockFeedback::progressChanged, this , &QgsPalettedRendererClassGatherer::progressChanged );
56
57
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
+
58
77
// be overly cautious - it's *possible* stop() might be called between deleting mFeedback and nulling it
59
78
mFeedbackMutex .lock ();
60
79
delete mFeedback ;
0 commit comments