QGIS API Documentation  3.9.0-Master (224899f119)
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  };
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 
239  const QgsRectangle &extent() const { return mExtent; }
240 
251  QgsRectangle mapExtent() const { return mOriginalMapExtent; }
252 
258  const QgsMapToPixel &mapToPixel() const {return mMapToPixel;}
259 
266  double scaleFactor() const {return mScaleFactor;}
267 
274  bool renderingStopped() const {return mRenderingStopped;}
275 
282  bool forceVectorOutput() const;
283 
287  bool useAdvancedEffects() const;
288 
292  void setUseAdvancedEffects( bool enabled );
293 
299  bool drawEditingInformation() const;
300 
306  double rendererScale() const {return mRendererScale;}
307 
312  QgsLabelingEngine *labelingEngine() const { return mLabelingEngine; } SIP_SKIP
313 
319  QColor selectionColor() const { return mSelectionColor; }
320 
328  bool showSelection() const;
329 
330  //setters
331 
342  void setCoordinateTransform( const QgsCoordinateTransform &t );
343 
349  void setMapToPixel( const QgsMapToPixel &mtp ) {mMapToPixel = mtp;}
350 
363  void setExtent( const QgsRectangle &extent ) {mExtent = extent;}
364 
375  void setMapExtent( const QgsRectangle &extent ) { mOriginalMapExtent = extent; }
376 
382  void setDrawEditingInformation( bool b );
383 
390  void setRenderingStopped( bool stopped ) {mRenderingStopped = stopped;}
391 
397  void setDistanceArea( const QgsDistanceArea &distanceArea ) {mDistanceArea = distanceArea ;}
398 
405  void setScaleFactor( double factor ) {mScaleFactor = factor;}
406 
412  void setRendererScale( double scale ) {mRendererScale = scale;}
413 
420  void setPainter( QPainter *p ) {mPainter = p;}
421 
428  void setForceVectorOutput( bool force );
429 
434  void setLabelingEngine( QgsLabelingEngine *engine2 ) { mLabelingEngine = engine2; } SIP_SKIP
435 
441  void setSelectionColor( const QColor &color ) { mSelectionColor = color; }
442 
450  void setShowSelection( bool showSelection );
451 
455  bool useRenderingOptimization() const;
456 
457  void setUseRenderingOptimization( bool enabled );
458 
467  const QgsVectorSimplifyMethod &vectorSimplifyMethod() const { return mVectorSimplifyMethod; }
468 
482  void setVectorSimplifyMethod( const QgsVectorSimplifyMethod &simplifyMethod ) { mVectorSimplifyMethod = simplifyMethod; }
483 
490  void setExpressionContext( const QgsExpressionContext &context ) { mExpressionContext = context; }
491 
498  QgsExpressionContext &expressionContext() { return mExpressionContext; }
499 
507  const QgsExpressionContext &expressionContext() const { return mExpressionContext; } SIP_SKIP
508 
510  const QgsAbstractGeometry *geometry() const { return mGeometry; }
512  void setGeometry( const QgsAbstractGeometry *geometry ) { mGeometry = geometry; }
513 
520  void setFeatureFilterProvider( const QgsFeatureFilterProvider *ffp );
521 
528  const QgsFeatureFilterProvider *featureFilterProvider() const;
529 
533  void setSegmentationTolerance( double tolerance ) { mSegmentationTolerance = tolerance; }
535  double segmentationTolerance() const { return mSegmentationTolerance; }
536 
540  void setSegmentationToleranceType( QgsAbstractGeometry::SegmentationToleranceType type ) { mSegmentationToleranceType = type; }
542  QgsAbstractGeometry::SegmentationToleranceType segmentationToleranceType() const { return mSegmentationToleranceType; }
543 
544  // Conversions
545 
552  double convertToPainterUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
553 
560  double convertToMapUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale = QgsMapUnitScale() ) const;
561 
567  double convertFromMapUnits( double sizeInMapUnits, QgsUnitTypes::RenderUnit outputUnit ) const;
568 
575  double convertMetersToMapUnits( double meters ) const;
576 
584  {
585  return mTextRenderFormat;
586  }
587 
595  {
596  mTextRenderFormat = format;
597  }
598 
604  QList<QgsRenderedFeatureHandlerInterface *> renderedFeatureHandlers() const;
605 
611  bool hasRenderedFeatureHandlers() const { return mHasRenderedFeatureHandlers; }
612 
613  private:
614 
615  Flags mFlags;
616 
618  QPainter *mPainter = nullptr;
619 
621  QgsCoordinateTransform mCoordTransform;
622 
628  QgsDistanceArea mDistanceArea;
629 
630  QgsRectangle mExtent;
631  QgsRectangle mOriginalMapExtent;
632 
633  QgsMapToPixel mMapToPixel;
634 
636  bool mRenderingStopped = false;
637 
639  double mScaleFactor = 1.0;
640 
642  double mRendererScale = 1.0;
643 
645  QgsLabelingEngine *mLabelingEngine = nullptr;
646 
648  QColor mSelectionColor;
649 
651  QgsVectorSimplifyMethod mVectorSimplifyMethod;
652 
654  QgsExpressionContext mExpressionContext;
655 
657  const QgsAbstractGeometry *mGeometry = nullptr;
658 
660  std::unique_ptr< QgsFeatureFilterProvider > mFeatureFilterProvider;
661 
662  double mSegmentationTolerance = M_PI_2 / 90;
663 
665 
666  QgsCoordinateTransformContext mTransformContext;
667 
668  QgsPathResolver mPathResolver;
669 
670  TextRenderFormat mTextRenderFormat = TextFormatAlwaysOutlines;
671  QList< QgsRenderedFeatureHandlerInterface * > mRenderedFeatureHandlers;
672  bool mHasRenderedFeatureHandlers = false;
673 
674 #ifdef QGISDEBUG
675  bool mHasTransformContext = false;
676 #endif
677 };
678 
679 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsRenderContext::Flags )
680 
681 #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:113
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.