2 votos

¿Cómo aplicar efectos de pintura con PyQGIS?

Me gustaría aplicar un estilo de polígono invertido, incluyendo opacidad y sombra interna usando PyQGIS. Hasta ahora, todo funciona excepto el efecto de sombra interna. Encontré en la API de QGIS que hay una clase llamada QgsShadowEffect, pero no logro hacer que funcione.

El código se ve así:

#Abrir capa
poly_1_link = r"...\Polygon_0.shp"
poly_1 = iface.addVectorLayer(poly_1_link, "", "ogr")

##Editar estilo de capa##
#Definir renderizador de capa
rend = poly_1.renderer()
print(rend.type())

#Definir símbolo desde el renderizador
some_symbol = rend.symbol()

#Definir simbología
some_symbol.setColor(QColor.fromRgb(255,0,0))   #Color
some_symbol.setOpacity(0.5)                     #Opacidad

#Aplicar sombra
#...

#Crear un polígono invertido 
sub_rend = QgsInvertedPolygonRenderer().convertFromRenderer(rend)
poly_1.setRenderer(sub_rend)

#Actualizar capa
poly_1.triggerRepaint()

2voto

Fluffy Puntos 6908

Una forma de agregar efectos de pintura es agregar otra capa de símbolos para ello. Aquí hay un fragmento de código para producir el siguiente polígono.

Polígono con sombra interior

#Agregar capa
coords = [(20, 60), (32, 60), (32, 70), (20, 70), (20, 60)]   
polygon = QgsGeometry.fromPolygonXY( [[ QgsPointXY( pair[0], pair[1] ) for pair in coords ]] ) 
layer = QgsVectorLayer("Polygon?crs=EPSG:4326", "polygon_0", "memory")
feature = QgsFeature()
feature.setGeometry(polygon)
provider = layer.dataProvider()
layer.startEditing()
provider.addFeatures( [feature] )
layer.commitChanges()

##Editar estilo de capa##
símbolo = capa.renderer().símbolo()

#Definir simbología
símbolo.setColor(QColor.fromRgb(255,0,0))
símbolo.setOpacity(0.5)

#Aplicar sombra
sombra_interna = QgsInnerShadowEffect()
capa_sombra_interna = QgsSimpleFillSymbolLayer()
capa_sombra_interna.setPaintEffect(sombra_interna)
símbolo.appendSymbolLayer(capa_sombra_interna)

QgsProject.instance().addMapLayer(layer)

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