В некоторых случаях,а конкретно - при рендеринге полигона с заливкой цветом и паттерном, и обводкой из svg-маркеров рендерится только заливка цветом, а паттерн и обводка не рендерятся. При этом
в консоли появляется следующая ошибка (в момент вызова метода "QgsMapRenderer().render()" - строка "renderer.render(p)" в коде):
Код: Выделить всё
QPainter::begin: Paint device returned engine == 0, type: 3
При этом сам QGIS рендерит слой с тем же файлом стиля абсолютно корректно. Версия QGIS 2.14.
В чём может быть проблема? Тестовые файлы прилагаются.
Сам код такой:
Код: Выделить всё
from qgis.core import *
from PyQt4.QtCore import QSize
from PyQt4.QtGui import QPainter, QImage, QColor
qgisApp = QgsApplication([], False)
QgsApplication.setPrefixPath('/usr', True)
QgsApplication.initQgis()
print QgsApplication.showSettings()
lyr = QgsVectorLayer('bbox.shp', 'bbox', 'ogr')
lyr_id = lyr.id()
QgsMapLayerRegistry.instance().addMapLayer(lyr)
lyr.loadNamedStyle( 'bbox.qml')
# create image
img = QImage(QSize(800, 600), QImage.Format_ARGB32_Premultiplied)
# set image's background color
# color = QColor(255, 255, 255)
# img.fill(color.rgb())
# create painter
p = QPainter()
p.begin(img)
p.setRenderHint(QPainter.Antialiasing)
layers = QgsMapLayerRegistry.instance().mapLayers()
lst = layers.keys()
print 'lst', lst
renderer = QgsMapRenderer()
renderer.setLayerSet(lst)
extent = renderer.fullExtent()
rect = QgsRectangle(extent)
# print rect.toString()
rect.scale(1.1)
renderer.setExtent(rect)
# set output size
renderer.setOutputSize(img.size(), img.logicalDpiX())
# do the rendering
renderer.render(p)
p.end()
# save image
img.save('test.png', 'png')
QgsApplication.exitQgis()