QGIS API Documentation  3.22.4-Białowieża (ce8e65e95e)
qgsrendercontext.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsrendercontext.cpp
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 
19 #include "qgsrendercontext.h"
20 
21 #include "qgsmapsettings.h"
22 #include "qgsexpression.h"
23 #include "qgsvectorlayer.h"
25 #include "qgslogger.h"
26 #include "qgspoint.h"
27 
28 #define POINTS_TO_MM 2.83464567
29 #define INCH_TO_MM 25.4
30 
32  : mFlags( Qgis::RenderContextFlag::DrawEditingInfo | Qgis::RenderContextFlag::UseAdvancedEffects | Qgis::RenderContextFlag::DrawSelection | Qgis::RenderContextFlag::UseRenderingOptimization )
33 {
35  // For RenderMetersInMapUnits support, when rendering in Degrees, the Ellipsoid must be set
36  // - for Previews/Icons the default Extent can be used
37  mDistanceArea.setEllipsoid( mDistanceArea.sourceCrs().ellipsoidAcronym() );
38 }
39 
41 
44  , mFlags( rh.mFlags )
45  , mPainter( rh.mPainter )
46  , mMaskPainter( rh.mMaskPainter )
47  , mCoordTransform( rh.mCoordTransform )
48  , mDistanceArea( rh.mDistanceArea )
49  , mExtent( rh.mExtent )
50  , mOriginalMapExtent( rh.mOriginalMapExtent )
51  , mMapToPixel( rh.mMapToPixel )
52  , mRenderingStopped( rh.mRenderingStopped )
53  , mFeedback( rh.mFeedback )
54  , mScaleFactor( rh.mScaleFactor )
55  , mDpiTarget( rh.mDpiTarget )
56  , mRendererScale( rh.mRendererScale )
57  , mSymbologyReferenceScale( rh.mSymbologyReferenceScale )
58  , mLabelingEngine( rh.mLabelingEngine )
59  , mSelectionColor( rh.mSelectionColor )
60  , mVectorSimplifyMethod( rh.mVectorSimplifyMethod )
61  , mExpressionContext( rh.mExpressionContext )
62  , mGeometry( rh.mGeometry )
63  , mFeatureFilterProvider( rh.mFeatureFilterProvider ? rh.mFeatureFilterProvider->clone() : nullptr )
64  , mSegmentationTolerance( rh.mSegmentationTolerance )
65  , mSegmentationToleranceType( rh.mSegmentationToleranceType )
66  , mTransformContext( rh.mTransformContext )
67  , mPathResolver( rh.mPathResolver )
68  , mTextRenderFormat( rh.mTextRenderFormat )
69  , mRenderedFeatureHandlers( rh.mRenderedFeatureHandlers )
70  , mHasRenderedFeatureHandlers( rh.mHasRenderedFeatureHandlers )
71  , mCustomRenderingFlags( rh.mCustomRenderingFlags )
72  , mDisabledSymbolLayers()
73  , mClippingRegions( rh.mClippingRegions )
74  , mFeatureClipGeometry( rh.mFeatureClipGeometry )
75  , mTextureOrigin( rh.mTextureOrigin )
76  , mZRange( rh.mZRange )
77  , mSize( rh.mSize )
78  , mDevicePixelRatio( rh.mDevicePixelRatio )
79  , mImageFormat( rh.mImageFormat )
80 #ifdef QGISDEBUG
81  , mHasTransformContext( rh.mHasTransformContext )
82 #endif
83 {
84 }
85 
87 {
88  mFlags = rh.mFlags;
89  mPainter = rh.mPainter;
90  mMaskPainter = rh.mMaskPainter;
91  mCoordTransform = rh.mCoordTransform;
92  mExtent = rh.mExtent;
93  mOriginalMapExtent = rh.mOriginalMapExtent;
94  mMapToPixel = rh.mMapToPixel;
95  mRenderingStopped = rh.mRenderingStopped;
96  mFeedback = rh.mFeedback;
97  mScaleFactor = rh.mScaleFactor;
98  mDpiTarget = rh.mDpiTarget;
99  mRendererScale = rh.mRendererScale;
100  mSymbologyReferenceScale = rh.mSymbologyReferenceScale;
101  mLabelingEngine = rh.mLabelingEngine;
102  mSelectionColor = rh.mSelectionColor;
103  mVectorSimplifyMethod = rh.mVectorSimplifyMethod;
104  mExpressionContext = rh.mExpressionContext;
105  mGeometry = rh.mGeometry;
106  mFeatureFilterProvider.reset( rh.mFeatureFilterProvider ? rh.mFeatureFilterProvider->clone() : nullptr );
107  mSegmentationTolerance = rh.mSegmentationTolerance;
108  mSegmentationToleranceType = rh.mSegmentationToleranceType;
109  mDistanceArea = rh.mDistanceArea;
110  mTransformContext = rh.mTransformContext;
111  mPathResolver = rh.mPathResolver;
112  mTextRenderFormat = rh.mTextRenderFormat;
113  mRenderedFeatureHandlers = rh.mRenderedFeatureHandlers;
114  mHasRenderedFeatureHandlers = rh.mHasRenderedFeatureHandlers;
115  mCustomRenderingFlags = rh.mCustomRenderingFlags;
116  mClippingRegions = rh.mClippingRegions;
117  mFeatureClipGeometry = rh.mFeatureClipGeometry;
118  mTextureOrigin = rh.mTextureOrigin;
119  mZRange = rh.mZRange;
120  mSize = rh.mSize;
121  mDevicePixelRatio = rh.mDevicePixelRatio;
122  mImageFormat = rh.mImageFormat;
123  setIsTemporal( rh.isTemporal() );
124  if ( isTemporal() )
126 #ifdef QGISDEBUG
127  mHasTransformContext = rh.mHasTransformContext;
128 #endif
129 
130  return *this;
131 }
132 
134 {
135  QgsRenderContext context;
136  context.setPainter( painter );
137  if ( painter && painter->device() )
138  {
139  context.setScaleFactor( painter->device()->logicalDpiX() / 25.4 );
140  }
141  else
142  {
143  context.setScaleFactor( 3.465 ); //assume 88 dpi as standard value
144  }
145 
146  if ( painter && painter->renderHints() & QPainter::Antialiasing )
148 
149 #if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
150  if ( painter && painter->renderHints() & QPainter::LosslessImageRendering )
152 #endif
153 
154  return context;
155 }
156 
157 void QgsRenderContext::setPainterFlagsUsingContext( QPainter *painter ) const
158 {
159  if ( !painter )
160  painter = mPainter;
161 
162  if ( !painter )
163  return;
164 
165  painter->setRenderHint( QPainter::Antialiasing, mFlags & Qgis::RenderContextFlag::Antialiasing );
166 #if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
167  painter->setRenderHint( QPainter::LosslessImageRendering, mFlags & Qgis::RenderContextFlag::LosslessImageRendering );
168 #endif
169 }
170 
172 {
173 #ifdef QGISDEBUG
174  if ( !mHasTransformContext )
175  QgsDebugMsgLevel( QStringLiteral( "No QgsCoordinateTransformContext context set for transform" ), 4 );
176 #endif
177  return mTransformContext;
178 }
179 
181 {
182  mTransformContext = context;
183 #ifdef QGISDEBUG
184  mHasTransformContext = true;
185 #endif
186 }
187 
189 {
190  mFeedback = feedback;
191 }
192 
194 {
195  return mFeedback;
196 }
197 
198 void QgsRenderContext::setFlags( Qgis::RenderContextFlags flags )
199 {
200  mFlags = flags;
201 }
202 
204 {
205  if ( on )
206  mFlags |= flag;
207  else
208  mFlags &= ~( static_cast< int >( flag ) );
209 }
210 
211 Qgis::RenderContextFlags QgsRenderContext::flags() const
212 {
213  return mFlags;
214 }
215 
217 {
218  return mFlags.testFlag( flag );
219 }
220 
222 {
223  QgsRenderContext ctx;
224  QgsRectangle extent = mapSettings.visibleExtent();
225  extent.grow( mapSettings.extentBuffer() );
226  ctx.setMapToPixel( mapSettings.mapToPixel() );
227  ctx.setExtent( extent );
228  ctx.setMapExtent( mapSettings.visibleExtent() );
234  ctx.setSelectionColor( mapSettings.selectionColor() );
244  ctx.setScaleFactor( mapSettings.outputDpi() / 25.4 ); // = pixels per mm
245  ctx.setDpiTarget( mapSettings.dpiTarget() >= 0.0 ? mapSettings.dpiTarget() : -1.0 );
246  ctx.setRendererScale( mapSettings.scale() );
247  ctx.setExpressionContext( mapSettings.expressionContext() );
248  ctx.setSegmentationTolerance( mapSettings.segmentationTolerance() );
250  ctx.mDistanceArea.setSourceCrs( mapSettings.destinationCrs(), mapSettings.transformContext() );
251  ctx.mDistanceArea.setEllipsoid( mapSettings.ellipsoid() );
252  ctx.setTransformContext( mapSettings.transformContext() );
253  ctx.setPathResolver( mapSettings.pathResolver() );
254  ctx.setTextRenderFormat( mapSettings.textRenderFormat() );
255  ctx.setVectorSimplifyMethod( mapSettings.simplifyMethod() );
256  ctx.mRenderedFeatureHandlers = mapSettings.renderedFeatureHandlers();
257  ctx.mHasRenderedFeatureHandlers = !mapSettings.renderedFeatureHandlers().isEmpty();
258  //this flag is only for stopping during the current rendering progress,
259  //so must be false at every new render operation
260  ctx.setRenderingStopped( false );
261  ctx.mCustomRenderingFlags = mapSettings.customRenderingFlags();
262  ctx.setIsTemporal( mapSettings.isTemporal() );
263  if ( ctx.isTemporal() )
264  ctx.setTemporalRange( mapSettings.temporalRange() );
265 
266  ctx.setZRange( mapSettings.zRange() );
267  ctx.setOutputSize( mapSettings.outputSize() );
268  ctx.setDevicePixelRatio( mapSettings.devicePixelRatio() );
269  ctx.setImageFormat( mapSettings.outputImageFormat() );
270 
271  ctx.mClippingRegions = mapSettings.clippingRegions();
272 
273  return ctx;
274 }
275 
277 {
278  return mFlags.testFlag( Qgis::RenderContextFlag::ForceVectorOutput );
279 }
280 
282 {
283  return mFlags.testFlag( Qgis::RenderContextFlag::UseAdvancedEffects );
284 }
285 
287 {
289 }
290 
292 {
293  return mFlags.testFlag( Qgis::RenderContextFlag::DrawEditingInfo );
294 }
295 
297 {
298  return mFlags.testFlag( Qgis::RenderContextFlag::DrawSelection );
299 }
300 
302 {
303  mCoordTransform = t;
304 }
305 
307 {
309 }
310 
312 {
314 }
315 
316 void QgsRenderContext::setShowSelection( const bool showSelection )
317 {
319 }
320 
322 {
323  return mFlags.testFlag( Qgis::RenderContextFlag::UseRenderingOptimization );
324 }
325 
327 {
329 }
330 
332 {
333  if ( ffp )
334  {
335  mFeatureFilterProvider.reset( ffp->clone() );
336  }
337  else
338  {
339  mFeatureFilterProvider.reset( nullptr );
340  }
341 }
342 
344 {
345  return mFeatureFilterProvider.get();
346 }
347 
349 {
350  double conversionFactor = 1.0;
351  bool isMapUnitHack = false;
352  switch ( unit )
353  {
355  conversionFactor = mScaleFactor;
356  break;
357 
359  conversionFactor = mScaleFactor / POINTS_TO_MM;
360  break;
361 
363  conversionFactor = mScaleFactor * INCH_TO_MM;
364  break;
365 
367  {
368  if ( mMapToPixel.isValid() )
369  size = convertMetersToMapUnits( size );
371  // Fall through to RenderMapUnits with size in meters converted to size in MapUnits
373  }
375  {
376  if ( mMapToPixel.isValid() )
377  {
378  const double mup = scale.computeMapUnitsPerPixel( *this );
379  if ( mup > 0 )
380  {
381  conversionFactor = 1.0 / mup;
382  }
383  else
384  {
385  conversionFactor = 1.0;
386  }
387  }
388  else
389  {
390  // invalid map to pixel. A size in map units can't be calculated, so treat the size as points
391  // and clamp it to a reasonable range. It's the best we can do in this situation!
392  isMapUnitHack = true;
393  conversionFactor = mScaleFactor / POINTS_TO_MM;
394  }
395  break;
396  }
398  conversionFactor = 1.0;
399  break;
400 
403  //no sensible value
404  conversionFactor = 1.0;
405  break;
406  }
407 
408  double convertedSize = size * conversionFactor;
409 
410  if ( unit == QgsUnitTypes::RenderMapUnits )
411  {
412  //check max/min size
413  if ( scale.minSizeMMEnabled )
414  convertedSize = std::max( convertedSize, scale.minSizeMM * mScaleFactor );
415  if ( scale.maxSizeMMEnabled )
416  convertedSize = std::min( convertedSize, scale.maxSizeMM * mScaleFactor );
417  }
418 
419  if ( isMapUnitHack )
420  {
421  // since we are arbitrarily treating map units as mm, we need to clamp to an (arbitrary!) reasonable range.
422  convertedSize = std::clamp( convertedSize, 10.0, 100.0 );
423  }
424  else
425  {
426  const double symbologyReferenceScaleFactor = mSymbologyReferenceScale > 0 ? mSymbologyReferenceScale / mRendererScale : 1;
427  convertedSize *= symbologyReferenceScaleFactor;
428  }
429 
431  {
432  // apply property based constraints in order to optimise symbol preview rendering
433  switch ( property )
434  {
436  break;
437 
439  // excessively large shadow offset in symbol preview icons is undesirable -- it pushes the shadow outside of view
440  convertedSize = std::min( convertedSize, 100.0 );
441  break;
443  // excessively large blur in symbol preview icons is too slow to calculate
444  convertedSize = std::min<double>( convertedSize, 30 );
445  break;
447  // excessively large glow spread in symbol preview icons is too slow to calculate
448  convertedSize = std::min<double>( convertedSize, 50 );
449  break;
450  }
451  }
452 
453  return convertedSize;
454 }
455 
456 double QgsRenderContext::convertToMapUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale ) const
457 {
458  const double mup = mMapToPixel.mapUnitsPerPixel();
459 
460  const double symbologyReferenceScaleFactor = mSymbologyReferenceScale > 0 ? mSymbologyReferenceScale / mRendererScale : 1;
461 
462  switch ( unit )
463  {
465  {
466  size = convertMetersToMapUnits( size );
467  // Fall through to RenderMapUnits with values of meters converted to MapUnits
469  }
471  {
472  // check scale
473  double minSizeMU = std::numeric_limits<double>::lowest();
474  if ( scale.minSizeMMEnabled )
475  {
476  minSizeMU = scale.minSizeMM * mScaleFactor * mup;
477  }
478  if ( !qgsDoubleNear( scale.minScale, 0.0 ) )
479  {
480  minSizeMU = std::max( minSizeMU, size * ( mRendererScale / scale.minScale ) );
481  }
482  size = std::max( size, minSizeMU );
483 
484  double maxSizeMU = std::numeric_limits<double>::max();
485  if ( scale.maxSizeMMEnabled )
486  {
487  maxSizeMU = scale.maxSizeMM * mScaleFactor * mup;
488  }
489  if ( !qgsDoubleNear( scale.maxScale, 0.0 ) )
490  {
491  maxSizeMU = std::min( maxSizeMU, size * ( mRendererScale / scale.maxScale ) );
492  }
493  size = std::min( size, maxSizeMU );
494 
495  return size;
496  }
498  {
499  return size * mScaleFactor * mup / symbologyReferenceScaleFactor;
500  }
502  {
503  return size * mScaleFactor * mup / POINTS_TO_MM / symbologyReferenceScaleFactor;
504  }
506  {
507  return size * mScaleFactor * mup * INCH_TO_MM / symbologyReferenceScaleFactor;
508  }
510  {
511  return size * mup / symbologyReferenceScaleFactor;
512  }
513 
516  //no sensible value
517  return 0.0;
518  }
519  return 0.0;
520 }
521 
522 double QgsRenderContext::convertFromMapUnits( double sizeInMapUnits, QgsUnitTypes::RenderUnit outputUnit ) const
523 {
524  const double mup = mMapToPixel.mapUnitsPerPixel();
525  const double symbologyReferenceScaleFactor = mSymbologyReferenceScale > 0 ? mSymbologyReferenceScale / mRendererScale : 1;
526 
527  switch ( outputUnit )
528  {
530  {
531  return sizeInMapUnits / convertMetersToMapUnits( 1.0 );
532  }
534  {
535  return sizeInMapUnits;
536  }
538  {
539  return sizeInMapUnits / ( mScaleFactor * mup ) * symbologyReferenceScaleFactor;
540  }
542  {
543  return sizeInMapUnits / ( mScaleFactor * mup / POINTS_TO_MM ) * symbologyReferenceScaleFactor;
544  }
546  {
547  return sizeInMapUnits / ( mScaleFactor * mup * INCH_TO_MM ) * symbologyReferenceScaleFactor;
548  }
550  {
551  return sizeInMapUnits / mup * symbologyReferenceScaleFactor;
552  }
553 
556  //no sensible value
557  return 0.0;
558  }
559  return 0.0;
560 }
561 
562 double QgsRenderContext::convertMetersToMapUnits( double meters ) const
563 {
564  switch ( mDistanceArea.sourceCrs().mapUnits() )
565  {
567  return meters;
569  {
570  if ( mExtent.isNull() )
571  {
572  // we don't have an extent to calculate exactly -- so just use a very rough approximation
574  }
575 
576  QgsPointXY pointCenter = mExtent.center();
577  // The Extent is in the sourceCrs(), when different from destinationCrs()
578  // - the point must be transformed, since DistanceArea uses the destinationCrs()
579  // Note: the default QgsCoordinateTransform() : authid() will return an empty String
580  if ( !mCoordTransform.isShortCircuited() )
581  {
582  pointCenter = mCoordTransform.transform( pointCenter );
583  }
584 
585  const int multiplier = meters < 0 ? -1 : 1;
586  return multiplier * mDistanceArea.measureLineProjected( pointCenter, std::fabs( meters ) );
587  }
596  return ( meters * QgsUnitTypes::fromUnitToUnitFactor( QgsUnitTypes::DistanceMeters, mDistanceArea.sourceCrs().mapUnits() ) );
597  }
598  return meters;
599 }
600 
601 QList<QgsRenderedFeatureHandlerInterface *> QgsRenderContext::renderedFeatureHandlers() const
602 {
603  return mRenderedFeatureHandlers;
604 }
605 
606 QList<QgsMapClippingRegion> QgsRenderContext::clippingRegions() const
607 {
608  return mClippingRegions;
609 }
610 
612 {
613  return mFeatureClipGeometry;
614 }
615 
617 {
618  mFeatureClipGeometry = geometry;
619 }
620 
622 {
623  return mTextureOrigin;
624 }
625 
626 void QgsRenderContext::setTextureOrigin( const QPointF &origin )
627 {
628  mTextureOrigin = origin;
629 }
630 
632 {
633  return mZRange;
634 }
635 
637 {
638  mZRange = range;
639 }
640 
642 {
643  return mSize;
644 }
645 
647 {
648  mSize = size;
649 }
650 
652 {
653  return mDevicePixelRatio;
654 }
655 
657 {
658  mDevicePixelRatio = ratio;
659 }
660 
662 {
663  return outputSize() * mDevicePixelRatio;
664 }
665 
666 
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:63
RenderSubcomponentProperty
Rendering subcomponent properties.
Definition: qgis.h:977
@ Generic
Generic subcomponent property.
RenderContextFlag
Flags which affect rendering operations.
Definition: qgis.h:934
@ DrawEditingInfo
Enable drawing of vertex markers for layers in editing mode.
@ RenderSymbolPreview
The render is for a symbol preview only and map based properties may not be available,...
@ DrawSymbolBounds
Draw bounds of symbols (for debugging/testing)
@ RenderPreviewJob
Render is a 'canvas preview' render, and shortcuts should be taken to ensure fast rendering.
@ RenderMapTile
Draw map such that there are no problems between adjacent tiles.
@ UseRenderingOptimization
Enable vector simplification and other rendering optimizations.
@ ForceVectorOutput
Vector graphics should not be cached and drawn as raster images.
@ RenderPartialOutput
Whether to make extra effort to update map image with partially rendered layers (better for interacti...
@ LosslessImageRendering
Render images losslessly whenever possible, instead of the default lossy jpeg rendering used for some...
@ DrawSelection
Whether vector selections should be shown in the rendered map.
@ Antialiasing
Use antialiasing while drawing.
@ Render3DMap
Render is for a 3D map.
@ UseAdvancedEffects
Enable layer opacity and blending effects.
@ RenderBlocking
Render and load remote sources in the same thread to ensure rendering remote sources (svg and images)...
@ DrawEditingInfo
Enable drawing of vertex markers for layers in editing mode.
@ DrawSymbolBounds
Draw bounds of symbols (for debugging/testing)
@ RenderPreviewJob
Render is a 'canvas preview' render, and shortcuts should be taken to ensure fast rendering.
@ RenderMapTile
Draw map such that there are no problems between adjacent tiles.
@ UseRenderingOptimization
Enable vector simplification and other rendering optimizations.
@ ForceVectorOutput
Vector graphics should not be cached and drawn as raster images.
@ RenderPartialOutput
Whether to make extra effort to update map image with partially rendered layers (better for interacti...
@ LosslessImageRendering
Render images losslessly whenever possible, instead of the default lossy jpeg rendering used for some...
@ DrawSelection
Whether vector selections should be shown in the rendered map.
@ Antialiasing
Enable anti-aliasing for map rendering.
@ Render3DMap
Render is for a 3D map.
@ UseAdvancedEffects
Enable layer opacity and blending effects.
@ RenderBlocking
Render and load remote sources in the same thread to ensure rendering remote sources (svg and images)...
QString ellipsoidAcronym() const
Returns the ellipsoid acronym for the ellipsoid used by the CRS.
Q_GADGET QgsUnitTypes::DistanceUnit mapUnits
Contains information about the context in which a coordinate transform is executed.
Class for doing transforms between two map coordinate systems.
bool isShortCircuited() const
Returns true if the transform short circuits because the source and destination are equivalent.
QgsPointXY transform(const QgsPointXY &point, Qgis::TransformDirection direction=Qgis::TransformDirection::Forward) const SIP_THROW(QgsCsException)
Transform the point from the source CRS to the destination CRS.
QgsCoordinateReferenceSystem sourceCrs() const
Returns the source spatial reference system.
void setSourceCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets source spatial reference system crs.
double measureLineProjected(const QgsPointXY &p1, double distance=1, double azimuth=M_PI_2, QgsPointXY *projectedPoint=nullptr) const
Calculates the distance from one point with distance in meters and azimuth (direction) When the sourc...
bool setEllipsoid(const QString &ellipsoid)
Sets the ellipsoid by its acronym.
QgsRange which stores a range of double values.
Definition: qgsrange.h:203
Abstract interface for use by classes that filter the features or attributes of a layer.
virtual QgsFeatureFilterProvider * clone() const =0
Create a clone of the feature filter provider.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition: qgsfeedback.h:45
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:125
The QgsMapSettings class contains configuration for rendering of the map.
double scale() const
Returns the calculated map scale.
double segmentationTolerance() const
Gets the segmentation tolerance applied when rendering curved geometries.
QgsDoubleRange zRange() const
Returns the range of z-values which will be visible in the map.
QList< QgsRenderedFeatureHandlerInterface * > renderedFeatureHandlers() const
Returns the list of rendered feature handlers to use while rendering the map settings.
double dpiTarget() const
Returns the target DPI (dots per inch) to be taken into consideration when rendering.
const QgsExpressionContext & expressionContext() const
Gets the expression context.
const QgsPathResolver & pathResolver() const
Returns the path resolver for conversion between relative and absolute paths during rendering operati...
float devicePixelRatio() const
Returns the device pixel ratio.
QSize outputSize() const
Returns the size of the resulting map image, in pixels.
QImage::Format outputImageFormat() const
format of internal QImage, default QImage::Format_ARGB32_Premultiplied
double extentBuffer() const
Returns the buffer in map units to use around the visible extent for rendering symbols whose correspo...
const QgsMapToPixel & mapToPixel() const
QColor selectionColor() const
Returns the color that is used for drawing of selected vector features.
QgsAbstractGeometry::SegmentationToleranceType segmentationToleranceType() const
Gets segmentation tolerance type (maximum angle or maximum difference between curve and approximation...
const QgsVectorSimplifyMethod & simplifyMethod() const
Returns the simplification settings to use when rendering vector layers.
QgsRectangle visibleExtent() const
Returns the actual extent derived from requested extent that takes output image size into account.
QVariantMap customRenderingFlags() const
Returns any custom rendering flags.
QString ellipsoid() const
Returns ellipsoid's acronym.
Qgis::TextRenderFormat textRenderFormat() const
Returns the text render format, which dictates how text is rendered (e.g.
double outputDpi() const
Returns the DPI (dots per inch) used for conversion between real world units (e.g.
bool testFlag(Qgis::MapSettingsFlag flag) const
Check whether a particular flag is enabled.
QList< QgsMapClippingRegion > clippingRegions() const
Returns the list of clipping regions to apply to the map.
QgsCoordinateReferenceSystem destinationCrs() const
Returns the destination coordinate reference system for the map render.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
bool isValid() const
Returns true if the object is valid (i.e.
Definition: qgsmaptopixel.h:83
double mapUnitsPerPixel() const
Returns the current map units per pixel.
Struct for storing maximum and minimum scales for measurements in map units.
double computeMapUnitsPerPixel(const QgsRenderContext &c) const
Computes a map units per pixel scaling factor, respecting the minimum and maximum scales set for the ...
bool minSizeMMEnabled
Whether the minimum size in mm should be respected.
double maxScale
The maximum scale, or 0.0 if unset.
double minScale
The minimum scale, or 0.0 if unset.
double maxSizeMM
The maximum size in millimeters, or 0.0 if unset.
bool maxSizeMMEnabled
Whether the maximum size in mm should be respected.
double minSizeMM
The minimum size in millimeters, or 0.0 if unset.
A class to represent a 2D point.
Definition: qgspointxy.h:59
A rectangle specified with double values.
Definition: qgsrectangle.h:42
bool isNull() const
Test if the rectangle is null (all coordinates zero or after call to setMinimal()).
Definition: qgsrectangle.h:479
void grow(double delta)
Grows the rectangle in place by the specified amount.
Definition: qgsrectangle.h:296
QgsPointXY center() const SIP_HOLDGIL
Returns the center point of the rectangle.
Definition: qgsrectangle.h:251
Contains information about the context of a rendering operation.
void setForceVectorOutput(bool force)
Sets whether rendering operations should use vector operations instead of any faster raster shortcuts...
void setMapExtent(const QgsRectangle &extent)
Sets the original extent of the map being rendered.
void setTextureOrigin(const QPointF &origin)
Sets the texture origin, which should be used as a brush transform when rendering using QBrush object...
void setRenderingStopped(bool stopped)
Sets whether the rendering operation has been stopped and any ongoing rendering should be canceled im...
void setCoordinateTransform(const QgsCoordinateTransform &t)
Sets the current coordinate transform for the context.
void setShowSelection(bool showSelection)
Sets whether vector selections should be shown in the rendered map.
void setDrawEditingInformation(bool b)
Sets whether edit markers should be drawn during the render operation.
bool useAdvancedEffects() const
Returns true if advanced effects such as blend modes such be used.
void setScaleFactor(double factor)
Sets the scaling factor for the render to convert painter units to physical sizes.
void setImageFormat(QImage::Format format)
Sets QImage format which should be used for QImages created during rendering.
void setSegmentationToleranceType(QgsAbstractGeometry::SegmentationToleranceType type)
Sets segmentation tolerance type (maximum angle or maximum difference between curve and approximation...
void setDevicePixelRatio(float ratio)
Sets the device pixel ratio.
const QgsAbstractGeometry * geometry() const
Returns pointer to the unsegmentized geometry.
double convertFromMapUnits(double sizeInMapUnits, QgsUnitTypes::RenderUnit outputUnit) const
Converts a size from map units to the specified units.
void setUseAdvancedEffects(bool enabled)
Used to enable or disable advanced effects such as blend modes.
QPainter * painter()
Returns the destination QPainter for the render operation.
void setPainterFlagsUsingContext(QPainter *painter=nullptr) const
Sets relevant flags on a destination painter, using the flags and settings currently defined for the ...
double convertToPainterUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale(), Qgis::RenderSubcomponentProperty property=Qgis::RenderSubcomponentProperty::Generic) const
Converts a size from the specified units to painter units (pixels).
void setTextRenderFormat(Qgis::TextRenderFormat format)
Sets the text render format, which dictates how text is rendered (e.g.
void setVectorSimplifyMethod(const QgsVectorSimplifyMethod &simplifyMethod)
Sets the simplification setting to use when rendering vector layers.
QgsCoordinateTransformContext transformContext() const
Returns the context's coordinate transform context, which stores various information regarding which ...
QSize outputSize() const
Returns the size of the resulting rendered image, in pixels.
QgsGeometry featureClipGeometry() const
Returns the geometry to use to clip features at render time.
bool testFlag(Qgis::RenderContextFlag flag) const
Check whether a particular flag is enabled.
bool forceVectorOutput() const
Returns true if rendering operations should use vector operations instead of any faster raster shortc...
void setDpiTarget(double dpi)
Sets the targeted dpi for rendering.
~QgsRenderContext() override
void setPathResolver(const QgsPathResolver &resolver)
Sets the path resolver for conversion between relative and absolute paths during rendering operations...
float devicePixelRatio() const
Returns the device pixel ratio.
void setFeedback(QgsFeedback *feedback)
Attach a feedback object that can be queried regularly during rendering to check if rendering should ...
void setFeatureClipGeometry(const QgsGeometry &geometry)
Sets a geometry to use to clip features at render time.
const QgsFeatureFilterProvider * featureFilterProvider() const
Gets the filter feature provider used for additional filtering of rendered features.
QList< QgsRenderedFeatureHandlerInterface * > renderedFeatureHandlers() const
Returns the list of rendered feature handlers to use while rendering map layers.
void setFlag(Qgis::RenderContextFlag flag, bool on=true)
Enable or disable a particular flag (other flags are not affected)
bool showSelection() const
Returns true if vector selections should be shown in the rendered map.
QList< QgsMapClippingRegion > clippingRegions() const
Returns the list of clipping regions to apply during the render.
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the context's coordinate transform context, which stores various information regarding which dat...
void setFlags(Qgis::RenderContextFlags flags)
Set combination of flags that will be used for rendering.
void setExtent(const QgsRectangle &extent)
When rendering a map layer, calling this method sets the "clipping" extent for the layer (in the laye...
void setMapToPixel(const QgsMapToPixel &mtp)
Sets the context's map to pixel transform, which transforms between map coordinates and device coordi...
void setOutputSize(QSize size)
Sets the size of the resulting rendered image, in pixels.
QgsFeedback * feedback() const
Returns the feedback object that can be queried regularly during rendering to check if rendering shou...
QPointF textureOrigin() const
Returns the texture origin, which should be used as a brush transform when rendering using QBrush obj...
double convertToMapUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale()) const
Converts a size from the specified units to map units.
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
QgsDoubleRange zRange() const
Returns the range of z-values which should be rendered.
QSize deviceOutputSize() const
Returns the device output size of the render.
static QgsRenderContext fromMapSettings(const QgsMapSettings &mapSettings)
create initialized QgsRenderContext instance from given QgsMapSettings
bool drawEditingInformation() const
Returns true if edit markers should be drawn during the render operation.
static QgsRenderContext fromQPainter(QPainter *painter)
Creates a default render context given a pixel based QPainter destination.
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
void setUseRenderingOptimization(bool enabled)
Sets whether the rendering optimization (geometry simplification) should be executed.
void setRendererScale(double scale)
Sets the renderer map scale.
void setZRange(const QgsDoubleRange &range)
Sets the range of z-values which should be rendered.
double convertMetersToMapUnits(double meters) const
Convert meter distances to active MapUnit values for QgsUnitTypes::RenderMetersInMapUnits.
Qgis::RenderContextFlags flags() const
Returns combination of flags used for rendering.
const QgsRectangle & extent() const
When rendering a map layer, calling this method returns the "clipping" extent for the layer (in the l...
QgsRenderContext & operator=(const QgsRenderContext &rh)
bool useRenderingOptimization() const
Returns true if the rendering optimization (geometry simplification) can be executed.
void setSelectionColor(const QColor &color)
Sets the color to use when rendering selected features.
void setSegmentationTolerance(double tolerance)
Sets the segmentation tolerance applied when rendering curved geometries.
void setFeatureFilterProvider(const QgsFeatureFilterProvider *ffp)
Set a filter feature provider used for additional filtering of rendered features.
Base class for objects with an associated (optional) temporal range.
const QgsDateTimeRange & temporalRange() const
Returns the datetime range for the object.
bool isTemporal() const
Returns true if the object's temporal range is enabled, and the object will be filtered when renderin...
void setIsTemporal(bool enabled)
Sets whether the temporal range is enabled (i.e.
void setTemporalRange(const QgsDateTimeRange &range)
Sets the temporal range for the object.
@ DistanceMeters
Meters.
Definition: qgsunittypes.h:69
@ DistanceDegrees
Degrees, for planar geographic CRS distance measurements.
Definition: qgsunittypes.h:75
@ DistanceKilometers
Kilometers.
Definition: qgsunittypes.h:70
@ DistanceMiles
Terrestrial miles.
Definition: qgsunittypes.h:74
@ DistanceUnknownUnit
Unknown distance unit.
Definition: qgsunittypes.h:78
@ DistanceMillimeters
Millimeters.
Definition: qgsunittypes.h:77
@ DistanceYards
Imperial yards.
Definition: qgsunittypes.h:73
@ DistanceFeet
Imperial feet.
Definition: qgsunittypes.h:71
@ DistanceNauticalMiles
Nautical miles.
Definition: qgsunittypes.h:72
@ DistanceCentimeters
Centimeters.
Definition: qgsunittypes.h:76
static Q_INVOKABLE double fromUnitToUnitFactor(QgsUnitTypes::DistanceUnit fromUnit, QgsUnitTypes::DistanceUnit toUnit)
Returns the conversion factor between the specified distance units.
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:168
@ RenderUnknownUnit
Mixed or unknown units.
Definition: qgsunittypes.h:175
@ RenderMetersInMapUnits
Meters value as Map units.
Definition: qgsunittypes.h:176
@ RenderPercentage
Percentage of another measurement (e.g., canvas size, feature size)
Definition: qgsunittypes.h:172
@ RenderPoints
Points (e.g., for font sizes)
Definition: qgsunittypes.h:173
@ RenderPixels
Pixels.
Definition: qgsunittypes.h:171
@ RenderInches
Inches.
Definition: qgsunittypes.h:174
@ RenderMillimeters
Millimeters.
Definition: qgsunittypes.h:169
@ RenderMapUnits
Map units.
Definition: qgsunittypes.h:170
void setSimplifyHints(SimplifyHints simplifyHints)
Sets the simplification hints of the vector layer managed.
@ NoSimplification
No simplification can be applied.
#define FALLTHROUGH
Definition: qgis.h:1769
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition: qgis.h:1246
#define QgsDebugMsgLevel(str, level)
Definition: qgslogger.h:39
#define INCH_TO_MM
#define POINTS_TO_MM