QGIS API Documentation  3.10.0-A Coruña (6c816b4204)
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"
36 
37 class QPainter;
39 class QgsLabelingEngine;
40 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  RenderBlocking = 0x400,
76  };
77  Q_DECLARE_FLAGS( Flags, Flag )
78 
79 
84  {
85  // refs for below dox: https://github.com/qgis/QGIS/pull/1286#issuecomment-39806854
86  // https://github.com/qgis/QGIS/pull/8573#issuecomment-445585826
87 
105 
121  };
122 
127  void setFlags( QgsRenderContext::Flags flags );
128 
133  void setFlag( Flag flag, bool on = true );
134 
139  Flags flags() const;
140 
145  bool testFlag( Flag flag ) const;
146 
151  static QgsRenderContext fromMapSettings( const QgsMapSettings &mapSettings );
152 
159  static QgsRenderContext fromQPainter( QPainter *painter );
160 
161  //getters
162 
167  QPainter *painter() {return mPainter;}
168 
179  QgsCoordinateTransform coordinateTransform() const {return mCoordTransform;}
180 
185  const QgsDistanceArea &distanceArea() const { return mDistanceArea; }
186 
195  QgsCoordinateTransformContext transformContext() const;
196 
205  void setTransformContext( const QgsCoordinateTransformContext &context );
206 
214  const QgsPathResolver &pathResolver() const { return mPathResolver; }
215 
223  void setPathResolver( const QgsPathResolver &resolver ) { mPathResolver = resolver; }
224 
240  const QgsRectangle &extent() const { return mExtent; }
241 
252  QgsRectangle mapExtent() const { return mOriginalMapExtent; }
253 
259  const QgsMapToPixel &mapToPixel() const {return mMapToPixel;}
260 
267  double scaleFactor() const {return mScaleFactor;}
268 
275  bool renderingStopped() const {return mRenderingStopped;}
276 
283  bool forceVectorOutput() const;
284 
288  bool useAdvancedEffects() const;
289 
293  void setUseAdvancedEffects( bool enabled );
294 
300  bool drawEditingInformation() const;
301 
307  double rendererScale() const {return mRendererScale;}
308 
313  QgsLabelingEngine *labelingEngine() const { return mLabelingEngine; } SIP_SKIP
314 
320  QColor selectionColor() const { return mSelectionColor; }
321 
329  bool showSelection() const;
330 
331  //setters
332 
343  void setCoordinateTransform( const QgsCoordinateTransform &t );
344 
350  void setMapToPixel( const QgsMapToPixel &mtp ) {mMapToPixel = mtp;}
351 
364  void setExtent( const QgsRectangle &extent ) {mExtent = extent;}
365 
376  void setMapExtent( const QgsRectangle &extent ) { mOriginalMapExtent = extent; }
377 
383  void setDrawEditingInformation( bool b );
384 
391  void setRenderingStopped( bool stopped ) {mRenderingStopped = stopped;}
392 
398  void setDistanceArea( const QgsDistanceArea &distanceArea ) {mDistanceArea = distanceArea ;}
399 
406  void setScaleFactor( double factor ) {mScaleFactor = factor;}
407 
413  void setRendererScale( double scale ) {mRendererScale = scale;}
414 
421  void setPainter( QPainter *p ) {mPainter = p;}
422 
429  void setForceVectorOutput( bool force );
430 
435  void setLabelingEngine( QgsLabelingEngine *engine2 ) { mLabelingEngine = engine2; } SIP_SKIP
436 
442  void setSelectionColor( const QColor &color ) { mSelectionColor = color; }
443 
451  void setShowSelection( bool showSelection );
452 
456  bool useRenderingOptimization() const;
457 
458  void setUseRenderingOptimization( bool enabled );
459 
468  const QgsVectorSimplifyMethod &vectorSimplifyMethod() const { return mVectorSimplifyMethod; }
469 
483  void setVectorSimplifyMethod( const QgsVectorSimplifyMethod &simplifyMethod ) { mVectorSimplifyMethod = simplifyMethod; }
484 
491  void setExpressionContext( const QgsExpressionContext &context ) { mExpressionContext = context; }
492 
499  QgsExpressionContext &expressionContext() { return mExpressionContext; }
500 
508  const QgsExpressionContext &expressionContext() const { return mExpressionContext; } SIP_SKIP
509 
511  const QgsAbstractGeometry *geometry() const { return mGeometry; }
513  void setGeometry( const QgsAbstractGeometry *geometry ) { mGeometry = geometry; }
514 
521  void setFeatureFilterProvider( const QgsFeatureFilterProvider *ffp );
522 
529  const QgsFeatureFilterProvider *featureFilterProvider() const;
530 
534  void setSegmentationTolerance( double tolerance ) { mSegmentationTolerance = tolerance; }
536  double segmentationTolerance() const { return mSegmentationTolerance; }
537 
541  void setSegmentationToleranceType( QgsAbstractGeometry::SegmentationToleranceType type ) { mSegmentationToleranceType = type; }
543  QgsAbstractGeometry::SegmentationToleranceType segmentationToleranceType() const { return mSegmentationToleranceType; }
544 
545  // Conversions
546 
553  double convertToPainterUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
554 
561  double convertToMapUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
562 
568  double convertFromMapUnits( double sizeInMapUnits, QgsUnitTypes::RenderUnit outputUnit ) const;
569 
576  double convertMetersToMapUnits( double meters ) const;
577 
585  {
586  return mTextRenderFormat;
587  }
588 
596  {
597  mTextRenderFormat = format;
598  }
599 
605  QList<QgsRenderedFeatureHandlerInterface *> renderedFeatureHandlers() const;
606 
612  bool hasRenderedFeatureHandlers() const { return mHasRenderedFeatureHandlers; }
613 
614  private:
615 
616  Flags mFlags;
617 
619  QPainter *mPainter = nullptr;
620 
622  QgsCoordinateTransform mCoordTransform;
623 
629  QgsDistanceArea mDistanceArea;
630 
631  QgsRectangle mExtent;
632  QgsRectangle mOriginalMapExtent;
633 
634  QgsMapToPixel mMapToPixel;
635 
637  bool mRenderingStopped = false;
638 
640  double mScaleFactor = 1.0;
641 
643  double mRendererScale = 1.0;
644 
646  QgsLabelingEngine *mLabelingEngine = nullptr;
647 
649  QColor mSelectionColor;
650 
652  QgsVectorSimplifyMethod mVectorSimplifyMethod;
653 
655  QgsExpressionContext mExpressionContext;
656 
658  const QgsAbstractGeometry *mGeometry = nullptr;
659 
661  std::unique_ptr< QgsFeatureFilterProvider > mFeatureFilterProvider;
662 
663  double mSegmentationTolerance = M_PI_2 / 90;
664 
666 
667  QgsCoordinateTransformContext mTransformContext;
668 
669  QgsPathResolver mPathResolver;
670 
671  TextRenderFormat mTextRenderFormat = TextFormatAlwaysOutlines;
672  QList< QgsRenderedFeatureHandlerInterface * > mRenderedFeatureHandlers;
673  bool mHasRenderedFeatureHandlers = false;
674 
675 #ifdef QGISDEBUG
676  bool mHasTransformContext = false;
677 #endif
678 };
679 
680 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsRenderContext::Flags )
681 
682 #endif
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...
const QgsVectorSimplifyMethod & vectorSimplifyMethod() const
Returns the simplification settings to use when rendering vector layers.
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
Returns true if the rendering operation has been stopped and any ongoing rendering should be canceled...
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.
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.
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 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.
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
Returns the context&#39;s map to pixel transform, which transforms between map coordinates and device coo...
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)
Sets the context&#39;s map to pixel transform, which transforms between map coordinates and device coordi...
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:145
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.