QGIS API Documentation  2.17.0-Master (973e4b0)
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 
44 {
46  QImage* img; // may be null if it is not necessary to draw to separate image (e.g. sequential rendering)
47  QgsMapLayerRenderer* renderer; // must be deleted
48  QPainter::CompositionMode blendMode;
49  bool cached; // if true, img already contains cached image from previous rendering
52 };
53 
55 
56 
81 class CORE_EXPORT QgsMapRendererJob : public QObject
82 {
83  Q_OBJECT
84  public:
85 
86  QgsMapRendererJob( const QgsMapSettings& settings );
87 
88  virtual ~QgsMapRendererJob() {}
89 
92  virtual void start() = 0;
93 
96  virtual void cancel() = 0;
97 
99  virtual void waitForFinished() = 0;
100 
102  virtual bool isActive() const = 0;
103 
105  virtual QgsLabelingResults* takeLabelingResults() = 0;
106 
107  struct Error
108  {
109  Error( const QString& lid, const QString& msg )
110  : layerID( lid )
111  , message( msg )
112  {}
113 
116  };
117 
119 
121  Errors errors() const;
122 
123 
126  void setCache( QgsMapRendererCache* cache );
127 
130  void setRequestedGeometryCacheForLayers( const QStringList& layerIds ) { mRequestedGeomCacheForLayers = layerIds; }
131 
133  int renderingTime() const { return mRenderingTime; }
134 
140  const QgsMapSettings& mapSettings() const;
141 
142  signals:
143 
145  void finished();
146 
147  protected:
148 
155  static bool reprojectToLayerExtent( const QgsMapLayer *ml, const QgsCoordinateTransform *ct, QgsRectangle &extent, QgsRectangle &r2 );
156 
158  LayerRenderJobs prepareJobs( QPainter* painter, QgsPalLabeling* labelingEngine, QgsLabelingEngineV2* labelingEngine2 );
159 
161  void cleanupJobs( LayerRenderJobs& jobs );
162 
164  void logRenderingTime( const LayerRenderJobs& jobs );
165 
166  static QImage composeImage( const QgsMapSettings& settings, const LayerRenderJobs& jobs );
167 
168  bool needTemporaryImage( QgsMapLayer* ml );
169 
171  static void drawLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext, QgsPalLabeling* labelingEngine, QgsLabelingEngineV2* labelingEngine2, QPainter* painter );
172  static void drawOldLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext );
173  static void drawNewLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext, QgsPalLabeling* labelingEngine );
174 
176  void updateLayerGeometryCaches();
177 
179  Errors mErrors;
180 
182 
187 
190 };
191 
192 
199 class CORE_EXPORT QgsMapRendererQImageJob : public QgsMapRendererJob
200 {
201  Q_OBJECT
202 
203  public:
204  QgsMapRendererQImageJob( const QgsMapSettings& settings );
205 
207  virtual QImage renderedImage() = 0;
208 };
209 
210 
211 #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.
int renderingTime
time it took to render the layer in ms (it is -1 if not rendered or still rendering) ...
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.