def testRenderFillLayerDisabled(self): """ test that rendering a fill symbol with disabled layer works""" layer = QgsSimpleFillSymbolLayer() layer.setEnabled(False) symbol = QgsFillSymbol() symbol.changeSymbolLayer(0, layer) image = QImage(200, 200, QImage.Format_RGB32) painter = QPainter() ms = QgsMapSettings() geom = QgsGeometry.fromWkt('Polygon ((0 0, 10 0, 10 10, 0 10, 0 0))') f = QgsFeature() f.setGeometry(geom) extent = geom.constGet().boundingBox() # buffer extent by 10% extent = extent.buffered((extent.height() + extent.width()) / 20.0) ms.setExtent(extent) ms.setOutputSize(image.size()) context = QgsRenderContext.fromMapSettings(ms) context.setPainter(painter) context.setScaleFactor(96 / 25.4) # 96 DPI painter.begin(image) image.fill(QColor(255, 255, 255)) symbol.startRender(context) symbol.renderFeature(f, context) symbol.stopRender(context) painter.end() self.assertTrue(self.imageCheck('symbol_layer', 'symbollayer_disabled', image))
def testGettersSetters(self): """ test base class getters/setters """ layer = QgsSimpleFillSymbolLayer() layer.setEnabled(False) self.assertFalse(layer.enabled()) layer.setEnabled(True) self.assertTrue(layer.enabled()) layer.setLocked(False) self.assertFalse(layer.isLocked()) layer.setLocked(True) self.assertTrue(layer.isLocked()) layer.setRenderingPass(5) self.assertEqual(layer.renderingPass(), 5)
def testClone(self): """ test that base symbol layer properties are cloned with layer """ layer = QgsSimpleFillSymbolLayer() layer.setEnabled(False) layer.setLocked(True) layer.setRenderingPass(5) symbol = QgsFillSymbol() symbol.changeSymbolLayer(0, layer) cloned_symbol = symbol.clone() cloned_layer = cloned_symbol.symbolLayer(0) self.assertFalse(cloned_layer.enabled()) self.assertTrue(cloned_layer.isLocked()) self.assertEqual(cloned_layer.renderingPass(), 5)
def testClone(self): """ test that base symbol layer properties are cloned with layer """ layer = QgsSimpleFillSymbolLayer() layer.setEnabled(False) layer.setLocked(True) layer.setRenderingPass(5) symbol = QgsFillSymbol() symbol.changeSymbolLayer(0, layer) cloned_symbol = symbol.clone() cloned_layer = cloned_symbol.symbolLayer(0) self.assertFalse(cloned_layer.enabled()) self.assertTrue(cloned_layer.isLocked()) self.assertEqual(cloned_layer.renderingPass(), 5)
def testGettersSetters(self): """ test base class getters/setters """ layer = QgsSimpleFillSymbolLayer() layer.setEnabled(False) self.assertFalse(layer.enabled()) layer.setEnabled(True) self.assertTrue(layer.enabled()) layer.setLocked(False) self.assertFalse(layer.isLocked()) layer.setLocked(True) self.assertTrue(layer.isLocked()) layer.setRenderingPass(5) self.assertEqual(layer.renderingPass(), 5)
def testSaveRestore(self): """ Test saving and restoring base symbol layer properties to xml""" layer = QgsSimpleFillSymbolLayer() layer.setEnabled(False) layer.setLocked(True) layer.setRenderingPass(5) symbol = QgsFillSymbol() symbol.changeSymbolLayer(0, layer) doc = QDomDocument("testdoc") elem = QgsSymbolLayerUtils.saveSymbol('test', symbol, doc, QgsReadWriteContext()) restored_symbol = QgsSymbolLayerUtils.loadSymbol(elem, QgsReadWriteContext()) restored_layer = restored_symbol.symbolLayer(0) self.assertFalse(restored_layer.enabled()) self.assertTrue(restored_layer.isLocked()) self.assertEqual(restored_layer.renderingPass(), 5)
def testSaveRestore(self): """ Test saving and restoring base symbol layer properties to xml""" layer = QgsSimpleFillSymbolLayer() layer.setEnabled(False) layer.setLocked(True) layer.setRenderingPass(5) symbol = QgsFillSymbol() symbol.changeSymbolLayer(0, layer) doc = QDomDocument("testdoc") elem = QgsSymbolLayerUtils.saveSymbol('test', symbol, doc, QgsReadWriteContext()) restored_symbol = QgsSymbolLayerUtils.loadSymbol(elem, QgsReadWriteContext()) restored_layer = restored_symbol.symbolLayer(0) self.assertFalse(restored_layer.enabled()) self.assertTrue(restored_layer.isLocked()) self.assertEqual(restored_layer.renderingPass(), 5)
def append_SimpleFillSymbolLayer(symbol, layer: SimpleFillSymbolLayer): """ Appends a SimpleFillSymbolLayer to a symbol """ fill_color = symbol_color_to_qcolor(layer.color) out = QgsSimpleFillSymbolLayer(fill_color) out.setEnabled(layer.enabled) out.setLocked(layer.locked) if isinstance(layer, SimpleFillSymbolLayer): if layer.outline_layer: if isinstance(layer.outline_layer, (SimpleLineSymbolLayer, CartographicLineSymbolLayer)): out.setStrokeColor(symbol_color_to_qcolor(layer.outline_layer.color)) out.setStrokeWidth(layer.outline_layer.width) out.setStrokeWidthUnit(QgsUnitTypes.RenderPoints) if isinstance(layer.outline_layer, SimpleLineSymbolLayer): out.setStrokeStyle(symbol_pen_to_qpenstyle(layer.outline_layer.line_type)) if isinstance(layer.outline_layer, CartographicLineSymbolLayer): out.setPenJoinStyle(symbol_pen_to_qpenjoinstyle(layer.outline_layer.join)) # better matching of null stroke color to QGIS symbology if out.strokeColor().alpha() == 0: out.setStrokeStyle(Qt.NoPen) # todo - change to new symbol layer if outline offset, template, etc set symbol.appendSymbolLayer(out) elif layer.outline_symbol: # outline is a symbol itself out.setStrokeStyle(Qt.NoPen) symbol.appendSymbolLayer(out) # get all layers from outline append_SymbolLayer_to_QgsSymbolLayer(symbol, layer.outline_symbol) else: out.setStrokeStyle(Qt.NoPen) symbol.appendSymbolLayer(out) elif isinstance(layer, ColorSymbol): out.setStrokeStyle(Qt.NoPen) symbol.appendSymbolLayer(out)
def testRenderFillLayerDisabled(self): """ test that rendering a fill symbol with disabled layer works""" layer = QgsSimpleFillSymbolLayer() layer.setEnabled(False) symbol = QgsFillSymbol() symbol.changeSymbolLayer(0, layer) image = QImage(200, 200, QImage.Format_RGB32) painter = QPainter() ms = QgsMapSettings() geom = QgsGeometry.fromWkt('Polygon ((0 0, 10 0, 10 10, 0 10, 0 0))') f = QgsFeature() f.setGeometry(geom) extent = geom.constGet().boundingBox() # buffer extent by 10% extent = extent.buffered((extent.height() + extent.width()) / 20.0) ms.setExtent(extent) ms.setOutputSize(image.size()) context = QgsRenderContext.fromMapSettings(ms) context.setPainter(painter) context.setScaleFactor(96 / 25.4) # 96 DPI painter.begin(image) image.fill(QColor(255, 255, 255)) symbol.startRender(context) symbol.renderFeature(f, context) symbol.stopRender(context) painter.end() self.assertTrue( self.imageCheck('symbol_layer', 'symbollayer_disabled', image))
def append_SimpleFillSymbolLayer( symbol, # pylint: disable=too-many-branches layer: SimpleFillSymbolLayer, context: Context): """ Appends a SimpleFillSymbolLayer to a symbol """ fill_color = symbol_color_to_qcolor(layer.color) out = QgsSimpleFillSymbolLayer(fill_color) out.setEnabled(layer.enabled) out.setLocked(layer.locked) if isinstance(layer, SimpleFillSymbolLayer): if layer.outline_layer: if isinstance( layer.outline_layer, (SimpleLineSymbolLayer, CartographicLineSymbolLayer)): out.setStrokeColor( symbol_color_to_qcolor(layer.outline_layer.color)) out.setStrokeWidth( context.convert_size(layer.outline_layer.width)) out.setStrokeWidthUnit(context.units) if isinstance(layer.outline_layer, SimpleLineSymbolLayer): out.setStrokeStyle( symbol_pen_to_qpenstyle(layer.outline_layer.line_type)) if isinstance(layer.outline_layer, CartographicLineSymbolLayer): out.setPenJoinStyle( symbol_pen_to_qpenjoinstyle(layer.outline_layer.join)) # better matching of null stroke color to QGIS symbology if out.strokeColor().alpha() == 0: out.setStrokeStyle(Qt.NoPen) # TODO try: if layer.outline_layer.offset: raise NotImplementedException( 'Fill outline offset not supported') except AttributeError: pass try: if layer.outline_layer.template: raise NotImplementedException( 'Fill outline template not supported') except AttributeError: pass try: if layer.outline_layer.decoration: raise NotImplementedException( 'Fill outline decoration not supported') except AttributeError: pass symbol.appendSymbolLayer(out) elif layer.outline_symbol: # outline is a symbol itself out.setStrokeStyle(Qt.NoPen) symbol.appendSymbolLayer(out) # get all layers from outline append_SymbolLayer_to_QgsSymbolLayer(symbol, layer.outline_symbol, context) else: out.setStrokeStyle(Qt.NoPen) symbol.appendSymbolLayer(out) elif isinstance(layer, ColorSymbol): out.setStrokeStyle(Qt.NoPen) symbol.appendSymbolLayer(out)