QGIS API Documentation  3.4.3-Madeira (2f64a3c)
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"
36 #include "qgspathresolver.h"
37 
38 class QPainter;
40 class QgsLabelingEngine;
41 class QgsMapSettings;
42 
43 
51 class CORE_EXPORT QgsRenderContext
52 {
53  public:
55 
57  QgsRenderContext &operator=( const QgsRenderContext &rh );
58 
63  enum Flag
64  {
65  DrawEditingInfo = 0x01,
66  ForceVectorOutput = 0x02,
67  UseAdvancedEffects = 0x04,
68  UseRenderingOptimization = 0x08,
69  DrawSelection = 0x10,
70  DrawSymbolBounds = 0x20,
71  RenderMapTile = 0x40,
72  Antialiasing = 0x80,
73  RenderPartialOutput = 0x100,
74  RenderPreviewJob = 0x200,
75  };
76  Q_DECLARE_FLAGS( Flags, Flag )
77 
78 
83  {
84  // refs for below dox: https://github.com/qgis/QGIS/pull/1286#issuecomment-39806854
85  // https://github.com/qgis/QGIS/pull/8573#issuecomment-445585826
86 
104 
120  };
121 
126  void setFlags( QgsRenderContext::Flags flags );
127 
132  void setFlag( Flag flag, bool on = true );
133 
138  Flags flags() const;
139 
144  bool testFlag( Flag flag ) const;
145 
150  static QgsRenderContext fromMapSettings( const QgsMapSettings &mapSettings );
151 
158  static QgsRenderContext fromQPainter( QPainter *painter );
159 
160  //getters
161 
166  QPainter *painter() {return mPainter;}
167 
178  QgsCoordinateTransform coordinateTransform() const {return mCoordTransform;}
179 
184  const QgsDistanceArea &distanceArea() const { return mDistanceArea; }
185 
194  QgsCoordinateTransformContext transformContext() const;
195 
204  void setTransformContext( const QgsCoordinateTransformContext &context );
205 
213  const QgsPathResolver &pathResolver() const { return mPathResolver; }
214 
222  void setPathResolver( const QgsPathResolver &resolver ) { mPathResolver = resolver; }
223 
238  const QgsRectangle &extent() const { return mExtent; }
239 
240  const QgsMapToPixel &mapToPixel() const {return mMapToPixel;}
241 
248  double scaleFactor() const {return mScaleFactor;}
249 
250  bool renderingStopped() const {return mRenderingStopped;}
251 
252  bool forceVectorOutput() const;
253 
257  bool useAdvancedEffects() const;
258 
262  void setUseAdvancedEffects( bool enabled );
263 
264  bool drawEditingInformation() const;
265 
271  double rendererScale() const {return mRendererScale;}
272 
277  QgsLabelingEngine *labelingEngine() const { return mLabelingEngine; } SIP_SKIP
278 
279  QColor selectionColor() const { return mSelectionColor; }
280 
288  bool showSelection() const;
289 
290  //setters
291 
302  void setCoordinateTransform( const QgsCoordinateTransform &t );
303 
304  void setMapToPixel( const QgsMapToPixel &mtp ) {mMapToPixel = mtp;}
305 
317  void setExtent( const QgsRectangle &extent ) {mExtent = extent;}
318 
319  void setDrawEditingInformation( bool b );
320 
321  void setRenderingStopped( bool stopped ) {mRenderingStopped = stopped;}
322 
328  void setDistanceArea( const QgsDistanceArea &distanceArea ) {mDistanceArea = distanceArea ;}
329 
336  void setScaleFactor( double factor ) {mScaleFactor = factor;}
337 
343  void setRendererScale( double scale ) {mRendererScale = scale;}
344 
351  void setPainter( QPainter *p ) {mPainter = p;}
352 
353  void setForceVectorOutput( bool force );
354 
359  void setLabelingEngine( QgsLabelingEngine *engine2 ) { mLabelingEngine = engine2; } SIP_SKIP
360  void setSelectionColor( const QColor &color ) { mSelectionColor = color; }
361 
369  void setShowSelection( bool showSelection );
370 
374  bool useRenderingOptimization() const;
375 
376  void setUseRenderingOptimization( bool enabled );
377 
379  const QgsVectorSimplifyMethod &vectorSimplifyMethod() const { return mVectorSimplifyMethod; }
380  void setVectorSimplifyMethod( const QgsVectorSimplifyMethod &simplifyMethod ) { mVectorSimplifyMethod = simplifyMethod; }
381 
388  void setExpressionContext( const QgsExpressionContext &context ) { mExpressionContext = context; }
389 
396  QgsExpressionContext &expressionContext() { return mExpressionContext; }
397 
405  const QgsExpressionContext &expressionContext() const { return mExpressionContext; } SIP_SKIP
406 
408  const QgsAbstractGeometry *geometry() const { return mGeometry; }
410  void setGeometry( const QgsAbstractGeometry *geometry ) { mGeometry = geometry; }
411 
418  void setFeatureFilterProvider( const QgsFeatureFilterProvider *ffp );
419 
426  const QgsFeatureFilterProvider *featureFilterProvider() const;
427 
431  void setSegmentationTolerance( double tolerance ) { mSegmentationTolerance = tolerance; }
433  double segmentationTolerance() const { return mSegmentationTolerance; }
434 
438  void setSegmentationToleranceType( QgsAbstractGeometry::SegmentationToleranceType type ) { mSegmentationToleranceType = type; }
440  QgsAbstractGeometry::SegmentationToleranceType segmentationToleranceType() const { return mSegmentationToleranceType; }
441 
442  // Conversions
443 
450  double convertToPainterUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
451 
458  double convertToMapUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
459 
465  double convertFromMapUnits( double sizeInMapUnits, QgsUnitTypes::RenderUnit outputUnit ) const;
466 
473  double convertMetersToMapUnits( double meters ) const;
474 
482  {
483  return mTextRenderFormat;
484  }
485 
493  {
494  mTextRenderFormat = format;
495  }
496 
497  private:
498 
499  Flags mFlags;
500 
502  QPainter *mPainter = nullptr;
503 
505  QgsCoordinateTransform mCoordTransform;
506 
512  QgsDistanceArea mDistanceArea;
513 
514  QgsRectangle mExtent;
515 
516  QgsMapToPixel mMapToPixel;
517 
519  bool mRenderingStopped = false;
520 
522  double mScaleFactor = 1.0;
523 
525  double mRendererScale = 1.0;
526 
528  QgsLabelingEngine *mLabelingEngine = nullptr;
529 
531  QColor mSelectionColor;
532 
534  QgsVectorSimplifyMethod mVectorSimplifyMethod;
535 
537  QgsExpressionContext mExpressionContext;
538 
540  const QgsAbstractGeometry *mGeometry = nullptr;
541 
543  std::unique_ptr< QgsFeatureFilterProvider > mFeatureFilterProvider;
544 
545  double mSegmentationTolerance = M_PI_2 / 90;
546 
548 
549  QgsCoordinateTransformContext mTransformContext;
550 
551  QgsPathResolver mPathResolver;
552 
553  TextRenderFormat mTextRenderFormat = TextFormatAlwaysOutlines;
554 
555 #ifdef QGISDEBUG
556  bool mHasTransformContext = false;
557 #endif
558 };
559 
560 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsRenderContext::Flags )
561 
562 #endif
void setRenderingStopped(bool stopped)
A rectangle specified with double values.
Definition: qgsrectangle.h:40
double rendererScale() const
Returns the renderer map scale.
const QgsPathResolver & pathResolver() const
Returns the path resolver for conversion between relative and absolute paths during rendering operati...
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
Gets access to new labeling engine (may be nullptr)
Always render text as text objects.
void setRendererScale(double scale)
Sets the renderer map scale.
void setPathResolver(const QgsPathResolver &resolver)
Sets the path resolver for conversion between relative and absolute paths during rendering operations...
bool renderingStopped() const
void setVectorSimplifyMethod(const QgsVectorSimplifyMethod &simplifyMethod)
TextRenderFormat textRenderFormat() const
Returns the text render format, which dictates how text is rendered (e.g.
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 setTextRenderFormat(TextRenderFormat format)
Sets the text render format, which dictates how text is rendered (e.g.
void setExtent(const QgsRectangle &extent)
When rendering a map layer, calling this method sets the "clipping" extent for the layer (in the laye...
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
When rendering a map layer, calling this method returns the "clipping" extent for the layer (in the l...
#define SIP_SKIP
Definition: qgis_sip.h:119
const QgsAbstractGeometry * geometry() const
Returns pointer to the unsegmentized geometry.
Always render text using path objects (AKA outlines/curves).
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.
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.
Contains information about the context in which a coordinate transform is executed.
TextRenderFormat
Options for rendering text.
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...
Resolves relative paths into absolute paths and vice versa.
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:110
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.