@@ -85,22 +85,31 @@ QgsRasterLayer::QgsRasterLayer(
mInvertColor( false )
{
mRasterType = QgsRasterLayer::GrayOrUndefined;
mRedBandName = TRSTRING_NOT_SET;
mGreenBandName = TRSTRING_NOT_SET;
mBlueBandName = TRSTRING_NOT_SET;
mGrayBandName = TRSTRING_NOT_SET;
mTransparencyBandName = TRSTRING_NOT_SET;
mUserDefinedRGBMinimumMaximum = false ; // defaults needed to bypass enhanceContrast
mUserDefinedGrayMinimumMaximum = false ;
mRGBMinimumMaximumEstimated = true ;
mGrayMinimumMaximumEstimated = true ;
mDrawingStyle = QgsRasterLayer::UndefinedDrawingStyle;
mContrastEnhancementAlgorithm = QgsContrastEnhancement::NoEnhancement;
mColorShadingAlgorithm = QgsRasterLayer::UndefinedShader;
mRasterShader = new QgsRasterShader ();
if ( loadDefaultStyleFlag )
{
bool defaultLoadedFlag = false ;
loadDefaultStyle ( defaultLoadedFlag );
if ( defaultLoadedFlag )
{
return ;
}
}
mHasPyramids = false ;
mNoDataValue = -9999 ;
mValidNoDataValue = false ;
mGdalBaseDataset = 0 ;
mGdalDataset = 0 ;
// Initialise the affine transform matrix
mGeoTransform [0 ] = 0 ;
@@ -121,6 +130,18 @@ QgsRasterLayer::QgsRasterLayer(
if ( ! path.isEmpty () )
{
readFile ( path ); // XXX check for failure?
// readFile() is really an extension of the constructor as many imporant fields are set in this method
// loadDefaultStyle() can not be called before the layer has actually be opened
if ( loadDefaultStyleFlag )
{
bool defaultLoadedFlag = false ;
loadDefaultStyle ( defaultLoadedFlag );
if ( defaultLoadedFlag )
{
return ;
}
}
}
} // QgsRasterLayer ctor
@@ -199,6 +220,10 @@ QgsRasterLayer::~QgsRasterLayer()
if ( mGdalBaseDataset )
{
GDALDereferenceDataset ( mGdalBaseDataset );
}
if ( mGdalDataset )
{
GDALClose ( mGdalDataset );
}
}
@@ -3162,8 +3187,6 @@ void QgsRasterLayer::setColorShadingAlgorithm( ColorShadingAlgorithm theShadingA
mRasterShader = new QgsRasterShader ();
}
mColorShadingAlgorithm = theShadingAlgorithm;
switch ( theShadingAlgorithm )
{
case PseudoColorShader:
@@ -3182,6 +3205,9 @@ void QgsRasterLayer::setColorShadingAlgorithm( ColorShadingAlgorithm theShadingA
mRasterShader ->setRasterShaderFunction ( new QgsRasterShaderFunction () );
break ;
}
// Set the class variable after the call to setRasterShader(), so memory recovery can happen
mColorShadingAlgorithm = theShadingAlgorithm;
}
QgsDebugMsg ( " mColorShadingAlgorithm = " + QString::number ( theShadingAlgorithm ) );
}
@@ -3378,6 +3404,12 @@ void QgsRasterLayer::setNoDataValue( double theNoDataValue )
void QgsRasterLayer::setRasterShaderFunction ( QgsRasterShaderFunction* theFunction )
{
// Free old shader if it is not a userdefined shader
if ( mColorShadingAlgorithm != QgsRasterLayer::UserDefinedShader && 0 != mRasterShader ->rasterShaderFunction () )
{
delete ( mRasterShader ->rasterShaderFunction () );
}
if ( theFunction )
{
mRasterShader ->setRasterShaderFunction ( theFunction );
@@ -3387,7 +3419,7 @@ void QgsRasterLayer::setRasterShaderFunction( QgsRasterShaderFunction* theFuncti
{
// If NULL as passed in, set a default shader function to prevent segfaults
mRasterShader ->setRasterShaderFunction ( new QgsRasterShaderFunction () );
mColorShadingAlgorithm = QgsRasterLayer::UserDefinedShader ;
mColorShadingAlgorithm = QgsRasterLayer::UndefinedShader ;
}
}
@@ -5175,6 +5207,8 @@ bool QgsRasterLayer::readFile( QString const &theFilename )
// Set up a new color ramp shader
setColorShadingAlgorithm ( ColorRampShader );
QgsColorRampShader* myColorRampShader = ( QgsColorRampShader* ) mRasterShader ->rasterShaderFunction ();
// TODO: Make sure the set algorithm and cast was successful,
// e.g., if ( 0 != myColorRampShader && myColorRampShader->shaderTypeAsString == "ColorRampShader" )
myColorRampShader->setColorRampType ( QgsColorRampShader::INTERPOLATED );
myColorRampShader->setColorRampItemList ( *colorTable ( 1 ) );
}