Skip to content

Commit 239b342

Browse files
committed
[FEATURE] Raster stretch toolbar actions support for pseudocolor renderer
1 parent 5ece689 commit 239b342

File tree

1 file changed

+41
-7
lines changed

1 file changed

+41
-7
lines changed

src/core/raster/qgsrasterlayer.cpp

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -910,24 +910,42 @@ void QgsRasterLayer::setContrastEnhancement( QgsContrastEnhancement::ContrastEnh
910910
QgsRasterMinMaxOrigin myMinMaxOrigin;
911911
QgsRasterRenderer* myRasterRenderer = nullptr;
912912
QgsSingleBandGrayRenderer* myGrayRenderer = nullptr;
913+
QgsSingleBandPseudoColorRenderer* myPseudoColorRenderer = nullptr;
913914
QgsMultiBandColorRenderer* myMultiBandRenderer = nullptr;
914915
QString rendererType = rasterRenderer->type();
915916
if ( rendererType == QLatin1String( "singlebandgray" ) )
916917
{
917918
myGrayRenderer = dynamic_cast<QgsSingleBandGrayRenderer*>( rasterRenderer );
918-
if ( !myGrayRenderer ) return;
919+
if ( !myGrayRenderer )
920+
{
921+
return;
922+
}
919923
myBands << myGrayRenderer->grayBand();
920924
myRasterRenderer = myGrayRenderer;
921925
myMinMaxOrigin = myGrayRenderer->minMaxOrigin();
922926
}
923927
else if ( rendererType == QLatin1String( "multibandcolor" ) )
924928
{
925929
myMultiBandRenderer = dynamic_cast<QgsMultiBandColorRenderer*>( rasterRenderer );
926-
if ( !myMultiBandRenderer ) return;
930+
if ( !myMultiBandRenderer )
931+
{
932+
return;
933+
}
927934
myBands << myMultiBandRenderer->redBand() << myMultiBandRenderer->greenBand() << myMultiBandRenderer->blueBand();
928935
myRasterRenderer = myMultiBandRenderer;
929936
myMinMaxOrigin = myMultiBandRenderer->minMaxOrigin();
930937
}
938+
else if ( rendererType == QLatin1String( "singlebandpseudocolor" ) )
939+
{
940+
myPseudoColorRenderer = dynamic_cast<QgsSingleBandPseudoColorRenderer*>( rasterRenderer );
941+
if ( !myPseudoColorRenderer )
942+
{
943+
return;
944+
}
945+
myBands << myPseudoColorRenderer->band();
946+
myRasterRenderer = myPseudoColorRenderer;
947+
myMinMaxOrigin = myPseudoColorRenderer->minMaxOrigin();
948+
}
931949

932950
Q_FOREACH ( int myBand, myBands )
933951
{
@@ -941,9 +959,25 @@ void QgsRasterLayer::setContrastEnhancement( QgsContrastEnhancement::ContrastEnh
941959
double max;
942960
computeMinMax( myBand, myMinMaxOrigin, theLimits, theExtent, theSampleSize, min, max );
943961

944-
myEnhancement->setMinimumValue( min );
945-
myEnhancement->setMaximumValue( max );
946-
myEnhancements.append( myEnhancement );
962+
if ( rendererType == QLatin1String( "singlebandpseudocolor" ) )
963+
{
964+
myPseudoColorRenderer->setClassificationMin( min );
965+
myPseudoColorRenderer->setClassificationMax( max );
966+
if ( myPseudoColorRenderer->shader() )
967+
{
968+
QgsColorRampShader* colorRampShader = dynamic_cast<QgsColorRampShader*>( myPseudoColorRenderer->shader()->rasterShaderFunction() );
969+
if ( colorRampShader )
970+
{
971+
colorRampShader->classifyColorRamp( myPseudoColorRenderer->band(), theExtent, myPseudoColorRenderer->input() );
972+
}
973+
}
974+
}
975+
else
976+
{
977+
myEnhancement->setMinimumValue( min );
978+
myEnhancement->setMaximumValue( max );
979+
myEnhancements.append( myEnhancement );
980+
}
947981
}
948982
else
949983
{
@@ -1068,8 +1102,8 @@ void QgsRasterLayer::refreshRendererIfNeeded( QgsRasterRenderer* rasterRenderer,
10681102
}
10691103

10701104
QgsSingleBandPseudoColorRenderer* r = dynamic_cast<QgsSingleBandPseudoColorRenderer*>( renderer() );
1071-
dynamic_cast<QgsSingleBandPseudoColorRenderer*>( renderer() )->setClassificationMin( min );
1072-
dynamic_cast<QgsSingleBandPseudoColorRenderer*>( renderer() )->setClassificationMax( max );
1105+
r->setClassificationMin( min );
1106+
r->setClassificationMax( max );
10731107

10741108
if ( r->shader() )
10751109
{

0 commit comments

Comments
 (0)