Ejemplo n.º 1
0
def create_elimlyr(canvas):
    elim_lyr = QgsVectorLayer(r"LineString?crs=epsg:4326&index=yes",
                                elimedge_lname, r"memory")
    p_elimedge = elim_lyr.dataProvider()
    QgsProject.instance().addMapLayer(elim_lyr, True)
    # Case of only one color (elimedge_mono set in global_vars)
    if elimedge_mono:
        rend_symb=QgsSymbol.defaultSymbol(elim_lyr.geometryType())
        rend_symb.setWidth(elimedge_wdt)
        rend_symb.setColor(QColor(elimedge_col))
        rend_symb.setOpacity(elimedge_opc)
        rend_elimedge = QgsSingleSymbolRenderer(rend_symb)
    # Case of multiple colors depending on the type of elimination
    else:
        rend_elimedge = QgsRuleBasedRenderer(QgsLineSymbol())
        edge_root_rule = rend_elimedge.rootRule()
        edge_rules = ((inter_rfu, "\"pb_type\" = '" + inter_rfu + "'", elimedge_col, elimedge_wdt),
                      (inter_new, "\"pb_type\" = '" + inter_new + "'", elimedge_col2, elimedge_wdt))
        for label, expression, color, width in edge_rules:
            rule = edge_root_rule.children()[0].clone()
            rule.setLabel(label)
            rule.setFilterExpression(expression)
            rule.symbol().setColor(QColor(color))
            rule.symbol().setWidth(width)
            rule.symbol().setOpacity(elimedge_opc)
            edge_root_rule.appendChild(rule)
        edge_root_rule.removeChildAt(0)
    elim_lyr.setRenderer(rend_elimedge)
    p_elimedge.addAttributes(elimlyr_atts)
    elim_lyr.updateFields()
    # Refresh the canvas
    elim_lyr.triggerRepaint()
    return elim_lyr