6 votos

Cómo definir el color del borde de la regla basada en el estilo de uso de PyQGIS?

Yo uso el siguiente para crear una Regla basada en el estilo de una capa dada, que incluye la definición de una etiqueta, la expresión y el color de relleno:

from PyQt4.QtGui import QColor

layer = qgis.utils.iface.activeLayer()
style_rules = (
    ('First', 'expression_1', '#dbffdb'),
    ('Second', 'expression_2', '#f0ab64'),        
)
symbol = QgsSymbolV2.defaultSymbol(layer.geometryType())
renderer = QgsRuleBasedRendererV2(symbol)
root_rule = renderer.rootRule()
for label, expression, color_name in style_rules:
    rule = root_rule.children()[0].clone()
    rule.setLabel(label)
    rule.setFilterExpression(expression)
    rule.symbol().setColor(QColor(color_name))
    root_rule.appendChild(rule)

root_rule.removeChildAt(0)
layer.setRendererV2(renderer)
layer.triggerRepaint()

Puedo definir el color de la frontera usando el método anterior? Si no, ¿cómo podría recorrer el símbolo de capas y aplicar un borde de color después de una regla basada en el estilo se ha establecido?

Traté de incorporar en style_rules pero no se como configurarlo (en este caso, sólo quiero que el color del borde para que coincida con el relleno de polígono):

style_rules = (
    ('First', 'expression_1', '#dbffdb', '#dbffdb'),
    ('Second', 'expression_2', '#f0ab64', '#f0ab64'),        
)
for label, expression, color_name, color_border in style_rules:
    rule = root_rule.children()[0].clone()
    rule.setLabel(label)
    rule.setFilterExpression(expression)
    rule.symbol().setColor(QColor(color_name))
    root_rule.appendChild(rule)

EDITAR:

He mirado en la QgsSymbolV2 y QgsRuleBasedRendererV2 de clases, pero ninguno de los dos parece tener todo lo relacionado a la frontera. El QgsSimpleFillSymbolLayerV2 clase tiene un borderColor función, así que ahora estoy preguntando si es que es posible definir un borde de color utilizando el QgsRuleBasedRendererV2 clase.

4voto

Hameno Puntos 129

La lógica general para establecer el color del borde es:

# black polygon with red border
symbol = QgsSymbolV2.defaultSymbol(layer.geometryType())
layer_style = {}
layer_style['color'] = '0, 0, 0'
layer_style['size'] = '2.5'
layer_style['color_border'] = '255, 0, 0'
symbol_layer = QgsSimpleFillSymbolLayerV2.create(layer_style)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X