QGIS API Documentation  2.18.21-Las Palmas (9fba24a)
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  double opacity;
50  bool cached; // if true, img already contains cached image from previous rendering
53 };
54 
56 
57 
82 class CORE_EXPORT QgsMapRendererJob : public QObject
83 {
84  Q_OBJECT
85  public:
86 
87  QgsMapRendererJob( const QgsMapSettings& settings );
88 
89  virtual ~QgsMapRendererJob() {}
90 
93  virtual void start() = 0;
94 
97  virtual void cancel() = 0;
98 
104  virtual void cancelWithoutBlocking() = 0;
105 
107  virtual void waitForFinished() = 0;
108 
110  virtual bool isActive() const = 0;
111 
113  virtual QgsLabelingResults* takeLabelingResults() = 0;
114 
115  struct Error
116  {
117  Error( const QString& lid, const QString& msg )
118  : layerID( lid )
119  , message( msg )
120  {}
121 
124  };
125 
127 
129  Errors errors() const;
130 
131 
134  void setCache( QgsMapRendererCache* cache );
135 
138  void setRequestedGeometryCacheForLayers( const QStringList& layerIds ) { mRequestedGeomCacheForLayers = layerIds; }
139 
141  int renderingTime() const { return mRenderingTime; }
142 
148  const QgsMapSettings& mapSettings() const;
149 
150  signals:
151 
153  void finished();
154 
155  protected:
156 
163  static bool reprojectToLayerExtent( const QgsMapLayer *ml, const QgsCoordinateTransform *ct, QgsRectangle &extent, QgsRectangle &r2 );
164 
166  LayerRenderJobs prepareJobs( QPainter* painter, QgsPalLabeling* labelingEngine, QgsLabelingEngineV2* labelingEngine2 );
167 
169  void cleanupJobs( LayerRenderJobs& jobs );
170 
172  void logRenderingTime( const LayerRenderJobs& jobs );
173 
174  static QImage composeImage( const QgsMapSettings& settings, const LayerRenderJobs& jobs );
175 
176  bool needTemporaryImage( QgsMapLayer* ml );
177 
179  static void drawLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext, QgsPalLabeling* labelingEngine, QgsLabelingEngineV2* labelingEngine2, QPainter* painter );
180  static void drawOldLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext );
181  static void drawNewLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext, QgsPalLabeling* labelingEngine );
182 
184  void updateLayerGeometryCaches();
185 
187  Errors mErrors;
188 
190 
195 
198 };
199 
200 
207 class CORE_EXPORT QgsMapRendererQImageJob : public QgsMapRendererJob
208 {
209  Q_OBJECT
210 
211  public:
212  QgsMapRendererQImageJob( const QgsMapSettings& settings );
213 
215  virtual QImage renderedImage() = 0;
216 
217 };
218 
219 
220 #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.
int renderingTime() const
Find out how log it took to finish the job (in miliseconds)
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
Error(const QString &lid, const QString &msg)
Structure keeping low-level rendering job information.