QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
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( DrawEditingInfo | UseAdvancedEffects | DrawSelection | 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  : mFlags( rh.mFlags )
42  , mPainter( rh.mPainter )
43  , mMaskPainter( rh.mMaskPainter )
44  , mCoordTransform( rh.mCoordTransform )
45  , mDistanceArea( rh.mDistanceArea )
46  , mExtent( rh.mExtent )
47  , mOriginalMapExtent( rh.mOriginalMapExtent )
48  , mMapToPixel( rh.mMapToPixel )
49  , mRenderingStopped( rh.mRenderingStopped )
50  , mScaleFactor( rh.mScaleFactor )
51  , mRendererScale( rh.mRendererScale )
52  , mLabelingEngine( rh.mLabelingEngine )
53  , mSelectionColor( rh.mSelectionColor )
54  , mVectorSimplifyMethod( rh.mVectorSimplifyMethod )
55  , mExpressionContext( rh.mExpressionContext )
56  , mGeometry( rh.mGeometry )
57  , mFeatureFilterProvider( rh.mFeatureFilterProvider ? rh.mFeatureFilterProvider->clone() : nullptr )
58  , mSegmentationTolerance( rh.mSegmentationTolerance )
59  , mSegmentationToleranceType( rh.mSegmentationToleranceType )
60  , mTransformContext( rh.mTransformContext )
61  , mPathResolver( rh.mPathResolver )
62  , mTextRenderFormat( rh.mTextRenderFormat )
63  , mRenderedFeatureHandlers( rh.mRenderedFeatureHandlers )
64  , mHasRenderedFeatureHandlers( rh.mHasRenderedFeatureHandlers )
65  , mCustomRenderingFlags( rh.mCustomRenderingFlags )
66 #ifdef QGISDEBUG
67  , mHasTransformContext( rh.mHasTransformContext )
68 #endif
69 {
70 }
71 
73 {
74  mFlags = rh.mFlags;
75  mPainter = rh.mPainter;
76  mMaskPainter = rh.mMaskPainter;
77  mCoordTransform = rh.mCoordTransform;
78  mExtent = rh.mExtent;
79  mOriginalMapExtent = rh.mOriginalMapExtent;
80  mMapToPixel = rh.mMapToPixel;
81  mRenderingStopped = rh.mRenderingStopped;
82  mScaleFactor = rh.mScaleFactor;
83  mRendererScale = rh.mRendererScale;
84  mLabelingEngine = rh.mLabelingEngine;
85  mSelectionColor = rh.mSelectionColor;
86  mVectorSimplifyMethod = rh.mVectorSimplifyMethod;
87  mExpressionContext = rh.mExpressionContext;
88  mGeometry = rh.mGeometry;
89  mFeatureFilterProvider.reset( rh.mFeatureFilterProvider ? rh.mFeatureFilterProvider->clone() : nullptr );
90  mSegmentationTolerance = rh.mSegmentationTolerance;
91  mSegmentationToleranceType = rh.mSegmentationToleranceType;
92  mDistanceArea = rh.mDistanceArea;
93  mTransformContext = rh.mTransformContext;
94  mPathResolver = rh.mPathResolver;
95  mTextRenderFormat = rh.mTextRenderFormat;
96  mRenderedFeatureHandlers = rh.mRenderedFeatureHandlers;
97  mHasRenderedFeatureHandlers = rh.mHasRenderedFeatureHandlers;
98  mCustomRenderingFlags = rh.mCustomRenderingFlags;
99 #ifdef QGISDEBUG
100  mHasTransformContext = rh.mHasTransformContext;
101 #endif
102 
103  return *this;
104 }
105 
107 {
108  QgsRenderContext context;
109  context.setPainter( painter );
110  if ( painter && painter->device() )
111  {
112  context.setScaleFactor( painter->device()->logicalDpiX() / 25.4 );
113  }
114  else
115  {
116  context.setScaleFactor( 3.465 ); //assume 88 dpi as standard value
117  }
118  if ( painter && painter->renderHints() & QPainter::Antialiasing )
119  {
120  context.setFlag( QgsRenderContext::Antialiasing, true );
121  }
122  return context;
123 }
124 
126 {
127 #ifdef QGISDEBUG
128  if ( !mHasTransformContext )
129  QgsDebugMsgLevel( QStringLiteral( "No QgsCoordinateTransformContext context set for transform" ), 4 );
130 #endif
131  return mTransformContext;
132 }
133 
135 {
136  mTransformContext = context;
137 #ifdef QGISDEBUG
138  mHasTransformContext = true;
139 #endif
140 }
141 
142 void QgsRenderContext::setFlags( QgsRenderContext::Flags flags )
143 {
144  mFlags = flags;
145 }
146 
148 {
149  if ( on )
150  mFlags |= flag;
151  else
152  mFlags &= ~flag;
153 }
154 
155 QgsRenderContext::Flags QgsRenderContext::flags() const
156 {
157  return mFlags;
158 }
159 
161 {
162  return mFlags.testFlag( flag );
163 }
164 
166 {
167  QgsRenderContext ctx;
168  QgsRectangle extent = mapSettings.visibleExtent();
169  extent.grow( mapSettings.extentBuffer() );
170  ctx.setMapToPixel( mapSettings.mapToPixel() );
171  ctx.setExtent( extent );
172  ctx.setMapExtent( mapSettings.visibleExtent() );
178  ctx.setSelectionColor( mapSettings.selectionColor() );
186  ctx.setScaleFactor( mapSettings.outputDpi() / 25.4 ); // = pixels per mm
187  ctx.setRendererScale( mapSettings.scale() );
188  ctx.setExpressionContext( mapSettings.expressionContext() );
189  ctx.setSegmentationTolerance( mapSettings.segmentationTolerance() );
191  ctx.mDistanceArea.setSourceCrs( mapSettings.destinationCrs(), mapSettings.transformContext() );
192  ctx.mDistanceArea.setEllipsoid( mapSettings.ellipsoid() );
193  ctx.setTransformContext( mapSettings.transformContext() );
194  ctx.setPathResolver( mapSettings.pathResolver() );
195  ctx.setTextRenderFormat( mapSettings.textRenderFormat() );
196  ctx.setVectorSimplifyMethod( mapSettings.simplifyMethod() );
197  ctx.mRenderedFeatureHandlers = mapSettings.renderedFeatureHandlers();
198  ctx.mHasRenderedFeatureHandlers = !mapSettings.renderedFeatureHandlers().isEmpty();
199  //this flag is only for stopping during the current rendering progress,
200  //so must be false at every new render operation
201  ctx.setRenderingStopped( false );
202  ctx.mCustomRenderingFlags = mapSettings.customRenderingFlags();
203 
204  return ctx;
205 }
206 
208 {
209  return mFlags.testFlag( ForceVectorOutput );
210 }
211 
213 {
214  return mFlags.testFlag( UseAdvancedEffects );
215 }
216 
218 {
219  setFlag( UseAdvancedEffects, enabled );
220 }
221 
223 {
224  return mFlags.testFlag( DrawEditingInfo );
225 }
226 
228 {
229  return mFlags.testFlag( DrawSelection );
230 }
231 
233 {
234  mCoordTransform = t;
235 }
236 
238 {
239  setFlag( DrawEditingInfo, b );
240 }
241 
243 {
244  setFlag( ForceVectorOutput, force );
245 }
246 
248 {
249  setFlag( DrawSelection, showSelection );
250 }
251 
253 {
254  return mFlags.testFlag( UseRenderingOptimization );
255 }
256 
258 {
259  setFlag( UseRenderingOptimization, enabled );
260 }
261 
263 {
264  if ( ffp )
265  {
266  mFeatureFilterProvider.reset( ffp->clone() );
267  }
268  else
269  {
270  mFeatureFilterProvider.reset( nullptr );
271  }
272 }
273 
275 {
276  return mFeatureFilterProvider.get();
277 }
278 
280 {
281  double conversionFactor = 1.0;
282  switch ( unit )
283  {
285  conversionFactor = mScaleFactor;
286  break;
287 
289  conversionFactor = mScaleFactor / POINTS_TO_MM;
290  break;
291 
293  conversionFactor = mScaleFactor * INCH_TO_MM;
294  break;
295 
297  {
298  size = convertMetersToMapUnits( size );
300  // Fall through to RenderMapUnits with size in meters converted to size in MapUnits
302  }
304  {
305  double mup = scale.computeMapUnitsPerPixel( *this );
306  if ( mup > 0 )
307  {
308  conversionFactor = 1.0 / mup;
309  }
310  else
311  {
312  conversionFactor = 1.0;
313  }
314  break;
315  }
317  conversionFactor = 1.0;
318  break;
319 
322  //no sensible value
323  conversionFactor = 1.0;
324  break;
325  }
326 
327  double convertedSize = size * conversionFactor;
328 
329  if ( unit == QgsUnitTypes::RenderMapUnits )
330  {
331  //check max/min size
332  if ( scale.minSizeMMEnabled )
333  convertedSize = std::max( convertedSize, scale.minSizeMM * mScaleFactor );
334  if ( scale.maxSizeMMEnabled )
335  convertedSize = std::min( convertedSize, scale.maxSizeMM * mScaleFactor );
336  }
337 
338  return convertedSize;
339 }
340 
341 double QgsRenderContext::convertToMapUnits( double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale ) const
342 {
343  double mup = mMapToPixel.mapUnitsPerPixel();
344 
345  switch ( unit )
346  {
348  {
349  size = convertMetersToMapUnits( size );
350  // Fall through to RenderMapUnits with values of meters converted to MapUnits
352  }
354  {
355  // check scale
356  double minSizeMU = std::numeric_limits<double>::lowest();
357  if ( scale.minSizeMMEnabled )
358  {
359  minSizeMU = scale.minSizeMM * mScaleFactor * mup;
360  }
361  if ( !qgsDoubleNear( scale.minScale, 0.0 ) )
362  {
363  minSizeMU = std::max( minSizeMU, size * ( mRendererScale / scale.minScale ) );
364  }
365  size = std::max( size, minSizeMU );
366 
367  double maxSizeMU = std::numeric_limits<double>::max();
368  if ( scale.maxSizeMMEnabled )
369  {
370  maxSizeMU = scale.maxSizeMM * mScaleFactor * mup;
371  }
372  if ( !qgsDoubleNear( scale.maxScale, 0.0 ) )
373  {
374  maxSizeMU = std::min( maxSizeMU, size * ( mRendererScale / scale.maxScale ) );
375  }
376  size = std::min( size, maxSizeMU );
377 
378  return size;
379  }
381  {
382  return size * mScaleFactor * mup;
383  }
385  {
386  return size * mScaleFactor * mup / POINTS_TO_MM;
387  }
389  {
390  return size * mScaleFactor * mup * INCH_TO_MM;
391  }
393  {
394  return size * mup;
395  }
396 
399  //no sensible value
400  return 0.0;
401  }
402  return 0.0;
403 }
404 
405 double QgsRenderContext::convertFromMapUnits( double sizeInMapUnits, QgsUnitTypes::RenderUnit outputUnit ) const
406 {
407  double mup = mMapToPixel.mapUnitsPerPixel();
408 
409  switch ( outputUnit )
410  {
412  {
413  return sizeInMapUnits / convertMetersToMapUnits( 1.0 );
414  }
416  {
417  return sizeInMapUnits;
418  }
420  {
421  return sizeInMapUnits / ( mScaleFactor * mup );
422  }
424  {
425  return sizeInMapUnits / ( mScaleFactor * mup / POINTS_TO_MM );
426  }
428  {
429  return sizeInMapUnits / ( mScaleFactor * mup * INCH_TO_MM );
430  }
432  {
433  return sizeInMapUnits / mup;
434  }
435 
438  //no sensible value
439  return 0.0;
440  }
441  return 0.0;
442 }
443 
444 double QgsRenderContext::convertMetersToMapUnits( double meters ) const
445 {
446  switch ( mDistanceArea.sourceCrs().mapUnits() )
447  {
449  return meters;
451  {
452  QgsPointXY pointCenter = mExtent.center();
453  // The Extent is in the sourceCrs(), when different from destinationCrs()
454  // - the point must be transformed, since DistanceArea uses the destinationCrs()
455  // Note: the default QgsCoordinateTransform() : authid() will return an empty String
456  if ( !mCoordTransform.isShortCircuited() )
457  {
458  pointCenter = mCoordTransform.transform( pointCenter );
459  }
460  return mDistanceArea.measureLineProjected( pointCenter, meters );
461  }
470  return ( meters * QgsUnitTypes::fromUnitToUnitFactor( QgsUnitTypes::DistanceMeters, mDistanceArea.sourceCrs().mapUnits() ) );
471  }
472  return meters;
473 }
474 
475 QList<QgsRenderedFeatureHandlerInterface *> QgsRenderContext::renderedFeatureHandlers() const
476 {
477  return mRenderedFeatureHandlers;
478 }
479 
480 
void setForceVectorOutput(bool force)
Sets whether rendering operations should use vector operations instead of any faster raster shortcuts...
Meters value as Map units.
Definition: qgsunittypes.h:154
double convertToMapUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale()) const
Converts a size from the specified units to map units.
Enable layer opacity and blending effects.
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 minSizeMM
The minimum size in millimeters, or 0.0 if unset.
Enable vector simplification and other rendering optimizations.
virtual QgsFeatureFilterProvider * clone() const =0
Create a clone of the feature filter provider.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
const QgsExpressionContext & expressionContext() const
Gets the expression context.
QgsCoordinateTransformContext transformContext() const
Returns the context&#39;s coordinate transform context, which stores various information regarding which ...
void setFlags(QgsRenderContext::Flags flags)
Set combination of flags that will be used for rendering.
Use antialiasing while drawing.
double convertFromMapUnits(double sizeInMapUnits, QgsUnitTypes::RenderUnit outputUnit) const
Converts a size from map units to the specified units.
void setCoordinateTransform(const QgsCoordinateTransform &t)
Sets the current coordinate transform for the context.
QgsPointXY transform(const QgsPointXY &point, TransformDirection direction=ForwardTransform) const SIP_THROW(QgsCsException)
Transform the point from the source CRS to the destination CRS.
A class to represent a 2D point.
Definition: qgspointxy.h:43
QList< QgsRenderedFeatureHandlerInterface * > renderedFeatureHandlers() const
Returns the list of rendered feature handlers to use while rendering map layers.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition: qgis.h:315
void setSimplifyHints(SimplifyHints simplifyHints)
Sets the simplification hints of the vector layer managed.
void setRendererScale(double scale)
Sets the renderer map scale.
Whether to make extra effort to update map image with partially rendered layers (better for interacti...
void setPathResolver(const QgsPathResolver &resolver)
Sets the path resolver for conversion between relative and absolute paths during rendering operations...
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the context&#39;s coordinate transform context, which stores various information regarding which dat...
double computeMapUnitsPerPixel(const QgsRenderContext &c) const
Computes a map units per pixel scaling factor, respecting the minimum and maximum scales set for the ...
void setVectorSimplifyMethod(const QgsVectorSimplifyMethod &simplifyMethod)
Sets the simplification setting to use when rendering vector layers.
Mixed or unknown units.
Definition: qgsunittypes.h:153
Flags flags() const
Returns combination of flags used for rendering.
bool setEllipsoid(const QString &ellipsoid)
Sets the ellipsoid by its acronym.
Percentage of another measurement (e.g., canvas size, feature size)
Definition: qgsunittypes.h:150
Enable layer opacity and blending effects.
void setTextRenderFormat(TextRenderFormat format)
Sets the text render format, which dictates how text is rendered (e.g.
Whether vector selections should be shown in the rendered map.
void setExtent(const QgsRectangle &extent)
When rendering a map layer, calling this method sets the "clipping" extent for the layer (in the laye...
QgsRectangle visibleExtent() const
Returns the actual extent derived from requested extent that takes takes output image size into accou...
double maxScale
The maximum scale, or 0.0 if unset.
const QgsFeatureFilterProvider * featureFilterProvider() const
Gets the filter feature provider used for additional filtering of rendered features.
void setMapExtent(const QgsRectangle &extent)
Sets the original extent of the map being rendered.
bool minSizeMMEnabled
Whether the minimum size in mm should be respected.
QgsCoordinateReferenceSystem destinationCrs() const
returns CRS of destination coordinate reference system
Vector graphics should not be cached and drawn as raster images.
The QgsMapSettings class contains configuration for rendering of the map.
double convertMetersToMapUnits(double meters) const
Convert meter distances to active MapUnit values for QgsUnitTypes::RenderMetersInMapUnits.
void setSelectionColor(const QColor &color)
Sets the color to use when rendering selected features.
No simplification can be applied.
QString ellipsoidAcronym() const
Returns the ellipsoid acronym for the ellipsoid used by the CRS.
void setUseAdvancedEffects(bool enabled)
Used to enable or disable advanced effects such as blend modes.
const QgsVectorSimplifyMethod & simplifyMethod() const
Returns the simplification settings to use when rendering vector layers.
void setScaleFactor(double factor)
Sets the scaling factor for the render to convert painter units to physical sizes.
#define FALLTHROUGH
Definition: qgis.h:763
QgsRenderContext & operator=(const QgsRenderContext &rh)
#define INCH_TO_MM
#define QgsDebugMsgLevel(str, level)
Definition: qgslogger.h:39
void grow(double delta)
Grows the rectangle in place by the specified amount.
Definition: qgsrectangle.h:275
const QgsRectangle & extent() const
When rendering a map layer, calling this method returns the "clipping" extent for the layer (in the l...
bool isShortCircuited() const
Returns true if the transform short circuits because the source and destination are equivalent...
Whether vector selections should be shown in the rendered map.
double scale() const
Returns the calculated map scale.
void setDrawEditingInformation(bool b)
Sets whether edit markers should be drawn during the render operation.
Enable anti-aliasing for map rendering.
static QgsRenderContext fromQPainter(QPainter *painter)
Creates a default render context given a pixel based QPainter destination.
QList< QgsRenderedFeatureHandlerInterface *> renderedFeatureHandlers() const
Returns the list of rendered feature handlers to use while rendering the map settings.
bool drawEditingInformation() const
Returns true if edit markers should be drawn during the render operation.
double extentBuffer() const
Returns the buffer in map units to use around the visible extent for rendering symbols whose correspo...
Draw bounds of symbols (for debugging/testing)
Degrees, for planar geographic CRS distance measurements.
Definition: qgsunittypes.h:74
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
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...
Contains information about the context in which a coordinate transform is executed.
double mapUnitsPerPixel() const
Returns current map units per pixel.
const QgsMapToPixel & mapToPixel() const
Draw bounds of symbols (for debugging/testing)
Vector graphics should not be cached and drawn as raster images.
QVariantMap customRenderingFlags() const
Gets custom rendering flags.
Enable drawing of vertex markers for layers in editing mode.
Render and load remote sources in the same thread to ensure rendering remote sources (svg and images)...
QgsAbstractGeometry::SegmentationToleranceType segmentationToleranceType() const
Gets segmentation tolerance type (maximum angle or maximum difference between curve and approximation...
const QgsPathResolver & pathResolver() const
Returns the path resolver for conversion between relative and absolute paths during rendering operati...
bool forceVectorOutput() const
Returns true if rendering operations should use vector operations instead of any faster raster shortc...
QgsCoordinateReferenceSystem sourceCrs() const
Returns the source spatial reference system.
void setSegmentationTolerance(double tolerance)
Sets the segmentation tolerance applied when rendering curved geometries.
bool useRenderingOptimization() const
Returns true if the rendering optimization (geometry simplification) can be executed.
Draw map such that there are no problems between adjacent tiles.
Unknown distance unit.
Definition: qgsunittypes.h:77
Render is a &#39;canvas preview&#39; render, and shortcuts should be taken to ensure fast rendering...
double outputDpi() const
Returns DPI used for conversion between real world units (e.g.
Render is a &#39;canvas preview&#39; render, and shortcuts should be taken to ensure fast rendering...
Contains information about the context of a rendering operation.
double convertToPainterUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale()) const
Converts a size from the specified units to painter units (pixels).
#define POINTS_TO_MM
QString ellipsoid() const
Returns ellipsoid&#39;s acronym.
double segmentationTolerance() const
Gets the segmentation tolerance applied when rendering curved geometries.
QPainter * painter()
Returns the destination QPainter for the render operation.
double maxSizeMM
The maximum size in millimeters, or 0.0 if unset.
Points (e.g., for font sizes)
Definition: qgsunittypes.h:151
void setShowSelection(bool showSelection)
Sets whether vector selections should be shown in the rendered map.
Struct for storing maximum and minimum scales for measurements in map units.
Whether to make extra effort to update map image with partially rendered layers (better for interacti...
static QgsRenderContext fromMapSettings(const QgsMapSettings &mapSettings)
create initialized QgsRenderContext instance from given QgsMapSettings
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 useAdvancedEffects() const
Returns true if advanced effects such as blend modes such be used.
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 setUseRenderingOptimization(bool enabled)
Sets whether the rendering optimization (geometry simplification) should be executed.
bool showSelection() const
Returns true if vector selections should be shown in the rendered map.
void setFlag(Flag flag, bool on=true)
Enable or disable a particular flag (other flags are not affected)
void setFeatureFilterProvider(const QgsFeatureFilterProvider *ffp)
Set a filter feature provider used for additional filtering of rendered features. ...
Enable vector simplification and other rendering optimizations.
void setSourceCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets source spatial reference system crs.
bool testFlag(Flag flag) const
Check whether a particular flag is enabled.
QgsRenderContext::TextRenderFormat textRenderFormat() const
Returns the text render format, which dictates how text is rendered (e.g.
QColor selectionColor() const
Gets color that is used for drawing of selected vector features.
QgsPointXY center() const
Returns the center point of the rectangle.
Definition: qgsrectangle.h:230
Render and load remote sources in the same thread to ensure rendering remote sources (svg and images)...
bool testFlag(Flag flag) const
Check whether a particular flag is enabled.
Terrestrial miles.
Definition: qgsunittypes.h:73
Draw map such that there are no problems between adjacent tiles.
Flag
Enumeration of flags that affect rendering operations.
static Q_INVOKABLE double fromUnitToUnitFactor(QgsUnitTypes::DistanceUnit fromUnit, QgsUnitTypes::DistanceUnit toUnit)
Returns the conversion factor between the specified distance units.
Enable drawing of vertex markers for layers in editing mode.
double minScale
The minimum scale, or 0.0 if unset.
bool maxSizeMMEnabled
Whether the maximum size in mm should be respected.
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:145
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.