Martin, Peter, Duarte, Borys, Success!
Below the working code: ======================================================================= # # Display the selected colour table: # # - tell the layer to use a QgsColorRampShader function theLayer.setColorShadingAlgorithm( QgsRasterLayer.ColorRampShader ) # # - get a pointer to the raster shader function (QgsColorRampShader) myColorRampShader = theLayer.rasterShader().rasterShaderFunction() # # - set parameters for the QgsColorRampShader function myColorRampShader.setColorRampType( QgsColorRampShader.DISCRETE ) myColorRampShader.setColorRampItemList( theTBL ) theLayer.setDrawingStyle( QgsRasterLayer.SingleBandPseudoColor ) # # - refresh map & legend theLayer.setCacheImage( None ) theLayer.triggerRepaint() self.iface.legendInterface().refreshLayerSymbology( theLayer ) # # - tell QGIS that it needs to ask user to save changes self.iface.mapCanvas().setDirty( True ) ======================================================================= Something is still bothering me: what does happen if the raster is cached before I set the cache to None? I've tried the following code: # - backup current cache state bQI = theLayer.cacheImage() if bQI != None: theLayer.setCacheImage( None ) ... refresh raster ... # - restore the state of image cache theLayer.setCacheImage( bQI ) It runs with no error, but on exit of QGIS it bombs out! Any idea? It is correct to try to backup/restore the cache state? Thanks a lot for helping me on this matter for the last few weeks... Benoit > -----Original Message----- > From: [email protected] > [mailto:[email protected]]on Behalf Of Benoit EXIGE > Sent: Tuesday, 10 August 2010 22:03 > To: Martin Dobias > Cc: [email protected] > Subject: Re: [Qgis-developer] How to load a colour table on a > raster,programmatically (in python)? > > > Martin, > > Thanks for the answers. I will test them tomorrow. > > As for QgsLegendInterface the problem was that I did not know how to > use it correctly! > > Cheers, > Benoit > > > On 10 Aug 2010, at 21:52, Martin Dobias <[email protected]> wrote: > > > On Mon, Aug 9, 2010 at 11:01 PM, Benoit de Cabissole > <[email protected] > > > wrote: > >> Colormap is given to the raster (and into the coloramp tab in the > >> raster > >> properties). The colour ramp attribute is also reflected in the > >> symbology > >> tab: color map combobox set to colormap. So the raster is given the > >> correct > >> info. So far so good. But, the legend does not refresh to show the > >> change to > >> colormap: the raster icon and raster colour bar stay grey. > > > > Use QgsLegendInterface class to refresh the symbology: > > > > iface.legendInterface().refreshLayerSymbology(layer) > > > > > >> The main raster (the only layer in my test) does not refresh either > >> in the > >> QGIS map canvas window. Only if I move it will it refresh and > >> display the > >> colour map. > > > > Possibly you're using caching. Make sure to clear the cached image > > before calling triggerRepaint(): > > > > layer.setCacheImage(None) > > > >> The only way to refresh the legend to the correct info seems to > >> open the > >> raster properties box and click ok. (I've tried the > >> QgsLegendInterface, but > >> I have problems to make it work!) > > > > What probles with QgsLegendInterface did you have? > > > > > > Regards > > Martin > _______________________________________________ > Qgis-developer mailing list > [email protected] > http://lists.osgeo.org/mailman/listinfo/qgis-developer _______________________________________________ Qgis-developer mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/qgis-developer
