|
31 | 31 | from PyQt.QtGui import QImage, QColor, QPainter
|
32 | 32 |
|
33 | 33 | from qgis.core import (QgsGeometry,
|
| 34 | + QgsSymbolV2, |
| 35 | + QgsMapUnitScale, |
34 | 36 | QgsMarkerSymbolV2,
|
35 | 37 | QgsFillSymbolV2,
|
36 | 38 | QgsLineSymbolV2,
|
37 | 39 | QgsRenderContext,
|
38 | 40 | QgsFeature,
|
39 | 41 | QGis,
|
40 | 42 | QgsMapSettings,
|
41 |
| - QgsRenderChecker |
| 43 | + QgsRenderChecker, |
| 44 | + QgsSimpleMarkerSymbolLayerV2 |
42 | 45 | )
|
43 | 46 |
|
44 | 47 | from qgis.testing import unittest, start_app
|
@@ -183,5 +186,112 @@ def imageCheck(self, name, reference_image, image):
|
183 | 186 | return result
|
184 | 187 |
|
185 | 188 |
|
| 189 | +class TestQgsMarkerSymbolV2(unittest.TestCase): |
| 190 | + |
| 191 | + def setUp(self): |
| 192 | + self.report = "<h1>Python QgsMarkerSymbolV2 Tests</h1>\n" |
| 193 | + |
| 194 | + def tearDown(self): |
| 195 | + report_file_path = "%s/qgistest.html" % QDir.tempPath() |
| 196 | + with open(report_file_path, 'a') as report_file: |
| 197 | + report_file.write(self.report) |
| 198 | + |
| 199 | + def testSize(self): |
| 200 | + # test size and setSize |
| 201 | + |
| 202 | + # create a marker symbol with a single layer |
| 203 | + markerSymbol = QgsMarkerSymbolV2() |
| 204 | + markerSymbol.deleteSymbolLayer(0) |
| 205 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 10)) |
| 206 | + self.assertEqual(markerSymbol.size(), 10) |
| 207 | + markerSymbol.setSize(20) |
| 208 | + self.assertEqual(markerSymbol.size(), 20) |
| 209 | + self.assertEqual(markerSymbol.symbolLayer(0).size(), 20) |
| 210 | + |
| 211 | + # add additional layers |
| 212 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 10)) |
| 213 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 30)) |
| 214 | + self.assertEqual(markerSymbol.size(), 30) |
| 215 | + markerSymbol.setSize(3) |
| 216 | + self.assertEqual(markerSymbol.size(), 3) |
| 217 | + # layer sizes should maintain relative size |
| 218 | + self.assertEqual(markerSymbol.symbolLayer(0).size(), 2) |
| 219 | + self.assertEqual(markerSymbol.symbolLayer(1).size(), 1) |
| 220 | + self.assertEqual(markerSymbol.symbolLayer(2).size(), 3) |
| 221 | + |
| 222 | + def testAngle(self): |
| 223 | + # test angle and setAngle |
| 224 | + |
| 225 | + # create a marker symbol with a single layer |
| 226 | + markerSymbol = QgsMarkerSymbolV2() |
| 227 | + markerSymbol.deleteSymbolLayer(0) |
| 228 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 10, 90)) |
| 229 | + self.assertEqual(markerSymbol.angle(), 90) |
| 230 | + markerSymbol.setAngle(100) |
| 231 | + self.assertEqual(markerSymbol.angle(), 100) |
| 232 | + self.assertEqual(markerSymbol.symbolLayer(0).angle(), 100) |
| 233 | + |
| 234 | + # add additional layers |
| 235 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 10, 130)) |
| 236 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 10, 150)) |
| 237 | + # should take first layer's angle |
| 238 | + self.assertEqual(markerSymbol.angle(), 100) |
| 239 | + markerSymbol.setAngle(10) |
| 240 | + self.assertEqual(markerSymbol.angle(), 10) |
| 241 | + # layer angles should maintain relative angle |
| 242 | + self.assertEqual(markerSymbol.symbolLayer(0).angle(), 10) |
| 243 | + self.assertEqual(markerSymbol.symbolLayer(1).angle(), 40) |
| 244 | + self.assertEqual(markerSymbol.symbolLayer(2).angle(), 60) |
| 245 | + |
| 246 | + def testSizeUnit(self): |
| 247 | + # test sizeUnit and setSizeUnit |
| 248 | + |
| 249 | + # create a marker symbol with a single layer |
| 250 | + markerSymbol = QgsMarkerSymbolV2() |
| 251 | + markerSymbol.deleteSymbolLayer(0) |
| 252 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 10)) |
| 253 | + self.assertEqual(markerSymbol.sizeUnit(), QgsSymbolV2.MM) |
| 254 | + markerSymbol.setSizeUnit(QgsSymbolV2.MapUnit) |
| 255 | + self.assertEqual(markerSymbol.sizeUnit(), QgsSymbolV2.MapUnit) |
| 256 | + self.assertEqual(markerSymbol.symbolLayer(0).sizeUnit(), QgsSymbolV2.MapUnit) |
| 257 | + |
| 258 | + # add additional layers |
| 259 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 10)) |
| 260 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 30)) |
| 261 | + # should now be mixed size units |
| 262 | + self.assertEqual(markerSymbol.sizeUnit(), QgsSymbolV2.Mixed) |
| 263 | + markerSymbol.setSizeUnit(QgsSymbolV2.Pixel) |
| 264 | + self.assertEqual(markerSymbol.sizeUnit(), QgsSymbolV2.Pixel) |
| 265 | + # all layers should have size unit set |
| 266 | + self.assertEqual(markerSymbol.symbolLayer(0).sizeUnit(), QgsSymbolV2.Pixel) |
| 267 | + self.assertEqual(markerSymbol.symbolLayer(1).sizeUnit(), QgsSymbolV2.Pixel) |
| 268 | + self.assertEqual(markerSymbol.symbolLayer(2).sizeUnit(), QgsSymbolV2.Pixel) |
| 269 | + |
| 270 | + def testSizeMapUnitScale(self): |
| 271 | + # test sizeMapUnitScale and setSizeMapUnitScale |
| 272 | + |
| 273 | + # create a marker symbol with a single layer |
| 274 | + markerSymbol = QgsMarkerSymbolV2() |
| 275 | + markerSymbol.deleteSymbolLayer(0) |
| 276 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 10)) |
| 277 | + markerSymbol.symbolLayer(0).setSizeMapUnitScale(QgsMapUnitScale(10000, 20000)) |
| 278 | + self.assertEqual(markerSymbol.sizeMapUnitScale(), QgsMapUnitScale(10000, 20000)) |
| 279 | + markerSymbol.setSizeMapUnitScale(QgsMapUnitScale(1000, 2000)) |
| 280 | + self.assertEqual(markerSymbol.sizeMapUnitScale(), QgsMapUnitScale(1000, 2000)) |
| 281 | + self.assertEqual(markerSymbol.symbolLayer(0).sizeMapUnitScale(), QgsMapUnitScale(1000, 2000)) |
| 282 | + |
| 283 | + # add additional layers |
| 284 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 10)) |
| 285 | + markerSymbol.appendSymbolLayer(QgsSimpleMarkerSymbolLayerV2('star', QColor(255, 0, 0), QColor(0, 255, 0), 30)) |
| 286 | + # should take first layer's map unit scale |
| 287 | + self.assertEqual(markerSymbol.sizeMapUnitScale(), QgsMapUnitScale(1000, 2000)) |
| 288 | + markerSymbol.setSizeMapUnitScale(QgsMapUnitScale(3000, 4000)) |
| 289 | + self.assertEqual(markerSymbol.sizeMapUnitScale(), QgsMapUnitScale(3000, 4000)) |
| 290 | + # all layers should have size unit set |
| 291 | + self.assertEqual(markerSymbol.symbolLayer(0).sizeMapUnitScale(), QgsMapUnitScale(3000, 4000)) |
| 292 | + self.assertEqual(markerSymbol.symbolLayer(1).sizeMapUnitScale(), QgsMapUnitScale(3000, 4000)) |
| 293 | + self.assertEqual(markerSymbol.symbolLayer(2).sizeMapUnitScale(), QgsMapUnitScale(3000, 4000)) |
| 294 | + |
| 295 | + |
186 | 296 | if __name__ == '__main__':
|
187 | 297 | unittest.main()
|
0 commit comments