Como definir a transparência para vários valores de varredura com Python

11

Com o código a seguir, posso definir 100% de transparência para o valor raster 0:

map=None

for lyr in QgsMapLayerRegistry.instance().mapLayers().values():
  if lyr.name() == "some_layer":
    map= lyr

tr=None

tr=QgsRasterTransparency()
tr.initializeTransparentPixelList(0)
map.renderer().setRasterTransparency(tr)
map.triggerRepaint()

Como posso definir dois valores (0 e 8) como 100% transparentes?

Quando repito os comandos do último bloco com o valor raster 8, o primeiro valor (0) é removido da transparência da camada.

Stefan
fonte

Respostas:

10

Encontrei este outro segmento que foi útil. Como defino a transparência da camada no QGIS 2.0 com Python? Parece que deveria haver uma maneira mais curta e eficiente, mas eu testei isso e funciona:

print 'Start'
active_layer = qgis.utils.iface.mapCanvas().currentLayer()
raster_transparency  = active_layer.renderer().rasterTransparency()
ltr = QgsRasterTransparency.TransparentSingleValuePixel()
ltr2 =  QgsRasterTransparency.TransparentSingleValuePixel()
tr_list = []
ltr.min = 0  # Or another value
ltr.max = 0  # Or another value
ltr.percentTransparent = 100  # Or another value
ltr2.min = 8  # Or another value
ltr2.max = 8  # Or another value
ltr2.percentTransparent = 100
tr_list.append(ltr)
tr_list.append(ltr2)

raster_transparency.setTransparentSingleValuePixelList(tr_list)

active_layer.triggerRepaint()  # Tried with iface.mapCanvas().refresh(), but it didn't work
print 'Finish'
kflaw
fonte
2

Python é um requisito? Se eu entendo o que você deseja, você pode fazer isso na interface do QGIS, nas propriedades da camada raster: insira a descrição da imagem aqui

Jeff G
fonte
Sim, Python é um requisito. Criei um plug-in que carrega mapas topográficos em um projeto QGIS, selecionado em um sistema de linha de folha.
Stefan