|
1 | 1 | import os
|
2 | 2 | import unittest
|
3 | 3 |
|
4 |
| -from qgis.core import QgsRasterLayer, QgsPoint, QgsMapLayerRegistry, QgsMapRenderer, QgsSingleBandGrayRenderer, QgsContrastEnhancement, QgsRasterTransparency, QgsRenderChecker |
5 | 4 | from PyQt4.QtCore import QFileInfo, QString, QStringList
|
| 5 | +from PyQt4 import QtGui |
| 6 | + |
| 7 | +from qgis.core import (QgsRasterLayer, |
| 8 | + QgsColorRampShader, |
| 9 | + QgsContrastEnhancement, |
| 10 | + QgsMapLayerRegistry, |
| 11 | + QgsMapRenderer, |
| 12 | + QgsPoint, |
| 13 | + QgsRasterShader, |
| 14 | + QgsRasterTransparency, |
| 15 | + QgsRenderChecker, |
| 16 | + QgsSingleBandGrayRenderer, |
| 17 | + QgsSingleBandPseudoColorRenderer) |
6 | 18 |
|
7 | 19 | # Convenience instances in case you may need them
|
8 | 20 | # not used in this test
|
@@ -104,5 +116,47 @@ def testTransparency(self):
|
104 | 116 | myResultFlag = myChecker.runTest( "raster_transparency_python" );
|
105 | 117 | assert myResultFlag, "Raster transparency rendering test failed"
|
106 | 118 |
|
| 119 | + def testShaderCrash(self): |
| 120 | + """Check if we assign a shader and then reassign it no crash occurs.""" |
| 121 | + myPath = os.path.abspath(os.path.join(__file__, '..', '..', '..', 'testdata', 'raster', 'band1_float32_noct_epsg4326.tif')) |
| 122 | + myFileInfo = QFileInfo(myPath) |
| 123 | + myBaseName = myFileInfo.baseName() |
| 124 | + myRasterLayer = QgsRasterLayer(myPath, myBaseName) |
| 125 | + myMessage = 'Raster not loaded: %s' % myPath |
| 126 | + assert myRasterLayer.isValid(), myMessage |
| 127 | + |
| 128 | + myRasterShader = QgsRasterShader() |
| 129 | + myColorRampShader = QgsColorRampShader() |
| 130 | + myColorRampShader.setColorRampType(QgsColorRampShader.INTERPOLATED) |
| 131 | + myItems = [] |
| 132 | + myItem = QgsColorRampShader.ColorRampItem(10, QtGui.QColor('#ffff00'), 'foo') |
| 133 | + myItems.append(myItem) |
| 134 | + myItem = QgsColorRampShader.ColorRampItem(100, QtGui.QColor('#ff00ff'), 'bar') |
| 135 | + myItems.append(myItem) |
| 136 | + myItem = QgsColorRampShader.ColorRampItem(1000, QtGui.QColor('#00ff00'), 'kazam') |
| 137 | + myItems.append(myItem) |
| 138 | + myColorRampShader.setColorRampItemList(myItems) |
| 139 | + myRasterShader.setRasterShaderFunction(myColorRampShader) |
| 140 | + myPseudoRenderer = QgsSingleBandPseudoColorRenderer(myRasterLayer.dataProvider(), 1, myRasterShader) |
| 141 | + myRasterLayer.setRenderer(myPseudoRenderer) |
| 142 | + |
| 143 | + ######## works first time ############# |
| 144 | + |
| 145 | + myRasterShader = QgsRasterShader() |
| 146 | + myColorRampShader = QgsColorRampShader() |
| 147 | + myColorRampShader.setColorRampType(QgsColorRampShader.INTERPOLATED) |
| 148 | + myItems = [] |
| 149 | + myItem = QgsColorRampShader.ColorRampItem(10, QtGui.QColor('#ffff00'), 'foo') |
| 150 | + myItems.append(myItem) |
| 151 | + myItem = QgsColorRampShader.ColorRampItem(100, QtGui.QColor('#ff00ff'), 'bar') |
| 152 | + myItems.append(myItem) |
| 153 | + myItem = QgsColorRampShader.ColorRampItem(1000, QtGui.QColor('#00ff00'), 'kazam') |
| 154 | + myItems.append(myItem) |
| 155 | + myColorRampShader.setColorRampItemList(myItems) |
| 156 | + myRasterShader.setRasterShaderFunction(myColorRampShader) |
| 157 | + ######## crash on next line ################## |
| 158 | + myPseudoRenderer = QgsSingleBandPseudoColorRenderer(myRasterLayer.dataProvider(), 1, myRasterShader) |
| 159 | + myRasterLayer.setRenderer(myPseudoRenderer) |
| 160 | + |
107 | 161 | if __name__ == '__main__':
|
108 | 162 | unittest.main()
|
0 commit comments