Add tests for rendering with extent buffer

This commit is contained in:
JuhoErvasti 2024-12-04 09:33:51 +02:00 committed by Nyall Dawson
parent e4c1598720
commit 98d20ee479
4 changed files with 100 additions and 0 deletions

View File

@ -16,21 +16,27 @@ from qgis.PyQt.QtCore import QDir, QSize
from qgis.PyQt.QtGui import QColor
from qgis.core import (
edit,
Qgis,
QgsCategorizedSymbolRenderer,
QgsCentroidFillSymbolLayer,
QgsCoordinateReferenceSystem,
QgsFeature,
QgsFeatureRendererGenerator,
QgsFillSymbol,
QgsGeometry,
QgsGeometryGeneratorSymbolLayer,
QgsLineSymbol,
QgsMapClippingRegion,
QgsMapSettings,
QgsMarkerSymbol,
QgsPointXY,
QgsRectangle,
QgsRendererCategory,
QgsRuleBasedRenderer,
QgsSingleSymbolRenderer,
QgsSymbol,
QgsRenderContext,
QgsVectorLayer,
)
import unittest
@ -927,6 +933,100 @@ class TestQgsVectorLayerRenderer(QgisTestCase):
)
)
def testRenderWithExtentBuffer(self):
def createFeature(x: float, y: float) -> QgsFeature:
feat = QgsFeature()
feat.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(x, y)))
return feat
def createSymbol() -> QgsMarkerSymbol:
sym = QgsMarkerSymbol.createSimple({'color': '#33aa33', 'outline_style': 'no', 'size': '5'})
return sym
def createGeometryGenerator() -> QgsGeometryGeneratorSymbolLayer:
geomgen = QgsGeometryGeneratorSymbolLayer.create(
{'geometryModifier': 'make_point($x + if($x <= 0, 5, -5), $y)'}
)
geomgen.setSymbolType(QgsSymbol.SymbolType.Marker)
geomgen.setSubSymbol(QgsMarkerSymbol.createSimple({'color': '#ff00ff', 'outline_style': 'no', 'size': '6'}))
return geomgen
point_layer = QgsVectorLayer("Point?crs=EPSG:3857", "point layer", "memory")
with edit(point_layer):
point_layer.addFeature(createFeature(-15.999, 8))
point_layer.addFeature(createFeature(-16.001, 6))
point_layer.addFeature(createFeature(-13, 4))
point_layer.addFeature(createFeature(-10, 2))
point_layer.addFeature(createFeature(17, 0))
point_layer.addFeature(createFeature(4, -2))
point_layer.addFeature(createFeature(15.999, -4))
point_layer.addFeature(createFeature(17, -6))
point_layer.addFeature(createFeature(15.999, -8))
sym1 = createSymbol()
sym1.appendSymbolLayer(createGeometryGenerator())
renderer1 = QgsSingleSymbolRenderer(sym1)
point_layer.setRenderer(renderer1)
mapsettings = QgsMapSettings()
mapsettings.setOutputSize(QSize(400, 400))
mapsettings.setOutputDpi(96)
mapsettings.setDestinationCrs(QgsCoordinateReferenceSystem('EPSG:3857'))
mapsettings.setExtent(QgsRectangle(-10, -10, 10, 10))
mapsettings.setLayers([point_layer])
self.assertTrue(
self.render_map_settings_check(
'buffer_extent_zero',
'buffer_extent_zero',
mapsettings,
)
)
sym2 = createSymbol()
sym2.appendSymbolLayer(createGeometryGenerator())
sym2.setExtentBuffer(1)
renderer2 = QgsSingleSymbolRenderer(sym2)
point_layer.setRenderer(renderer2)
self.assertTrue(
self.render_map_settings_check(
'buffer_extent',
'buffer_extent',
mapsettings,
)
)
def testRenderWithExtentBufferNegative(self):
poly_layer = QgsVectorLayer(os.path.join(TEST_DATA_DIR, 'polys.shp'))
self.assertTrue(poly_layer.isValid())
sym1 = QgsFillSymbol.createSimple({'color': '#ff00ff', 'outline_color': '#000000', 'outline_width': '1'})
sym1.setExtentBuffer(-13.5)
renderer = QgsSingleSymbolRenderer(sym1)
poly_layer.setRenderer(renderer)
mapsettings = QgsMapSettings()
mapsettings.setOutputSize(QSize(400, 400))
mapsettings.setOutputDpi(96)
mapsettings.setDestinationCrs(QgsCoordinateReferenceSystem('EPSG:3857'))
mapsettings.setExtent(QgsRectangle(-13875783.2, 2266009.4, -8690110.7, 6673344.5))
mapsettings.setLayers([poly_layer])
self.assertTrue(
self.render_map_settings_check(
'negative_buffer_extent',
'negative_buffer_extent',
mapsettings
)
)
if __name__ == "__main__":
unittest.main()

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB