QGIS API Documentation  2.99.0-Master (ae4d26a)
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  };
73  Q_DECLARE_FLAGS( Flags, Flag )
74 
75 
79  void setFlags( QgsRenderContext::Flags flags );
80 
85  void setFlag( Flag flag, bool on = true );
86 
91  Flags flags() const;
92 
97  bool testFlag( Flag flag ) const;
98 
103  static QgsRenderContext fromMapSettings( const QgsMapSettings &mapSettings );
104 
111  static QgsRenderContext fromQPainter( QPainter *painter );
112 
113  //getters
114 
119  QPainter *painter() {return mPainter;}
120 
125  QgsCoordinateTransform coordinateTransform() const {return mCoordTransform;}
126 
131  const QgsDistanceArea &distanceArea() const { return mDistanceArea; }
132 
133  const QgsRectangle &extent() const {return mExtent;}
134 
135  const QgsMapToPixel &mapToPixel() const {return mMapToPixel;}
136 
143  double scaleFactor() const {return mScaleFactor;}
144 
145  bool renderingStopped() const {return mRenderingStopped;}
146 
147  bool forceVectorOutput() const;
148 
152  bool useAdvancedEffects() const;
153 
157  void setUseAdvancedEffects( bool enabled );
158 
159  bool drawEditingInformation() const;
160 
166  double rendererScale() const {return mRendererScale;}
167 
172  QgsLabelingEngine *labelingEngine() const { return mLabelingEngine; } SIP_SKIP
173 
174  QColor selectionColor() const { return mSelectionColor; }
175 
183  bool showSelection() const;
184 
185  //setters
186 
188  void setCoordinateTransform( const QgsCoordinateTransform &t );
189  void setMapToPixel( const QgsMapToPixel &mtp ) {mMapToPixel = mtp;}
190  void setExtent( const QgsRectangle &extent ) {mExtent = extent;}
191 
192  void setDrawEditingInformation( bool b );
193 
194  void setRenderingStopped( bool stopped ) {mRenderingStopped = stopped;}
195 
201  void setDistanceArea( const QgsDistanceArea &distanceArea ) {mDistanceArea = distanceArea ;}
202 
209  void setScaleFactor( double factor ) {mScaleFactor = factor;}
210 
216  void setRendererScale( double scale ) {mRendererScale = scale;}
217 
224  void setPainter( QPainter *p ) {mPainter = p;}
225 
226  void setForceVectorOutput( bool force );
227 
232  void setLabelingEngine( QgsLabelingEngine *engine2 ) { mLabelingEngine = engine2; } SIP_SKIP
233  void setSelectionColor( const QColor &color ) { mSelectionColor = color; }
234 
242  void setShowSelection( const bool showSelection );
243 
247  bool useRenderingOptimization() const;
248 
249  void setUseRenderingOptimization( bool enabled );
250 
252  const QgsVectorSimplifyMethod &vectorSimplifyMethod() const { return mVectorSimplifyMethod; }
253  void setVectorSimplifyMethod( const QgsVectorSimplifyMethod &simplifyMethod ) { mVectorSimplifyMethod = simplifyMethod; }
254 
261  void setExpressionContext( const QgsExpressionContext &context ) { mExpressionContext = context; }
262 
269  QgsExpressionContext &expressionContext() { return mExpressionContext; }
270 
278  const QgsExpressionContext &expressionContext() const { return mExpressionContext; } SIP_SKIP
279 
281  const QgsAbstractGeometry *geometry() const { return mGeometry; }
283  void setGeometry( const QgsAbstractGeometry *geometry ) { mGeometry = geometry; }
284 
291  void setFeatureFilterProvider( const QgsFeatureFilterProvider *ffp );
292 
299  const QgsFeatureFilterProvider *featureFilterProvider() const;
300 
304  void setSegmentationTolerance( double tolerance ) { mSegmentationTolerance = tolerance; }
306  double segmentationTolerance() const { return mSegmentationTolerance; }
307 
311  void setSegmentationToleranceType( QgsAbstractGeometry::SegmentationToleranceType type ) { mSegmentationToleranceType = type; }
313  QgsAbstractGeometry::SegmentationToleranceType segmentationToleranceType() const { return mSegmentationToleranceType; }
314 
315  // Conversions
316 
323  double convertToPainterUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
324 
331  double convertToMapUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
332 
338  double convertFromMapUnits( double sizeInMapUnits, QgsUnitTypes::RenderUnit outputUnit ) const;
339 
346  double convertMetersToMapUnits( double meters ) const;
347 
348  private:
349 
350  Flags mFlags;
351 
353  QPainter *mPainter = nullptr;
354 
356  QgsCoordinateTransform mCoordTransform;
357 
363  QgsDistanceArea mDistanceArea;
364 
365  QgsRectangle mExtent;
366 
367  QgsMapToPixel mMapToPixel;
368 
370  bool mRenderingStopped = false;
371 
373  double mScaleFactor = 1.0;
374 
376  double mRendererScale = 1.0;
377 
379  QgsLabelingEngine *mLabelingEngine = nullptr;
380 
382  QColor mSelectionColor;
383 
385  QgsVectorSimplifyMethod mVectorSimplifyMethod;
386 
388  QgsExpressionContext mExpressionContext;
389 
391  const QgsAbstractGeometry *mGeometry = nullptr;
392 
394  std::unique_ptr< QgsFeatureFilterProvider > mFeatureFilterProvider;
395 
396  double mSegmentationTolerance = M_PI_2 / 90;
397 
399 };
400 
401 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsRenderContext::Flags )
402 
403 #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.