[QGIS Commit] r10196 - branches/Version-1_0/src/core/raster
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Wed Feb 18 02:43:13 EST 2009
Author: timlinux
Date: 2009-02-18 02:43:12 -0500 (Wed, 18 Feb 2009)
New Revision: 10196
Modified:
branches/Version-1_0/src/core/raster/qgsrasterlayer.cpp
Log:
Backported raster fixes for ticket #1480 to stable branch
Modified: branches/Version-1_0/src/core/raster/qgsrasterlayer.cpp
===================================================================
--- branches/Version-1_0/src/core/raster/qgsrasterlayer.cpp 2009-02-17 19:46:46 UTC (rev 10195)
+++ branches/Version-1_0/src/core/raster/qgsrasterlayer.cpp 2009-02-18 07:43:12 UTC (rev 10196)
@@ -85,23 +85,32 @@
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;
mGeoTransform[1] = 1;
@@ -121,6 +130,18 @@
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 @@
if ( mGdalBaseDataset )
{
GDALDereferenceDataset( mGdalBaseDataset );
+ }
+
+ if( mGdalDataset )
+ {
GDALClose( mGdalDataset );
}
}
@@ -377,7 +402,7 @@
} // each loaded GDAL driver
// can't forget the default case
- theFileFiltersString += catchallFilter.join( ", " ) + " " + tr( "and all other files" ) + " (*)";
+ theFileFiltersString += tr( "%1 and all other files (*)" ).arg( catchallFilter.join( ", " ) );
QgsDebugMsg( "Raster filter list built: " + theFileFiltersString );
} // buildSupportedRasterFileFilter_()
@@ -1799,7 +1824,7 @@
// Outside the raster
for ( int i = 1; i <= GDALGetRasterCount( mGdalDataset ); i++ )
{
- theResults[tr( "Band" ) + QString::number( i )] = tr( "out of extent" );
+ theResults[ tr( "Band%1" ).arg( i )] = tr( "out of extent" );
}
}
else
@@ -1843,7 +1868,7 @@
{
v.setNum( value );
}
- theResults[tr( "Band" ) + QString::number( i )] = v;
+ theResults[tr( "Band%1" ).arg( i )] = v;
CPLFree( data );
}
@@ -2511,8 +2536,10 @@
myMetadata += tr( "Dimensions:" );
myMetadata += "</p>\n";
myMetadata += "<p>";
- myMetadata += tr( "X: " ) + QString::number( GDALGetRasterXSize( mGdalDataset ) ) +
- tr( " Y: " ) + QString::number( GDALGetRasterYSize( mGdalDataset ) ) + tr( " Bands: " ) + QString::number( GDALGetRasterCount( mGdalDataset ) );
+ myMetadata += tr( "X: %1 Y: %2 Bands: %3" )
+ .arg( GDALGetRasterXSize( mGdalDataset ) )
+ .arg( GDALGetRasterYSize( mGdalDataset ) )
+ .arg( GDALGetRasterCount( mGdalDataset ) );
myMetadata += "</p>\n";
//just use the first band
@@ -2607,14 +2634,14 @@
// output coordinate system
// TODO: this is not related to layer, to be removed? [MD]
- /*
- myMetadata += "<tr><td class=\"glossy\">";
- myMetadata += tr("Project Spatial Reference System: ");
- myMetadata += "</p>\n";
- myMetadata += "<p>";
- myMetadata += mCoordinateTransform->destCRS().toProj4();
- myMetadata += "</p>\n";
- */
+#if 0
+ myMetadata += "<tr><td class=\"glossy\">";
+ myMetadata += tr( "Project Spatial Reference System: " );
+ myMetadata += "</p>\n";
+ myMetadata += "<p>";
+ myMetadata += mCoordinateTransform->destCRS().toProj4();
+ myMetadata += "</p>\n";
+#endif
if ( mProviderKey.isEmpty() )
{
@@ -3160,8 +3187,6 @@
mRasterShader = new QgsRasterShader();
}
- mColorShadingAlgorithm = theShadingAlgorithm;
-
switch ( theShadingAlgorithm )
{
case PseudoColorShader:
@@ -3180,6 +3205,9 @@
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 ) );
}
@@ -3376,6 +3404,12 @@
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 );
@@ -3385,7 +3419,7 @@
{
//If NULL as passed in, set a default shader function to prevent segfaults
mRasterShader->setRasterShaderFunction( new QgsRasterShaderFunction() );
- mColorShadingAlgorithm = QgsRasterLayer::UserDefinedShader;
+ mColorShadingAlgorithm = QgsRasterLayer::UndefinedShader;
}
}
@@ -5173,6 +5207,8 @@
//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 ) );
}
More information about the QGIS-commit
mailing list