QGIS API Documentation  2.99.0-Master (cd0ba91)
qgsrendercontext.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsrendercontext.h
3  ------------------
4  begin : March 16, 2008
5  copyright : (C) 2008 by Marco Hugentobler
6  email : marco dot hugentobler at karto dot baug dot ethz dot ch
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef QGSRENDERCONTEXT_H
19 #define QGSRENDERCONTEXT_H
20 
21 #include "qgis_core.h"
22 #include "qgis_sip.h"
23 #include <QColor>
24 #include <memory>
25 
26 #include "qgsabstractgeometry.h"
27 #include "qgscoordinatetransform.h"
28 #include "qgsexpressioncontext.h"
30 #include "qgsmaptopixel.h"
31 #include "qgsmapunitscale.h"
32 #include "qgsrectangle.h"
34 #include "qgsdistancearea.h"
35 
36 class QPainter;
38 class QgsLabelingEngine;
39 class QgsMapSettings;
40 
41 
49 class CORE_EXPORT QgsRenderContext
50 {
51  public:
53 
55  QgsRenderContext &operator=( const QgsRenderContext &rh );
56 
61  enum Flag
62  {
63  DrawEditingInfo = 0x01,
64  ForceVectorOutput = 0x02,
65  UseAdvancedEffects = 0x04,
66  UseRenderingOptimization = 0x08,
67  DrawSelection = 0x10,
68  DrawSymbolBounds = 0x20,
69  RenderMapTile = 0x40,
70  Antialiasing = 0x80,
71  RenderPartialOutput = 0x100,
72  RenderPreviewJob = 0x200,
73  };
74  Q_DECLARE_FLAGS( Flags, Flag )
75 
76 
80  void setFlags( QgsRenderContext::Flags flags );
81 
86  void setFlag( Flag flag, bool on = true );
87 
92  Flags flags() const;
93 
98  bool testFlag( Flag flag ) const;
99 
104  static QgsRenderContext fromMapSettings( const QgsMapSettings &mapSettings );
105 
112  static QgsRenderContext fromQPainter( QPainter *painter );
113 
114  //getters
115 
120  QPainter *painter() {return mPainter;}
121 
126  QgsCoordinateTransform coordinateTransform() const {return mCoordTransform;}
127 
132  const QgsDistanceArea &distanceArea() const { return mDistanceArea; }
133 
134  const QgsRectangle &extent() const {return mExtent;}
135 
136  const QgsMapToPixel &mapToPixel() const {return mMapToPixel;}
137 
144  double scaleFactor() const {return mScaleFactor;}
145 
146  bool renderingStopped() const {return mRenderingStopped;}
147 
148  bool forceVectorOutput() const;
149 
153  bool useAdvancedEffects() const;
154 
158  void setUseAdvancedEffects( bool enabled );
159 
160  bool drawEditingInformation() const;
161 
167  double rendererScale() const {return mRendererScale;}
168 
173  QgsLabelingEngine *labelingEngine() const { return mLabelingEngine; } SIP_SKIP
174 
175  QColor selectionColor() const { return mSelectionColor; }
176 
184  bool showSelection() const;
185 
186  //setters
187 
189  void setCoordinateTransform( const QgsCoordinateTransform &t );
190  void setMapToPixel( const QgsMapToPixel &mtp ) {mMapToPixel = mtp;}
191  void setExtent( const QgsRectangle &extent ) {mExtent = extent;}
192 
193  void setDrawEditingInformation( bool b );
194 
195  void setRenderingStopped( bool stopped ) {mRenderingStopped = stopped;}
196 
202  void setDistanceArea( const QgsDistanceArea &distanceArea ) {mDistanceArea = distanceArea ;}
203 
210  void setScaleFactor( double factor ) {mScaleFactor = factor;}
211 
217  void setRendererScale( double scale ) {mRendererScale = scale;}
218 
225  void setPainter( QPainter *p ) {mPainter = p;}
226 
227  void setForceVectorOutput( bool force );
228 
233  void setLabelingEngine( QgsLabelingEngine *engine2 ) { mLabelingEngine = engine2; } SIP_SKIP
234  void setSelectionColor( const QColor &color ) { mSelectionColor = color; }
235 
243  void setShowSelection( const bool showSelection );
244 
248  bool useRenderingOptimization() const;
249 
250  void setUseRenderingOptimization( bool enabled );
251 
253  const QgsVectorSimplifyMethod &vectorSimplifyMethod() const { return mVectorSimplifyMethod; }
254  void setVectorSimplifyMethod( const QgsVectorSimplifyMethod &simplifyMethod ) { mVectorSimplifyMethod = simplifyMethod; }
255 
262  void setExpressionContext( const QgsExpressionContext &context ) { mExpressionContext = context; }
263 
270  QgsExpressionContext &expressionContext() { return mExpressionContext; }
271 
279  const QgsExpressionContext &expressionContext() const { return mExpressionContext; } SIP_SKIP
280 
282  const QgsAbstractGeometry *geometry() const { return mGeometry; }
284  void setGeometry( const QgsAbstractGeometry *geometry ) { mGeometry = geometry; }
285 
292  void setFeatureFilterProvider( const QgsFeatureFilterProvider *ffp );
293 
300  const QgsFeatureFilterProvider *featureFilterProvider() const;
301 
305  void setSegmentationTolerance( double tolerance ) { mSegmentationTolerance = tolerance; }
307  double segmentationTolerance() const { return mSegmentationTolerance; }
308 
312  void setSegmentationToleranceType( QgsAbstractGeometry::SegmentationToleranceType type ) { mSegmentationToleranceType = type; }
314  QgsAbstractGeometry::SegmentationToleranceType segmentationToleranceType() const { return mSegmentationToleranceType; }
315 
316  // Conversions
317 
324  double convertToPainterUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
325 
332  double convertToMapUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
333 
339  double convertFromMapUnits( double sizeInMapUnits, QgsUnitTypes::RenderUnit outputUnit ) const;
340 
347  double convertMetersToMapUnits( double meters ) const;
348 
349  private:
350 
351  Flags mFlags;
352 
354  QPainter *mPainter = nullptr;
355 
357  QgsCoordinateTransform mCoordTransform;
358 
364  QgsDistanceArea mDistanceArea;
365 
366  QgsRectangle mExtent;
367 
368  QgsMapToPixel mMapToPixel;
369 
371  bool mRenderingStopped = false;
372 
374  double mScaleFactor = 1.0;
375 
377  double mRendererScale = 1.0;
378 
380  QgsLabelingEngine *mLabelingEngine = nullptr;
381 
383  QColor mSelectionColor;
384 
386  QgsVectorSimplifyMethod mVectorSimplifyMethod;
387 
389  QgsExpressionContext mExpressionContext;
390 
392  const QgsAbstractGeometry *mGeometry = nullptr;
393 
395  std::unique_ptr< QgsFeatureFilterProvider > mFeatureFilterProvider;
396 
397  double mSegmentationTolerance = M_PI_2 / 90;
398 
400 };
401 
402 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsRenderContext::Flags )
403 
404 #endif
void setRenderingStopped(bool stopped)
A rectangle specified with double values.
Definition: qgsrectangle.h:39
double rendererScale() const
Returns the renderer map scale.
const QgsVectorSimplifyMethod & vectorSimplifyMethod() const
Added in QGIS v2.4.
void setLabelingEngine(QgsLabelingEngine *engine2)
Assign new labeling engine.
Maximum angle between generating radii (lines from arc center to output vertices) ...
QgsLabelingEngine * labelingEngine() const
Get access to new labeling engine (may be nullptr)
void setRendererScale(double scale)
Sets the renderer map scale.
bool renderingStopped() const
void setVectorSimplifyMethod(const QgsVectorSimplifyMethod &simplifyMethod)
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle...
QgsAbstractGeometry::SegmentationToleranceType segmentationToleranceType() const
Gets segmentation tolerance type (maximum angle or maximum difference between curve and approximation...
void setExtent(const QgsRectangle &extent)
The QgsMapSettings class contains configuration for rendering of the map.
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:36
void setSelectionColor(const QColor &color)
void setScaleFactor(double factor)
Sets the scaling factor for the render to convert painter units to physical sizes.
void setGeometry(const QgsAbstractGeometry *geometry)
Sets pointer to original (unsegmentized) geometry.
const QgsRectangle & extent() const
#define SIP_SKIP
Definition: qgis_sip.h:119
const QgsAbstractGeometry * geometry() const
Returns pointer to the unsegmentized geometry.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QColor selectionColor() const
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
QgsCoordinateTransform coordinateTransform() const
Returns the current coordinate transform for the context, or an invalid transform is no coordinate tr...
Abstract interface for use by classes that filter the features of a layer.
void setSegmentationToleranceType(QgsAbstractGeometry::SegmentationToleranceType type)
Sets segmentation tolerance type (maximum angle or maximum difference between curve and approximation...
Abstract base class for all geometries.
QgsExpressionContext & expressionContext()
Gets the expression context.
void setSegmentationTolerance(double tolerance)
Sets the segmentation tolerance applied when rendering curved geometries.
A general purpose distance and area calculator, capable of performing ellipsoid based calculations...
The QgsLabelingEngine class provides map labeling functionality.
This class contains information how to simplify geometries fetched from a vector layer.
Contains information about the context of a rendering operation.
double segmentationTolerance() const
Gets the segmentation tolerance applied when rendering curved geometries.
QPainter * painter()
Returns the destination QPainter for the render operation.
const QgsMapToPixel & mapToPixel() const
Struct for storing maximum and minimum scales for measurements in map units.
const QgsDistanceArea & distanceArea() const
A general purpose distance and area calculator, capable of performing ellipsoid based calculations...
void setMapToPixel(const QgsMapToPixel &mtp)
Class for doing transforms between two map coordinate systems.
void setDistanceArea(const QgsDistanceArea &distanceArea)
A general purpose distance and area calculator, capable of performing ellipsoid based calculations...
Flag
Enumeration of flags that affect rendering operations.
double scaleFactor() const
Returns the scaling factor for the render to convert painter units to physical sizes.
const QgsExpressionContext & expressionContext() const
Gets the expression context (const version).
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:100
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.