def testRenderLineLayerDisabled(self): """ test that rendering a line symbol with disabled layer works""" layer = QgsSimpleLineSymbolLayer() layer.setEnabled(False) symbol = QgsLineSymbol() symbol.changeSymbolLayer(0, layer) image = QImage(200, 200, QImage.Format_RGB32) painter = QPainter() ms = QgsMapSettings() geom = QgsGeometry.fromWkt('LineString (0 0,3 4,4 3)') 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_CartographicLineSymbolLayer(symbol, layer: CartographicLineSymbolLayer): """ Appends a CartographicLineSymbolLayer to a symbol """ color = symbol_color_to_qcolor(layer.color) out = QgsSimpleLineSymbolLayer(color) out.setEnabled(layer.enabled) out.setLocked(layer.locked) out.setWidth(layer.width) out.setWidthUnit(QgsUnitTypes.RenderPoints) out.setPenJoinStyle(symbol_pen_to_qpenjoinstyle(layer.join)) out.setPenCapStyle(symbol_pen_to_qpencapstyle(layer.cap)) if layer.template is not None: apply_template_to_LineSymbolLayer_custom_dash(layer.template, out) # better matching of null stroke color to QGIS symbology if out.color().alpha() == 0: out.setPenStyle(Qt.NoPen) out.setOffset(layer.offset) out.setOffsetUnit(QgsUnitTypes.RenderPoints) symbol.appendSymbolLayer(out) if layer.decoration is not None: append_Decorations(symbol, layer.decoration)
def append_CartographicLineSymbolLayer(symbol, layer): """ Appends a CartographicLineSymbolLayer to a symbol """ color = symbol_color_to_qcolor(layer.color) out = QgsSimpleLineSymbolLayer(color) out.setEnabled(layer.enabled) out.setLocked(layer.locked) out.setWidth(points_to_mm(layer.width)) out.setPenJoinStyle(symbol_pen_to_qpenjoinstyle(layer.join)) out.setPenCapStyle(symbol_pen_to_qpencapstyle(layer.cap)) if layer.pattern_parts: interval = layer.pattern_interval dash_vector = [] for part in layer.pattern_parts: dash_vector.append(points_to_mm(part[0] * interval)) dash_vector.append(points_to_mm(part[1] * interval)) out.setCustomDashVector(dash_vector) out.setUseCustomDashPattern(True) # better matching of null stroke color to QGIS symbology if out.color().alpha() == 0: out.setPenStyle(Qt.NoPen) if layer.marker_positions or layer.marker: raise NotImplementedException( 'Cartographic line start/end markers are not yet supported') # todo - change to new symbol layer if outline offset set symbol.appendSymbolLayer(out)
def append_CartographicLineSymbolLayer(symbol, layer: CartographicLineSymbolLayer, context: Context): """ Appends a CartographicLineSymbolLayer to a symbol """ color = symbol_color_to_qcolor(layer.color) out = QgsSimpleLineSymbolLayer(color) out.setEnabled(layer.enabled) out.setLocked(layer.locked) out.setWidth(context.convert_size(max( 0, layer.width))) # sometimes lines have negative width? out.setWidthUnit(context.units) out.setPenJoinStyle(symbol_pen_to_qpenjoinstyle(layer.join)) out.setPenCapStyle(symbol_pen_to_qpencapstyle(layer.cap)) if layer.template is not None: apply_template_to_LineSymbolLayer_custom_dash(layer.template, out, context) # better matching of null stroke color to QGIS symbology if out.color().alpha() == 0: out.setPenStyle(Qt.NoPen) out.setOffset(context.convert_size(layer.offset)) out.setOffsetUnit(context.units) symbol.appendSymbolLayer(out) if layer.decoration is not None: append_Decorations(symbol, layer.decoration, context)
def append_SimpleLineSymbolLayer(symbol, layer): """ Appends a SimpleLineSymbolLayer to a symbol """ color = symbol_color_to_qcolor(layer.color) out = QgsSimpleLineSymbolLayer(color) out.setEnabled(layer.enabled) out.setLocked(layer.locked) out.setWidth(points_to_mm(layer.width)) out.setPenStyle(symbol_pen_to_qpenstyle(layer.line_type)) # out.setPenJoinStyle(symbol_pen_to_qpenjoinstyle(layer.join)) # better matching of null stroke color to QGIS symbology if out.color().alpha() == 0: out.setPenStyle(Qt.NoPen) # todo - change to new symbol layer if outline offset set symbol.appendSymbolLayer(out)
def append_SimpleLineSymbolLayer(symbol, layer, context: Context): """ Appends a SimpleLineSymbolLayer to a symbol """ color = symbol_color_to_qcolor(layer.color) out = QgsSimpleLineSymbolLayer(color) out.setEnabled(layer.enabled) out.setLocked(layer.locked) out.setWidth(context.convert_size(max( 0, layer.width))) # sometimes lines have negative width? out.setWidthUnit(context.units) out.setPenStyle(symbol_pen_to_qpenstyle(layer.line_type)) # better matching of null stroke color to QGIS symbology if out.color().alpha() == 0: out.setPenStyle(Qt.NoPen) symbol.appendSymbolLayer(out)