QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
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 "qgscoordinatetransform.h"
27 #include "qgsexpressioncontext.h"
29 #include "qgsmaptopixel.h"
30 #include "qgsmapunitscale.h"
31 #include "qgsrectangle.h"
33 #include "qgsdistancearea.h"
35 #include "qgspathresolver.h"
37 
38 class QPainter;
40 class QgsLabelingEngine;
41 class QgsMapSettings;
43 class QgsSymbolLayer;
44 
45 class QgsMaskIdProvider;
46 
47 
55 class CORE_EXPORT QgsRenderContext
56 {
57  public:
59 
61  QgsRenderContext &operator=( const QgsRenderContext &rh );
62 
67  enum Flag
68  {
69  DrawEditingInfo = 0x01,
70  ForceVectorOutput = 0x02,
71  UseAdvancedEffects = 0x04,
72  UseRenderingOptimization = 0x08,
73  DrawSelection = 0x10,
74  DrawSymbolBounds = 0x20,
75  RenderMapTile = 0x40,
76  Antialiasing = 0x80,
77  RenderPartialOutput = 0x100,
78  RenderPreviewJob = 0x200,
79  RenderBlocking = 0x400,
80  };
81  Q_DECLARE_FLAGS( Flags, Flag )
82 
83 
88  {
89  // refs for below dox: https://github.com/qgis/QGIS/pull/1286#issuecomment-39806854
90  // https://github.com/qgis/QGIS/pull/8573#issuecomment-445585826
91 
109 
125  };
126 
131  void setFlags( QgsRenderContext::Flags flags );
132 
137  void setFlag( Flag flag, bool on = true );
138 
143  Flags flags() const;
144 
149  bool testFlag( Flag flag ) const;
150 
155  static QgsRenderContext fromMapSettings( const QgsMapSettings &mapSettings );
156 
163  static QgsRenderContext fromQPainter( QPainter *painter );
164 
165  //getters
166 
171  QPainter *painter() {return mPainter;}
172 
173 #ifndef SIP_RUN
174 
180  const QPainter *painter() const { return mPainter; }
181 #endif
182 
192  QPainter *maskPainter( int id = 0 ) { return mMaskPainter.value( id, nullptr ); }
193 
203  QSet<const QgsSymbolLayer *> disabledSymbolLayers() const { return mDisabledSymbolLayers; }
204 
214  bool isSymbolLayerEnabled( const QgsSymbolLayer *layer ) const { return ! mDisabledSymbolLayers.contains( layer ); }
215 
226  QgsCoordinateTransform coordinateTransform() const {return mCoordTransform;}
227 
232  const QgsDistanceArea &distanceArea() const { return mDistanceArea; }
233 
242  QgsCoordinateTransformContext transformContext() const;
243 
252  void setTransformContext( const QgsCoordinateTransformContext &context );
253 
261  const QgsPathResolver &pathResolver() const { return mPathResolver; }
262 
270  void setPathResolver( const QgsPathResolver &resolver ) { mPathResolver = resolver; }
271 
287  const QgsRectangle &extent() const { return mExtent; }
288 
299  QgsRectangle mapExtent() const { return mOriginalMapExtent; }
300 
306  const QgsMapToPixel &mapToPixel() const {return mMapToPixel;}
307 
314  double scaleFactor() const {return mScaleFactor;}
315 
322  bool renderingStopped() const {return mRenderingStopped;}
323 
330  bool forceVectorOutput() const;
331 
337  bool useAdvancedEffects() const;
338 
344  void setUseAdvancedEffects( bool enabled );
345 
351  bool drawEditingInformation() const;
352 
358  double rendererScale() const {return mRendererScale;}
359 
364  QgsLabelingEngine *labelingEngine() const { return mLabelingEngine; } SIP_SKIP
365 
371  QColor selectionColor() const { return mSelectionColor; }
372 
380  bool showSelection() const;
381 
382  //setters
383 
394  void setCoordinateTransform( const QgsCoordinateTransform &t );
395 
401  void setMapToPixel( const QgsMapToPixel &mtp ) {mMapToPixel = mtp;}
402 
415  void setExtent( const QgsRectangle &extent ) {mExtent = extent;}
416 
427  void setMapExtent( const QgsRectangle &extent ) { mOriginalMapExtent = extent; }
428 
434  void setDrawEditingInformation( bool b );
435 
442  void setRenderingStopped( bool stopped ) {mRenderingStopped = stopped;}
443 
449  void setDistanceArea( const QgsDistanceArea &distanceArea ) {mDistanceArea = distanceArea ;}
450 
457  void setScaleFactor( double factor ) {mScaleFactor = factor;}
458 
464  void setRendererScale( double scale ) {mRendererScale = scale;}
465 
472  void setPainter( QPainter *p ) {mPainter = p;}
473 
481  void setMaskPainter( QPainter *p, int id = 0 ) { mMaskPainter[id] = p; }
482 
492  void setDisabledSymbolLayers( const QSet<const QgsSymbolLayer *> &symbolLayers ) { mDisabledSymbolLayers = symbolLayers; }
493 
500  void setForceVectorOutput( bool force );
501 
506  void setLabelingEngine( QgsLabelingEngine *engine ) { mLabelingEngine = engine; } SIP_SKIP
507 
513  void setSelectionColor( const QColor &color ) { mSelectionColor = color; }
514 
522  void setShowSelection( bool showSelection );
523 
529  bool useRenderingOptimization() const;
530 
536  void setUseRenderingOptimization( bool enabled );
537 
546  const QgsVectorSimplifyMethod &vectorSimplifyMethod() const { return mVectorSimplifyMethod; }
547 
561  void setVectorSimplifyMethod( const QgsVectorSimplifyMethod &simplifyMethod ) { mVectorSimplifyMethod = simplifyMethod; }
562 
569  void setExpressionContext( const QgsExpressionContext &context ) { mExpressionContext = context; }
570 
577  QgsExpressionContext &expressionContext() { return mExpressionContext; }
578 
586  const QgsExpressionContext &expressionContext() const { return mExpressionContext; } SIP_SKIP
587 
589  const QgsAbstractGeometry *geometry() const { return mGeometry; }
591  void setGeometry( const QgsAbstractGeometry *geometry ) { mGeometry = geometry; }
592 
599  void setFeatureFilterProvider( const QgsFeatureFilterProvider *ffp );
600 
607  const QgsFeatureFilterProvider *featureFilterProvider() const;
608 
615  void setSegmentationTolerance( double tolerance ) { mSegmentationTolerance = tolerance; }
616 
621  double segmentationTolerance() const { return mSegmentationTolerance; }
622 
629  void setSegmentationToleranceType( QgsAbstractGeometry::SegmentationToleranceType type ) { mSegmentationToleranceType = type; }
630 
635  QgsAbstractGeometry::SegmentationToleranceType segmentationToleranceType() const { return mSegmentationToleranceType; }
636 
637  // Conversions
638 
645  double convertToPainterUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
646 
653  double convertToMapUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
654 
660  double convertFromMapUnits( double sizeInMapUnits, QgsUnitTypes::RenderUnit outputUnit ) const;
661 
668  double convertMetersToMapUnits( double meters ) const;
669 
677  {
678  return mTextRenderFormat;
679  }
680 
688  {
689  mTextRenderFormat = format;
690  }
691 
697  QList<QgsRenderedFeatureHandlerInterface *> renderedFeatureHandlers() const;
698 
704  bool hasRenderedFeatureHandlers() const { return mHasRenderedFeatureHandlers; }
705 
714  void setMaskIdProvider( QgsMaskIdProvider *provider ) { mMaskIdProvider = provider; }
715 
721  const QgsMaskIdProvider *maskIdProvider() const { return mMaskIdProvider; }
722 
728  void setCurrentMaskId( int id ) { mCurrentMaskId = id; }
729 
736  int currentMaskId() const { return mCurrentMaskId; }
737 
747  void setIsGuiPreview( bool preview ) { mIsGuiPreview = preview; }
748 
759  bool isGuiPreview() const { return mIsGuiPreview; }
760 
767  QVariantMap customRenderingFlags() const { return mCustomRenderingFlags; }
768 
776  void setCustomRenderingFlag( const QString &flag, const QVariant &value ) { mCustomRenderingFlags[flag] = value; }
777 
784  void clearCustomRenderingFlag( const QString &flag ) { mCustomRenderingFlags.remove( flag ); }
785 
786  private:
787 
788  Flags mFlags;
789 
791  QPainter *mPainter = nullptr;
792 
799  QMap<int, QPainter *> mMaskPainter;
800 
806  QgsMaskIdProvider *mMaskIdProvider = nullptr;
807 
812  int mCurrentMaskId = -1;
813 
818  bool mIsGuiPreview = false;
819 
821  QgsCoordinateTransform mCoordTransform;
822 
828  QgsDistanceArea mDistanceArea;
829 
830  QgsRectangle mExtent;
831  QgsRectangle mOriginalMapExtent;
832 
833  QgsMapToPixel mMapToPixel;
834 
836  bool mRenderingStopped = false;
837 
839  double mScaleFactor = 1.0;
840 
842  double mRendererScale = 1.0;
843 
845  QgsLabelingEngine *mLabelingEngine = nullptr;
846 
848  QColor mSelectionColor;
849 
851  QgsVectorSimplifyMethod mVectorSimplifyMethod;
852 
854  QgsExpressionContext mExpressionContext;
855 
857  const QgsAbstractGeometry *mGeometry = nullptr;
858 
860  std::unique_ptr< QgsFeatureFilterProvider > mFeatureFilterProvider;
861 
862  double mSegmentationTolerance = M_PI_2 / 90;
863 
865 
866  QgsCoordinateTransformContext mTransformContext;
867 
868  QgsPathResolver mPathResolver;
869 
870  TextRenderFormat mTextRenderFormat = TextFormatAlwaysOutlines;
871  QList< QgsRenderedFeatureHandlerInterface * > mRenderedFeatureHandlers;
872  bool mHasRenderedFeatureHandlers = false;
873  QVariantMap mCustomRenderingFlags;
874 
875  QSet<const QgsSymbolLayer *> mDisabledSymbolLayers;
876 
877 #ifdef QGISDEBUG
878  bool mHasTransformContext = false;
879 #endif
880 };
881 
882 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsRenderContext::Flags )
883 
884 #endif
Some rendering operations may need multiple mask images.
void setRenderingStopped(bool stopped)
Sets whether the rendering operation has been stopped and any ongoing rendering should be canceled im...
A rectangle specified with double values.
Definition: qgsrectangle.h:41
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...
QSet< const QgsSymbolLayer * > disabledSymbolLayers() const
When rendering a map layer in a second pass (for selective masking), some symbol layers may be disabl...
const QgsVectorSimplifyMethod & vectorSimplifyMethod() const
Returns the simplification settings to use when rendering vector layers.
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
Returns true if the rendering operation has been stopped and any ongoing rendering should be canceled...
void setIsGuiPreview(bool preview)
Sets GUI preview mode.
void setVectorSimplifyMethod(const QgsVectorSimplifyMethod &simplifyMethod)
Sets the simplification setting to use when rendering vector layers.
QgsRectangle mapExtent() const
Returns the original extent of the map being rendered.
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...
void setMapExtent(const QgsRectangle &extent)
Sets the original extent of the map being rendered.
bool hasRenderedFeatureHandlers() const
Returns true if the context has any rendered feature handlers.
The QgsMapSettings class contains configuration for rendering of the map.
void setCurrentMaskId(int id)
Stores a mask id as the "current" one.
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:37
void setSelectionColor(const QColor &color)
Sets the color to use when rendering selected features.
void setScaleFactor(double factor)
Sets the scaling factor for the render to convert painter units to physical sizes.
bool isGuiPreview() const
Returns the Gui preview mode.
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:126
const QPainter * painter() const
Returns the const destination QPainter for the render operation.
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...
An interface for classes which provider custom handlers for features rendered as part of a map render...
QColor selectionColor() const
Returns the color to use when rendering selected features.
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
void setMaskPainter(QPainter *p, int id=0)
Sets a mask 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.
QPainter * maskPainter(int id=0)
Returns a mask QPainter for the render operation.
TextRenderFormat
Options for rendering text.
QgsExpressionContext & expressionContext()
Gets the expression context.
void setSegmentationTolerance(double tolerance)
Sets the segmentation tolerance applied when rendering curved geometries.
void setLabelingEngine(QgsLabelingEngine *engine)
Assign new labeling engine.
A general purpose distance and area calculator, capable of performing ellipsoid based calculations...
The QgsLabelingEngine class provides map labeling functionality.
bool isSymbolLayerEnabled(const QgsSymbolLayer *layer) const
When rendering a map layer in a second pass (for selective masking), some symbol layers may be disabl...
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
Returns the context&#39;s map to pixel transform, which transforms between map coordinates and device coo...
void clearCustomRenderingFlag(const QString &flag)
Clears the specified custom rendering flag.
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 setMaskIdProvider(QgsMaskIdProvider *provider)
Attaches a mask id provider to the context.
void setMapToPixel(const QgsMapToPixel &mtp)
Sets the context&#39;s map to pixel transform, which transforms between map coordinates and device coordi...
void setCustomRenderingFlag(const QString &flag, const QVariant &value)
Sets a custom rendering flag.
QVariantMap customRenderingFlags() const
Gets custom rendering flags.
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).
void setDisabledSymbolLayers(const QSet< const QgsSymbolLayer *> &symbolLayers)
When rendering a map layer in a second pass (for selective masking), some symbol layers may be disabl...
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:145
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
const QgsMaskIdProvider * maskIdProvider() const
Returns the mask id provider attached to the context.
int currentMaskId() const
Returns the current mask id, which can be used with maskPainter()