Skip to content

Commit

Permalink
[FEATURE] Raster stretch toolbar actions support for pseudocolor rend…
Browse files Browse the repository at this point in the history
…erer
  • Loading branch information
nirvn committed Dec 27, 2016
1 parent 5ece689 commit 239b342
Showing 1 changed file with 41 additions and 7 deletions.
48 changes: 41 additions & 7 deletions src/core/raster/qgsrasterlayer.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -910,24 +910,42 @@ void QgsRasterLayer::setContrastEnhancement( QgsContrastEnhancement::ContrastEnh
QgsRasterMinMaxOrigin myMinMaxOrigin; QgsRasterMinMaxOrigin myMinMaxOrigin;
QgsRasterRenderer* myRasterRenderer = nullptr; QgsRasterRenderer* myRasterRenderer = nullptr;
QgsSingleBandGrayRenderer* myGrayRenderer = nullptr; QgsSingleBandGrayRenderer* myGrayRenderer = nullptr;
QgsSingleBandPseudoColorRenderer* myPseudoColorRenderer = nullptr;
QgsMultiBandColorRenderer* myMultiBandRenderer = nullptr; QgsMultiBandColorRenderer* myMultiBandRenderer = nullptr;
QString rendererType = rasterRenderer->type(); QString rendererType = rasterRenderer->type();
if ( rendererType == QLatin1String( "singlebandgray" ) ) if ( rendererType == QLatin1String( "singlebandgray" ) )
{ {
myGrayRenderer = dynamic_cast<QgsSingleBandGrayRenderer*>( rasterRenderer ); myGrayRenderer = dynamic_cast<QgsSingleBandGrayRenderer*>( rasterRenderer );
if ( !myGrayRenderer ) return; if ( !myGrayRenderer )
{
return;
}
myBands << myGrayRenderer->grayBand(); myBands << myGrayRenderer->grayBand();
myRasterRenderer = myGrayRenderer; myRasterRenderer = myGrayRenderer;
myMinMaxOrigin = myGrayRenderer->minMaxOrigin(); myMinMaxOrigin = myGrayRenderer->minMaxOrigin();
} }
else if ( rendererType == QLatin1String( "multibandcolor" ) ) else if ( rendererType == QLatin1String( "multibandcolor" ) )
{ {
myMultiBandRenderer = dynamic_cast<QgsMultiBandColorRenderer*>( rasterRenderer ); myMultiBandRenderer = dynamic_cast<QgsMultiBandColorRenderer*>( rasterRenderer );
if ( !myMultiBandRenderer ) return; if ( !myMultiBandRenderer )
{
return;
}
myBands << myMultiBandRenderer->redBand() << myMultiBandRenderer->greenBand() << myMultiBandRenderer->blueBand(); myBands << myMultiBandRenderer->redBand() << myMultiBandRenderer->greenBand() << myMultiBandRenderer->blueBand();
myRasterRenderer = myMultiBandRenderer; myRasterRenderer = myMultiBandRenderer;
myMinMaxOrigin = myMultiBandRenderer->minMaxOrigin(); myMinMaxOrigin = myMultiBandRenderer->minMaxOrigin();
} }
else if ( rendererType == QLatin1String( "singlebandpseudocolor" ) )
{
myPseudoColorRenderer = dynamic_cast<QgsSingleBandPseudoColorRenderer*>( rasterRenderer );
if ( !myPseudoColorRenderer )
{
return;
}
myBands << myPseudoColorRenderer->band();
myRasterRenderer = myPseudoColorRenderer;
myMinMaxOrigin = myPseudoColorRenderer->minMaxOrigin();
}


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


myEnhancement->setMinimumValue( min ); if ( rendererType == QLatin1String( "singlebandpseudocolor" ) )
myEnhancement->setMaximumValue( max ); {
myEnhancements.append( myEnhancement ); myPseudoColorRenderer->setClassificationMin( min );
myPseudoColorRenderer->setClassificationMax( max );
if ( myPseudoColorRenderer->shader() )
{
QgsColorRampShader* colorRampShader = dynamic_cast<QgsColorRampShader*>( myPseudoColorRenderer->shader()->rasterShaderFunction() );
if ( colorRampShader )
{
colorRampShader->classifyColorRamp( myPseudoColorRenderer->band(), theExtent, myPseudoColorRenderer->input() );
}
}
}
else
{
myEnhancement->setMinimumValue( min );
myEnhancement->setMaximumValue( max );
myEnhancements.append( myEnhancement );
}
} }
else else
{ {
Expand Down Expand Up @@ -1068,8 +1102,8 @@ void QgsRasterLayer::refreshRendererIfNeeded( QgsRasterRenderer* rasterRenderer,
} }


QgsSingleBandPseudoColorRenderer* r = dynamic_cast<QgsSingleBandPseudoColorRenderer*>( renderer() ); QgsSingleBandPseudoColorRenderer* r = dynamic_cast<QgsSingleBandPseudoColorRenderer*>( renderer() );
dynamic_cast<QgsSingleBandPseudoColorRenderer*>( renderer() )->setClassificationMin( min ); r->setClassificationMin( min );
dynamic_cast<QgsSingleBandPseudoColorRenderer*>( renderer() )->setClassificationMax( max ); r->setClassificationMax( max );


if ( r->shader() ) if ( r->shader() )
{ {
Expand Down

0 comments on commit 239b342

Please sign in to comment.