示例#1
0
 def __init__(self, iface, name, qcolor, width, attributes, layer_group=None, visible=True):
     "..."
     WGS84Layer.__init__(self, iface, name, "LineString", visible, layer_group)
     arrow_layer = QgsArrowSymbolLayer()
     arrow_layer.setColor(qcolor)
     arrow_layer.setArrowWidth(width)
     arrow_layer.setArrowStartWidth(width)
     arrow_layer.setHeadThickness(width * 2.0)
     self.layer.renderer().symbol().changeSymbolLayer(0, arrow_layer)
     WGS84Layer.refresh_legend(self)
     self.set_attributes(attributes)
    def test_subsymbol(self):
        """
        Test rendering a generator in a subsymbol of another symbol
        """
        sym = QgsLineSymbol()
        arrow = QgsArrowSymbolLayer()
        arrow.setIsRepeated(False)
        arrow.setArrowStartWidth(10)
        arrow.setArrowWidth(5)
        arrow.setHeadLength(20)
        arrow.setHeadThickness(10)

        sym.changeSymbolLayer(0, arrow)

        self.lines_layer.renderer().setSymbol(sym)

        # here "$geometry" must refer to the created ARROW shape, NOT the original feature line geometry!
        generator_layer = QgsGeometryGeneratorSymbolLayer.create(
            {'geometryModifier': 'buffer($geometry, 3)'})
        generator_layer.setSymbolType(QgsSymbol.Fill)
        generator_layer.setUnits(QgsUnitTypes.RenderMillimeters)
        self.assertIsNotNone(generator_layer.subSymbol())

        generator_layer.subSymbol().symbolLayer(0).setColor(
            QColor(255, 255, 255))
        generator_layer.subSymbol().symbolLayer(0).setStrokeColor(
            QColor(0, 0, 0))
        generator_layer.subSymbol().symbolLayer(0).setStrokeWidth(2)

        sub_symbol = QgsFillSymbol()
        sub_symbol.changeSymbolLayer(0, generator_layer)
        arrow.setSubSymbol(sub_symbol)

        rendered_layers = [self.lines_layer]
        self.mapsettings.setLayers(rendered_layers)

        renderchecker = QgsMultiRenderChecker()
        renderchecker.setMapSettings(self.mapsettings)
        renderchecker.setControlName('expected_geometrygenerator_subsymbol')
        res = renderchecker.runTest('geometrygenerator_subsymbol')
        self.report += renderchecker.report()
        self.assertTrue(res)