Hi Martin, et al.,

Maybe I'm missing something elemental here, but I can't seem to find a
simple way to apply my built-up QgsMapSettings to QgsMapCanvas or
QgsMapRenderer, initiate a render from Python, then save into image on disk.

This is what I would like to do (for simple screen-res renders):

cnv = iface.mapCanvas()
ms = cnv.mapSettings()  <-- or create fresh: ms = QgsMapSettings()
(manipulate map settings)
cnv.applyMapSettings(ms)  <-- shouldn't this be possible?
cnv.refresh()  <-- since cnv.map().render() is stubbed now
cnv.saveAsImage(my_imgpath)

This is functioning (for creating unit test control images), but seems
excessive:

ms = my_map_settings
pal = QgsPalLabeling()
pal.init(ms)  <-- is this necessary?
r = QgsMapRenderer()
r.setLabelingEngine(pal)

# couldn't the next lines be covered by a r.applyMapSettings(ms) function?
r.setOutputSize(ms.outputSize(), ms.outputDpi())
r.setMapUnits(ms.mapUnits())
r.setExtent(ms.extent())
r.setProjectionsEnabled(ms.hasCrsTransformEnabled())
r.setDestinationCrs(ms.destinationCrs())
r.setLayerSet(ms.layers())

image = QImage(ms.outputSize(), QImage.Format_ARGB32)
image.fill(ms.backgroundColor().rgb())
image.setDotsPerMeterX(ms.outputDpi() / 25.4 * 1000)
image.setDotsPerMeterY(ms.outputDpi() / 25.4 * 1000)

p = QPainter(image)
r.render(p)
p.end()
image.save(my_imgpath, 'png'):


This is already convenient in QgsComposition, using QgsComposition( const
QgsMapSettings& mapSettings ), then just render the page.

Any ideas on the best approach here?

Regards,

Larry
_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to