QGIS API Documentation  2.5.0-Master
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
qgsmaprenderer.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmaprender.h - class for rendering map layer set
3  ----------------------
4  begin : January 2006
5  copyright : (C) 2006 by Martin Dobias
6  email : wonder.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 QGSMAPRENDER_H
17 #define QGSMAPRENDER_H
18 
19 #include <QMutex>
20 #include <QSize>
21 #include <QStringList>
22 #include <QVector>
23 #include <QPainter>
24 
25 #include "qgis.h"
26 #include "qgsrectangle.h"
27 #include "qgsrendercontext.h"
28 #include "qgsfeature.h"
29 #include "qgsmapsettings.h"
30 
31 class QDomDocument;
32 class QDomNode;
33 class QPainter;
34 
35 class QgsMapToPixel;
36 class QgsMapLayer;
37 class QgsMapRenderer;
38 class QgsScaleCalculator;
40 class QgsDistanceArea;
41 class QgsVectorLayer;
42 
45 
46 class CORE_EXPORT QgsLabelPosition
47 {
48  public:
49  QgsLabelPosition( int id, double r, const QVector< QgsPoint >& corners, const QgsRectangle& rect, double w, double h, const QString& layer, const QString& labeltext, const QFont& labelfont, bool upside_down, bool diagram = false, bool pinned = false ):
50  featureId( id ), rotation( r ), cornerPoints( corners ), labelRect( rect ), width( w ), height( h ), layerID( layer ), labelText( labeltext ), labelFont( labelfont ), upsideDown( upside_down ), isDiagram( diagram ), isPinned( pinned ) {}
51  QgsLabelPosition(): featureId( -1 ), rotation( 0 ), labelRect( QgsRectangle() ), width( 0 ), height( 0 ), layerID( "" ), labelText( "" ), labelFont( QFont() ), upsideDown( false ), isDiagram( false ), isPinned( false ) {}
52  int featureId;
53  double rotation;
54  QVector< QgsPoint > cornerPoints;
56  double width;
57  double height;
58  QString layerID;
59  QString labelText;
60  QFont labelFont;
61  bool upsideDown;
62  bool isDiagram;
63  bool isPinned;
64 };
65 
67 class CORE_EXPORT QgsLabelingEngineInterface
68 {
69  public:
70 
72 
75  Q_DECL_DEPRECATED virtual void init( QgsMapRenderer* mp ) = 0;
77  virtual void init( const QgsMapSettings& mapSettings ) = 0;
79  virtual bool willUseLayer( QgsVectorLayer* layer ) = 0;
81  virtual void clearActiveLayers() = 0;
83  virtual void clearActiveLayer( const QString& layerID ) = 0;
85  virtual int prepareLayer( QgsVectorLayer* layer, QStringList& attrNames, QgsRenderContext& ctx ) = 0;
87  virtual QgsPalLayerSettings& layer( const QString& layerName ) = 0;
89  virtual int addDiagramLayer( QgsVectorLayer* layer, const QgsDiagramLayerSettings* s )
90  { Q_UNUSED( layer ); Q_UNUSED( s ); return 0; }
92  virtual void registerFeature( const QString& layerID, QgsFeature& feat, const QgsRenderContext& context = QgsRenderContext(), QString dxfLayer = QString::null ) = 0;
94  virtual void registerDiagramFeature( const QString& layerID, QgsFeature& feat, const QgsRenderContext& context = QgsRenderContext() )
95  { Q_UNUSED( layerID ); Q_UNUSED( feat ); Q_UNUSED( context ); }
97  virtual void drawLabeling( QgsRenderContext& context ) = 0;
99  virtual void exit() = 0;
102  Q_DECL_DEPRECATED virtual QList<QgsLabelPosition> labelsAtPosition( const QgsPoint& p ) = 0;
105  Q_DECL_DEPRECATED virtual QList<QgsLabelPosition> labelsWithinRect( const QgsRectangle& r ) = 0;
106 
108  virtual QgsLabelingEngineInterface* clone() = 0;
109 };
110 
111 struct CORE_EXPORT QgsLayerCoordinateTransform
112 {
113  QString srcAuthId;
114  QString destAuthId;
115  int srcDatumTransform; //-1 if unknown or not specified
117 };
118 
119 // ### QGIS 3: remove QgsMapRenderer in favor of QgsMapRendererJob
120 
125 class CORE_EXPORT QgsMapRenderer : public QObject
126 {
127  Q_OBJECT
128 
129  public:
130 
133  {
135  Pixels
136  //MAP_UNITS probably supported in future versions
137  };
138 
143  {
168  };
169 
171  QgsMapRenderer();
172 
174  ~QgsMapRenderer();
175 
179  void render( QPainter* painter, double* forceWidthScale = 0 );
180 
182  bool setExtent( const QgsRectangle& extent );
183 
185  QgsRectangle extent() const;
186 
187  const QgsMapToPixel* coordinateTransform() { return &( mRenderContext.mapToPixel() ); }
188 
190  double scale() const { return mScale; }
193  void setScale( double scale ) {mScale = scale;}
194  double mapUnitsPerPixel() const { return mMapUnitsPerPixel; }
195 
196  int width() const { return ( int ) mSize.width(); }
197  int height() const { return ( int ) mSize.height(); }
198 
200  void updateScale();
201 
202  QGis::UnitType mapUnits() const;
203  void setMapUnits( QGis::UnitType u );
204 
206  void enableOverviewMode( bool isOverview = true ) { mOverview = isOverview; }
207 
208  void setOutputSize( QSize size, int dpi );
209  void setOutputSize( QSizeF size, double dpi );
210 
212  double outputDpi();
214  QSize outputSize();
215  QSizeF outputSizeF();
216 
222  QgsRectangle layerExtentToOutputExtent( QgsMapLayer* theLayer, QgsRectangle extent );
223 
229  QgsRectangle outputExtentToLayerExtent( QgsMapLayer* theLayer, QgsRectangle extent );
230 
235  QgsPoint layerToMapCoordinates( QgsMapLayer* theLayer, QgsPoint point );
236 
242  QgsRectangle layerToMapCoordinates( QgsMapLayer* theLayer, QgsRectangle rect );
243 
248  QgsPoint mapToLayerCoordinates( QgsMapLayer* theLayer, QgsPoint point );
249 
255  QgsRectangle mapToLayerCoordinates( QgsMapLayer* theLayer, QgsRectangle rect );
256 
258  void setProjectionsEnabled( bool enabled );
259 
261  bool hasCrsTransformEnabled() const;
262 
264  void setDestinationCrs( const QgsCoordinateReferenceSystem& crs, bool refreshCoordinateTransformInfo = true, bool transformExtent = true );
265 
267  const QgsCoordinateReferenceSystem& destinationCrs() const;
268 
269  void setOutputUnits( OutputUnits u ) {mOutputUnits = u;}
270 
271  OutputUnits outputUnits() const {return mOutputUnits;}
272 
274  QgsRectangle fullExtent();
275 
277  QStringList& layerSet();
278 
280  void setLayerSet( const QStringList& layers );
281 
283  void updateFullExtent();
284 
286  bool readXML( QDomNode & theNode );
287 
289  bool writeXML( QDomNode & theNode, QDomDocument & theDoc );
290 
292  QgsRenderContext* rendererContext() {return &mRenderContext;}
293 
295  QgsLabelingEngineInterface* labelingEngine() { return mLabelingEngine; }
296 
299  void setLabelingEngine( QgsLabelingEngineInterface* iface );
300 
302  static QPainter::CompositionMode getCompositionMode( const QgsMapRenderer::BlendMode &blendMode );
304  static QgsMapRenderer::BlendMode getBlendModeEnum( const QPainter::CompositionMode &blendMode );
305 
306  void addLayerCoordinateTransform( const QString& layerId, const QString& srcAuthId, const QString& destAuthId, int srcDatumTransform = -1, int destDatumTransform = -1 );
307  void clearLayerCoordinateTransforms();
308 
309  const QgsCoordinateTransform* transformation( const QgsMapLayer *layer ) const;
310 
313  const QgsMapSettings& mapSettings();
314 
321  bool splitLayersExtent( QgsMapLayer* layer, QgsRectangle& extent, QgsRectangle& r2 );
322 
323  signals:
324 
326  void drawingProgress( int current, int total );
327 
332 #ifndef Q_MOC_RUN
333  Q_DECL_DEPRECATED
334 #endif
335  void hasCrsTransformEnabled( bool flag );
336 
340  void hasCrsTransformEnabledChanged( bool flag );
341 
342  void destinationSrsChanged();
343 
345  void updateMap();
346 
347  void mapUnitsChanged();
348 
350  void drawError( QgsMapLayer* );
351 
354  void extentsChanged();
355 
357  void datumTransformInfoRequested( const QgsMapLayer* ml, const QString& srcAuthId, const QString& destAuthId ) const;
358 
359 
360  public slots:
361 
363  Q_DECL_DEPRECATED void onDrawingProgress( int current, int total );
364 
365  protected:
366 
368  void adjustExtentToSize();
369 
371  static bool mDrawing;
372 
375 
377  double mScale;
378 
381 
384  //
390 
392  bool mOverview;
393 
394  QSizeF mSize;
395 
398 
401 
403  QStringList mLayerSet;
404 
407 
410 
413 
416 
419 
421  QMutex mRenderMutex;
422 
425 
426  QHash< QString, QgsLayerCoordinateTransform > mLayerCoordinateTransformInfo;
427 };
428 
429 #endif
430 
Definition: qgsmaprenderer.h:167
QgsRectangle labelRect
Definition: qgsmaprenderer.h:55
const QgsMapToPixel * coordinateTransform()
Definition: qgsmaprenderer.h:187
virtual ~QgsLabelingEngineInterface()
Definition: qgsmaprenderer.h:71
QString labelText
Definition: qgsmaprenderer.h:59
A rectangle specified with double values.
Definition: qgsrectangle.h:35
Base class for all map layer types.
Definition: qgsmaplayer.h:48
QgsRenderContext * rendererContext()
Accessor for render context.
Definition: qgsmaprenderer.h:292
QgsLabelPosition(int id, double r, const QVector< QgsPoint > &corners, const QgsRectangle &rect, double w, double h, const QString &layer, const QString &labeltext, const QFont &labelfont, bool upside_down, bool diagram=false, bool pinned=false)
Definition: qgsmaprenderer.h:49
bool isDiagram
Definition: qgsmaprenderer.h:62
QString srcAuthId
Definition: qgsmaprenderer.h:113
Definition: qgsmaprenderer.h:145
Definition: qgsmaprenderer.h:154
OutputUnits outputUnits() const
Definition: qgsmaprenderer.h:271
OutputUnits mOutputUnits
Output units.
Definition: qgsmaprenderer.h:415
int featureId
Definition: qgsmaprenderer.h:52
UnitType
Map units that qgis supports.
Definition: qgis.h:229
bool mProjectionsEnabled
detemines whether on the fly projection support is enabled
Definition: qgsmaprenderer.h:397
QgsRectangle mLastExtent
Last extent to we drew so we know if we can used layer render caching or not.
Definition: qgsmaprenderer.h:389
QgsScaleCalculator * mScaleCalculator
scale calculator
Definition: qgsmaprenderer.h:380
QString layerID
Definition: qgsmaprenderer.h:58
Definition: qgspallabeling.h:64
void setScale(double scale)
Sets scale for scale based visibility.
Definition: qgsmaprenderer.h:193
double height
Definition: qgsmaprenderer.h:57
static bool mDrawing
indicates drawing in progress
Definition: qgsmaprenderer.h:371
Definition: qgsmaprenderer.h:165
Definition: qgsmaprenderer.h:157
void enableOverviewMode(bool isOverview=true)
sets whether map image will be for overview
Definition: qgsmaprenderer.h:206
Definition: qgsmaprenderer.h:164
virtual int addDiagramLayer(QgsVectorLayer *layer, const QgsDiagramLayerSettings *s)
adds a diagram layer to the labeling engine
Definition: qgsmaprenderer.h:89
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:113
A non GUI class for rendering a map layer set onto a QPainter.
Definition: qgsmaprenderer.h:125
QVector< QgsPoint > cornerPoints
Definition: qgsmaprenderer.h:54
Definition: qgsmaprenderer.h:156
bool upsideDown
Definition: qgsmaprenderer.h:61
Definition: qgsmaprenderer.h:162
QgsRectangle mExtent
current extent to be drawn
Definition: qgsmaprenderer.h:383
Definition: qgsmaprenderer.h:147
int width() const
Definition: qgsmaprenderer.h:196
Definition: qgsmaprenderer.h:155
Definition: qgsmaprenderer.h:150
The QgsMapSettings class contains configuration for rendering of the map.
Definition: qgsmapsettings.h:52
QMutex mRenderMutex
Locks rendering loop for concurrent draws.
Definition: qgsmaprenderer.h:421
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:33
double width
Definition: qgsmaprenderer.h:56
int destDatumTransform
Definition: qgsmaprenderer.h:116
QgsCoordinateReferenceSystem * mDestCRS
destination spatial reference system of the projection
Definition: qgsmaprenderer.h:400
Definition: qgsmaprenderer.h:151
QgsDistanceArea * mDistArea
tool for measuring
Definition: qgsmaprenderer.h:409
double mapUnitsPerPixel() const
Definition: qgsmaprenderer.h:194
double scale() const
Scale denominator.
Definition: qgsmaprenderer.h:190
bool mOverview
indicates whether it's map image for overview
Definition: qgsmaprenderer.h:392
Definition: qgsmaprenderer.h:160
Definition: qgsmaprenderer.h:144
Definition: qgsmaprenderer.h:149
A class to represent a point geometry.
Definition: qgspoint.h:63
BlendMode
Blending modes enum defining the available composition modes that can be used when rendering a layer...
Definition: qgsmaprenderer.h:142
QSizeF mSize
Definition: qgsmaprenderer.h:394
Definition: qgsmaprenderer.h:153
bool isPinned
Definition: qgsmaprenderer.h:63
QgsLabelPosition()
Definition: qgsmaprenderer.h:51
Calculates scale for a given combination of canvas size, map extent, and monitor dpi.
Definition: qgsscalecalculator.h:31
double rotation
Definition: qgsmaprenderer.h:53
Definition: qgsdiagramrendererv2.h:39
General purpose distance and area calculator.
Definition: qgsdistancearea.h:34
Definition: qgsmaprenderer.h:163
int srcDatumTransform
Definition: qgsmaprenderer.h:115
Definition: qgsmaprenderer.h:134
Contains information about the context of a rendering operation.
Definition: qgsrendercontext.h:39
Definition: qgsmaprenderer.h:148
int height() const
Definition: qgsmaprenderer.h:197
QgsMapSettings mMapSettings
map settings - used only for export in mapSettings() for use in classes that deal with QgsMapSettings...
Definition: qgsmaprenderer.h:424
OutputUnits
Output units for pen width and point marker width/height.
Definition: qgsmaprenderer.h:132
QgsLabelingEngineInterface * labelingEngine()
Labeling engine (NULL if there's no custom engine)
Definition: qgsmaprenderer.h:295
Definition: qgsmaprenderer.h:161
Definition: qgsmaprenderer.h:46
double mScale
Map scale denominator at its current zoom level.
Definition: qgsmaprenderer.h:377
QHash< QString, QgsLayerCoordinateTransform > mLayerCoordinateTransformInfo
Definition: qgsmaprenderer.h:426
Class for storing a coordinate reference system (CRS)
Definition: qgscoordinatereferencesystem.h:50
QFont labelFont
Definition: qgsmaprenderer.h:60
Definition: qgsmaprenderer.h:158
Class for doing transforms between two map coordinate systems.
Definition: qgscoordinatetransform.h:52
Definition: qgsmaprenderer.h:159
Definition: qgsmaprenderer.h:111
QStringList mLayerSet
stores array of layers to be rendered (identified by string)
Definition: qgsmaprenderer.h:403
double mMapUnitsPerPixel
map units per pixel
Definition: qgsmaprenderer.h:374
Labeling engine interface.
Definition: qgsmaprenderer.h:67
QgsRenderContext mRenderContext
Encapsulates context of rendering.
Definition: qgsmaprenderer.h:412
Definition: qgsmaprenderer.h:152
QString destAuthId
Definition: qgsmaprenderer.h:114
virtual void registerDiagramFeature(const QString &layerID, QgsFeature &feat, const QgsRenderContext &context=QgsRenderContext())
called for every diagram feature
Definition: qgsmaprenderer.h:94
Represents a vector layer which manages a vector based data sets.
Definition: qgsvectorlayer.h:468
QgsLabelingEngineInterface * mLabelingEngine
Labeling engine (NULL by default)
Definition: qgsmaprenderer.h:418
double size
Definition: qgssvgcache.cpp:77
void setOutputUnits(OutputUnits u)
Definition: qgsmaprenderer.h:269
QgsRectangle mFullExtent
full extent of the layer set
Definition: qgsmaprenderer.h:406
Definition: qgsmaprenderer.h:166
Definition: qgsmaprenderer.h:146