I'm writing a qgis plugin to create an image in the print composer of the current map. I can get the map rendered in the proper place with a frame of the right width, and I can get grid annotations rendered in the proper places and orientation, but I can't get the actual grid lines to render. Here is the code I'm using:
def createImage(self):
# Initialize the composition object.
mapRenderer = self.iface.mapCanvas().mapRenderer()
composition = QgsComposition(mapRenderer)
composition.setPlotStyle(QgsComposition.Print)
composition.setPaperSize(483, 330)
composition.setPrintResolution(300)
# Initialize the map object. Allow a top margin of 10mm, a bottom
# margin of 50mm, a left margin of 10mm, and a right margin of 10mm.
mapOriginXMm = 10
mapOriginYMm = 10
mapWidthMm = 483 - 10 -10
mapHeightMm = 330 - 10 - 50
composerMap = QgsComposerMap(composition, \
mapOriginXMm, \
mapOriginYMm, \
mapWidthMm, \
mapHeightMm)
composition.addItem(composerMap)
# Create the frame around the map.
composerMap.setFrameEnabled(1)
pen = QPen()
pen.setWidth(0.2)
pen.setJoinStyle(Qt.MiterJoin)
composerMap.setPen(pen)
# Initialize the image object.
dpi = 300
dpmm = dpi / 25.4
paperWidthPixels = int(dpmm * composition.paperWidth())
paperHeightPixels = int(dpmm * composition.paperHeight())
image = QImage(QSize(paperWidthPixels, paperHeightPixels), \
QImage.Format_ARGB32)
image.setDotsPerMeterX(dpmm * 1000)
image.setDotsPerMeterY(dpmm * 1000)
image.fill(0)
# Create the map grid.
composerMap.setGridEnabled(True)
composerMap.setGridIntervalX(500)
composerMap.setGridIntervalY(500)
composerMap.setShowGridAnnotation(True)
composerMap.setGridAnnotationPrecision(0)
composerMap.setGridStyle(QgsComposerMap.Solid)
# Top
composerMap.setGridAnnotationPosition(QgsComposerMap.OutsideMapFrame, \
QgsComposerMap.Top)
composerMap.setGridAnnotationDirection(QgsComposerMap.Horizontal, \
QgsComposerMap.Top)
# Bottom
composerMap.setGridAnnotationPosition(QgsComposerMap.OutsideMapFrame, \
QgsComposerMap.Bottom)
composerMap.setGridAnnotationDirection(QgsComposerMap.Horizontal, \
QgsComposerMap.Bottom)
# Left
composerMap.setGridAnnotationPosition(QgsComposerMap.OutsideMapFrame, \
QgsComposerMap.Left)
composerMap.setGridAnnotationDirection(QgsComposerMap.Vertical, \
QgsComposerMap.Left)
# Right
composerMap.setGridAnnotationPosition(QgsComposerMap.OutsideMapFrame, \
QgsComposerMap.Right)
composerMap.setGridAnnotationDirection(QgsComposerMap.Vertical, \
QgsComposerMap.Right)
composerMap.setAnnotationFrameDistance(1)
composerMap.setGridPenWidth(5.0)
composerMap.setGridPenColor(QColor(0, 0, 0))
composerMap.setAnnotationFontColor(QColor(0, 0, 0))
composerMap.setGridBlendMode(QPainter.CompositionMode_DestinationOver)
# Do the rendering.
imagePainter = QPainter(image)
paperRectMm = QRectF(0, \
0, \
composition.paperWidth(), \
composition.paperHeight())
paperRectPixels = QRectF(0, 0, paperWidthPixels, paperHeightPixels)
composition.render(imagePainter, paperRectPixels, paperRectMm)
imagePainter.end()
image.save("/opt/tmpPhotos/test.tif", "tif")
Can anyone tell me what I'm missing?