Las clases QgsVectorGradientColorRampV2 y QgsVectorGradientColorRampV2Dialog de PyQGIS

Después de haber desarrollado mi plugin Get Pattern, ahora tengo más “espacio” en la Python Console (en modo gráfico) para ir explorando detalladamente clases y métodos de clase de PyQGIS que me ayuden a encontrar procedimientos más expeditos que los empleados en algunos posts anteriores. No fue por ‘casualidad’ que filtré por la palabra clave ‘Ramp’ en ‘qgis.gui’ para ver que obtenía. De allí surgió la clase QgsVectorGradientColorRampV2Dialog.

Esta clase se instancia con un objecto de la clase QgsVectorGradientColorRampV2 y un QWidget encapsulador que puede ser omitido. Si miran el constructor del primero pueden escoger entre pasarle los 4 parámetros que exige o ninguno, es decir, trabajar con los valores por defecto. Vamos a escoger está última opción porque es la más fácil y aprenderemos más. Por tanto, en la Python Console:

myGradientColorRamp = QgsVectorGradientColorRampV2()
window = QgsVectorGradientColorRampV2Dialog(myGradientColorRamp)
window.show()

y el resultado es el siguiente:

color_ramp1

es decir, se ha producido el Dialog con los colores por defecto: azul y verde. Observen que la rampa de color gradiente tiene opciones para modificar estos colores por defecto, los “stop” y el tipo (continuo o discreto). Además, se despliega una previsualización de la rampa en la parte inferior del Dialog.

En PyQGIS existen varios estilos por defecto, los cuales veremos más adelante, y los más sencillos se configuran con los colores extremos (Color 1 y Color 2) y 3 colores “stop” que se establecen para un desplazamiento (offset) de 25, 50 y 75 %. Si queremos una rampa personalizada con estas características la podemos crear y aplicar; tal como se tiene en la imagen siguiente:

color_ramp2

donde además se puede observar la herramienta para añadir el color “stop”.

Si queremos desplegar los colores gradiente por defecto de QGIS tenemos que acceder a sus definiciones y, para ello, creamos un estilo por defecto mediante la clase QgsStyleV2. Por tanto, se tiene que:

myStyle = QgsStyleV2().defaultStyle()
defaultColorRampNames = myStyle.colorRampNames()
print defaultColorRampNames
print len(defaultColorRampNames)
[u'Blues', u'BrBG', u'BuGn', u'BuPu', u'GnBu', u'Greens', 
u'Greys', u'OrRd', u'Oranges', u'PRGn', u'PiYG', u'PuBu', 
u'PuBuGn', u'PuOr', u'PuRd', u'Purples', u'RdBu', u'RdGy', 
u'RdPu', u'RdYlBu', u'RdYlGn', u'Reds', u'Spectral', 
u'YlGn', u'YlGnBu', u'YlOrBr', u'YlOrRd']
27

donde la lista incluye 27 rampas de color gradiente por defecto.

En QgsStyleV2 existe el método ‘colorRampRef’ que al pasarle como parámetro el QString correspondiente a cualquiera de los nombres de la lista anterior nos produce un objeto de la clase QgsVectorGradientColorRampV2; precisamente lo que hay que pasarle como parámetro al objeto QgsVectorGradientColorRampV2Dialog para instanciarlo. Para la rampa de color gradiente ‘Spectral’ se tiene:

myGradientColorRamp = myStyle.colorRampRef(u'Spectral')
window = QgsVectorGradientColorRampV2Dialog(myGradientColorRamp)
window.show()

obteniéndose lo siguiente:

color_ramp3

Otra forma de instanciar myGradientColorRamp es con el método ‘colorRamp’ de QgsStyleV2; pero para ello necesitamos la posición que ocupa en nuestra defaultColorRampNames. Por tanto:

if 'Spectral' in defaultColorRampNames:
	print defaultColorRampNames.index('Spectral')
22
myGradientColorRamp = myStyle.colorRamp(defaultColorRampNames[22])
myGradientColorRamp.properties()
{u'color1': u'215,25,28,255', u'discrete': u'0', 
u'color2': u'43,131,186,255', u'stops': u'0.25;253,174,97,255:
0.5;255,255,191,255:0.75;171,221,164,255'}
myGradientColorRamp.isDiscrete()
False

Al imprimir las propiedades de la rampa gradiente se puede observar que esta forma de instanciar parece producir por defecto una del tipo ‘discreto’ pero es falso (debe ser un bug); como se verifica más adelante con el método ‘isDiscrete’. Para convertir la rampa gradiente en discreta y mostrarla en el Dialog de las rampas gradiente:

myGradientColorRamp.setDiscrete(True)
window = QgsVectorGradientColorRampV2Dialog(myGradientColorRamp)
window.show()

color_ramp4

Observe que en las rampas de tipo ‘discrete’ el ‘Color 2’ no se muestra en la previsualización.

Para finalizar este post vamos a considerar otra forma de instanciar un objeto de QgsVectorGradientColorRampV2. Es pasándole como parámetro al método ‘create’ un diccionario con la misma estructura que el producido por el método ‘properties’. Como ejemplo tenemos:

myGradientColorRamp = myStyle.colorRampRef(u'Blues')
properties = myGradientColorRamp.properties()
properties
{u'color1': u'247,251,255,255', u'discrete': u'0', u'color2': 
u'8,48,107,255', u'stops': u'0.13;222,235,247,255:
0.26;198,219,239,255:0.39;158,202,225,255:
0.52;107,174,214,255:0.65;66,146,198,255:
0.78;33,113,181,255:0.9;8,81,156,255'}
myNewGradientColorRamp = QgsVectorGradientColorRampV2.create(properties)
window = QgsVectorGradientColorRampV2Dialog(myNewGradientColorRamp)
window.show()

donde se obtiene una rampa gradiente con 7 “stops”.

color_ramp5

Esta entrada fue publicada en PyQGIS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

Una respuesta a Las clases QgsVectorGradientColorRampV2 y QgsVectorGradientColorRampV2Dialog de PyQGIS

  1. Pingback: Otros métodos para instanciar la clase QgsVectorGradientColorRampV2 | El Blog de José Guerrero

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s