QGIS API Documentation  2.13.0-Master
qgsmaprendererjob.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmaprendererjob.h
3  --------------------------------------
4  Date : December 2013
5  Copyright : (C) 2013 by Martin Dobias
6  Email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #ifndef QGSMAPRENDERERJOB_H
17 #define QGSMAPRENDERERJOB_H
18 
19 #include <QtConcurrentRun>
20 #include <QFutureWatcher>
21 #include <QImage>
22 #include <QPainter>
23 #include <QObject>
24 #include <QTime>
25 
26 #include "qgsrendercontext.h"
27 
28 #include "qgsmapsettings.h"
29 
30 #include "qgsgeometrycache.h"
31 
33 class QgsLabelingResults;
36 class QgsPalLabeling;
37 
38 
43 {
45  QImage* img; // may be null if it is not necessary to draw to separate image (e.g. sequential rendering)
46  QgsMapLayerRenderer* renderer; // must be deleted
47  QPainter::CompositionMode blendMode;
48  bool cached; // if true, img already contains cached image from previous rendering
50 };
51 
53 
54 
79 class CORE_EXPORT QgsMapRendererJob : public QObject
80 {
81  Q_OBJECT
82  public:
83 
84  QgsMapRendererJob( const QgsMapSettings& settings );
85 
86  virtual ~QgsMapRendererJob() {}
87 
90  virtual void start() = 0;
91 
94  virtual void cancel() = 0;
95 
97  virtual void waitForFinished() = 0;
98 
100  virtual bool isActive() const = 0;
101 
103  virtual QgsLabelingResults* takeLabelingResults() = 0;
104 
105  struct Error
106  {
107  Error( const QString& lid, const QString& msg ) : layerID( lid ), message( msg ) {}
108 
111  };
112 
114 
116  Errors errors() const;
117 
118 
121  void setCache( QgsMapRendererCache* cache );
122 
125  void setRequestedGeometryCacheForLayers( const QStringList& layerIds ) { mRequestedGeomCacheForLayers = layerIds; }
126 
128  int renderingTime() const { return mRenderingTime; }
129 
135  const QgsMapSettings& mapSettings() const;
136 
137  signals:
138 
140  void finished();
141 
142  protected:
143 
150  static bool reprojectToLayerExtent( const QgsMapLayer *ml, const QgsCoordinateTransform *ct, QgsRectangle &extent, QgsRectangle &r2 );
151 
153  LayerRenderJobs prepareJobs( QPainter* painter, QgsPalLabeling* labelingEngine, QgsLabelingEngineV2* labelingEngine2 );
154 
156  void cleanupJobs( LayerRenderJobs& jobs );
157 
158  static QImage composeImage( const QgsMapSettings& settings, const LayerRenderJobs& jobs );
159 
160  bool needTemporaryImage( QgsMapLayer* ml );
161 
163  static void drawLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext, QgsPalLabeling* labelingEngine, QgsLabelingEngineV2* labelingEngine2, QPainter* painter );
164  static void drawOldLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext );
165  static void drawNewLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext, QgsPalLabeling* labelingEngine );
166 
168  void updateLayerGeometryCaches();
169 
171  Errors mErrors;
172 
174 
179 
182 };
183 
184 
190 class CORE_EXPORT QgsMapRendererQImageJob : public QgsMapRendererJob
191 {
192  Q_OBJECT
193 
194  public:
195  QgsMapRendererQImageJob( const QgsMapSettings& settings );
196 
198  virtual QImage renderedImage() = 0;
199 };
200 
201 
202 #endif // QGSMAPRENDERERJOB_H
void setRequestedGeometryCacheForLayers(const QStringList &layerIds)
Set which vector layers should be cached while rendering.
A rectangle specified with double values.
Definition: qgsrectangle.h:35
Base class for all map layer types.
Definition: qgsmaplayer.h:49
Abstract base class for map rendering implementations.
QList< Error > Errors
QStringList mRequestedGeomCacheForLayers
list of layer IDs for which the geometry cache should be updated
QMap< QString, QgsGeometryCache > mGeometryCaches
map of geometry caches
The QgsLabelingEngineV2 class provides map labeling functionality.
The QgsMapSettings class contains configuration for rendering of the map.
QgsMapSettings mSettings
virtual ~QgsMapRendererJob()
Contains information about the context of a rendering operation.
Intermediate base class adding functionality that allows client to query the rendered image...
QgsMapLayerRenderer * renderer
Class for doing transforms between two map coordinate systems.
QgsRenderContext context
Base class for utility classes that encapsulate information necessary for rendering of map layers...
Class that stores computed placement from labeling engine.
This class is responsible for keeping cache of rendered images of individual layers.
QList< LayerRenderJob > LayerRenderJobs
QPainter::CompositionMode blendMode
QgsMapRendererCache * mCache
int renderingTime() const
Find out how log it took to finish the job (in miliseconds)
Error(const QString &lid, const QString &msg)
Structure keeping low-level rendering job information.