QGIS API Documentation  3.10.0-A Coruña (6c816b4204)
qgsmapsettings.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmapsettings.h
3  --------------------------------------
4  Date : December 2013
5  Copyright : (C) 2013 by Martin Dobias
6  Email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #ifndef QGSMAPSETTINGS_H
17 #define QGSMAPSETTINGS_H
18 
19 #include "qgis_core.h"
20 #include "qgis_sip.h"
21 #include <QColor>
22 #include <QImage>
23 #include <QPointer>
24 #include <QSize>
25 #include <QStringList>
26 
29 #include "qgsmaptopixel.h"
30 #include "qgsrectangle.h"
31 #include "qgsscalecalculator.h"
32 #include "qgsexpressioncontext.h"
33 #include "qgsmaplayer.h"
34 #include "qgsgeometry.h"
35 
36 class QPainter;
37 
39 class QgsScaleCalculator;
40 class QgsMapRendererJob;
42 
51 class CORE_EXPORT QgsLabelBlockingRegion
52 {
53  public:
54 
58  explicit QgsLabelBlockingRegion( const QgsGeometry &geometry )
59  : geometry( geometry )
60  {}
61 
64 
65 };
66 
67 
85 class CORE_EXPORT QgsMapSettings
86 {
87  public:
89 
96  QgsRectangle extent() const;
97 
104  void setExtent( const QgsRectangle &rect, bool magnified = true );
105 
112  double extentBuffer() const;
113 
120  void setExtentBuffer( double buffer );
121 
123  QSize outputSize() const;
125  void setOutputSize( QSize size );
126 
132  float devicePixelRatio() const;
133 
139  void setDevicePixelRatio( float dpr );
140 
147  QSize deviceOutputSize() const;
148 
154  double rotation() const;
155 
161  void setRotation( double rotation );
162 
167  double outputDpi() const;
169  void setOutputDpi( double dpi );
170 
177  void setMagnificationFactor( double factor );
178 
184  double magnificationFactor() const;
185 
190  QStringList layerIds() const;
191 
196  QList<QgsMapLayer *> layers() const;
197 
204  void setLayers( const QList<QgsMapLayer *> &layers );
205 
210  QMap<QString, QString> layerStyleOverrides() const;
211 
216  void setLayerStyleOverrides( const QMap<QString, QString> &overrides );
217 
224  QString customRenderFlags() const { return mCustomRenderFlags; }
225 
232  void setCustomRenderFlags( const QString &customRenderFlags ) { mCustomRenderFlags = customRenderFlags; }
233 
235  void setDestinationCrs( const QgsCoordinateReferenceSystem &crs );
237  QgsCoordinateReferenceSystem destinationCrs() const;
238 
240  QgsUnitTypes::DistanceUnit mapUnits() const;
241 
250  bool setEllipsoid( const QString &ellipsoid );
251 
258  QString ellipsoid() const { return mEllipsoid; }
259 
261  void setBackgroundColor( const QColor &color ) { mBackgroundColor = color; }
263  QColor backgroundColor() const { return mBackgroundColor; }
264 
266  void setSelectionColor( const QColor &color ) { mSelectionColor = color; }
268  QColor selectionColor() const { return mSelectionColor; }
269 
271  enum Flag
272  {
273  Antialiasing = 0x01,
274  DrawEditingInfo = 0x02,
275  ForceVectorOutput = 0x04,
276  UseAdvancedEffects = 0x08,
277  DrawLabeling = 0x10,
278  UseRenderingOptimization = 0x20,
279  DrawSelection = 0x40,
280  DrawSymbolBounds = 0x80,
281  RenderMapTile = 0x100,
282  RenderPartialOutput = 0x200,
283  RenderPreviewJob = 0x400,
284  RenderBlocking = 0x800,
285  // TODO: ignore scale-based visibility (overview)
286  };
287  Q_DECLARE_FLAGS( Flags, Flag )
288 
289 
290  void setFlags( QgsMapSettings::Flags flags );
292  void setFlag( Flag flag, bool on = true );
294  Flags flags() const;
296  bool testFlag( Flag flag ) const;
297 
305  {
306  return mTextRenderFormat;
307  }
308 
319  {
320  mTextRenderFormat = format;
321  // ensure labeling engine setting is also kept in sync, just in case anyone accesses QgsMapSettings::labelingEngineSettings().defaultTextRenderFormat()
322  // instead of correctly calling QgsMapSettings::textRenderFormat(). It can't hurt to be consistent!
323  mLabelingEngineSettings.setDefaultTextRenderFormat( format );
324  }
325 
327  void setOutputImageFormat( QImage::Format format ) { mImageFormat = format; }
329  QImage::Format outputImageFormat() const { return mImageFormat; }
330 
332  bool hasValidSettings() const;
334  QgsRectangle visibleExtent() const;
335 
340  QPolygonF visiblePolygon() const;
342  double mapUnitsPerPixel() const;
343 
348  double scale() const;
349 
356  void setExpressionContext( const QgsExpressionContext &context ) { mExpressionContext = context; }
357 
364  const QgsExpressionContext &expressionContext() const { return mExpressionContext; }
365 
374  QgsCoordinateTransformContext transformContext() const;
375 
384  void setTransformContext( const QgsCoordinateTransformContext &context );
385 
393  const QgsPathResolver &pathResolver() const { return mPathResolver; }
394 
402  void setPathResolver( const QgsPathResolver &resolver ) { mPathResolver = resolver; }
403 
404  const QgsMapToPixel &mapToPixel() const { return mMapToPixel; }
405 
412  double layerToMapUnits( const QgsMapLayer *layer, const QgsRectangle &referenceExtent = QgsRectangle() ) const;
413 
419  QgsRectangle layerExtentToOutputExtent( const QgsMapLayer *layer, QgsRectangle extent ) const;
420 
426  QgsRectangle outputExtentToLayerExtent( const QgsMapLayer *layer, QgsRectangle extent ) const;
427 
432  QgsPointXY layerToMapCoordinates( const QgsMapLayer *layer, QgsPointXY point ) const;
433 
439  QgsRectangle layerToMapCoordinates( const QgsMapLayer *layer, QgsRectangle rect ) const;
440 
445  QgsPointXY mapToLayerCoordinates( const QgsMapLayer *layer, QgsPointXY point ) const;
446 
452  QgsRectangle mapToLayerCoordinates( const QgsMapLayer *layer, QgsRectangle rect ) const;
453 
458  QgsCoordinateTransform layerTransform( const QgsMapLayer *layer ) const;
459 
461  QgsRectangle fullExtent() const;
462 
463  /* serialization */
464 
465  void readXml( QDomNode &node );
466 
467  void writeXml( QDomNode &node, QDomDocument &doc );
468 
472  void setSegmentationTolerance( double tolerance ) { mSegmentationTolerance = tolerance; }
474  double segmentationTolerance() const { return mSegmentationTolerance; }
475 
479  void setSegmentationToleranceType( QgsAbstractGeometry::SegmentationToleranceType type ) { mSegmentationToleranceType = type; }
481  QgsAbstractGeometry::SegmentationToleranceType segmentationToleranceType() const { return mSegmentationToleranceType; }
482 
494  {
495  mLabelingEngineSettings = settings;
496  mTextRenderFormat = settings.defaultTextRenderFormat();
497  }
498 
506  const QgsLabelingEngineSettings &labelingEngineSettings() const { return mLabelingEngineSettings; }
507 
519  QgsGeometry labelBoundaryGeometry() const;
520 
534  void setLabelBoundaryGeometry( const QgsGeometry &boundary );
535 
542  void setLabelBlockingRegions( const QList< QgsLabelBlockingRegion > &regions ) { mLabelBlockingRegions = regions; }
543 
550  QList< QgsLabelBlockingRegion > labelBlockingRegions() const { return mLabelBlockingRegions; }
551 
568  void setSimplifyMethod( const QgsVectorSimplifyMethod &method ) { mSimplifyMethod = method; }
569 
581  const QgsVectorSimplifyMethod &simplifyMethod() const { return mSimplifyMethod; }
582 
592  void addRenderedFeatureHandler( QgsRenderedFeatureHandlerInterface *handler );
593 
599  QList< QgsRenderedFeatureHandlerInterface * > renderedFeatureHandlers() const;
600 
601  protected:
602 
603  double mDpi;
604 
605  QSize mSize;
606  float mDevicePixelRatio = 1.0;
607 
609  double mExtentBuffer = 0.0;
610 
611  double mRotation = 0.0;
612  double mMagnificationFactor = 1.0;
613 
616  QMap<QString, QString> mLayerStyleOverrides;
619 
622  QString mEllipsoid;
623 
626 
627  Flags mFlags;
628 
629  QImage::Format mImageFormat = QImage::Format_ARGB32_Premultiplied;
630 
633 
635 
636  // derived properties
637  bool mValid = false;
639  double mMapUnitsPerPixel = 1;
640  double mScale = 1;
641 
642  // utiity stuff
645 
647 
649 
651 
653 
655 
656 #ifdef QGISDEBUG
657  bool mHasTransformContext = false;
658 #endif
659 
660  void updateDerived();
661 
662  private:
663 
664  QList< QgsLabelBlockingRegion > mLabelBlockingRegions;
665  QList< QgsRenderedFeatureHandlerInterface * > mRenderedFeatureHandlers;
666 };
667 
668 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapSettings::Flags )
669 
670 
671 #endif // QGSMAPSETTINGS_H
A rectangle specified with double values.
Definition: qgsrectangle.h:41
Base class for all map layer types.
Definition: qgsmaplayer.h:79
QgsRectangle mVisibleExtent
Extent with some additional white space that matches the output aspect ratio.
void setSegmentationToleranceType(QgsAbstractGeometry::SegmentationToleranceType type)
Sets segmentation tolerance type (maximum angle or maximum difference between curve and approximation...
QgsMapToPixel mMapToPixel
Abstract base class for map rendering implementations.
const QgsExpressionContext & expressionContext() const
Gets the expression context.
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
Maximum angle between generating radii (lines from arc center to output vertices) ...
QgsRenderContext::TextRenderFormat defaultTextRenderFormat() const
Returns the default text rendering format for the labels.
QgsCoordinateReferenceSystem mDestCRS
QgsCoordinateTransformContext mTransformContext
A class to represent a 2D point.
Definition: qgspointxy.h:43
QMap< QString, QString > mLayerStyleOverrides
QColor backgroundColor() const
Gets the background color of the map.
void setCustomRenderFlags(const QString &customRenderFlags)
Sets the custom rendering flags.
QgsGeometry mLabelBoundaryGeometry
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:122
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle...
const QgsCoordinateReferenceSystem & crs
QgsLabelingEngineSettings mLabelingEngineSettings
The QgsMapSettings class contains configuration for rendering of the map.
QString customRenderFlags() const
Gets custom rendering flags.
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:37
const QgsVectorSimplifyMethod & simplifyMethod() const
Returns the simplification settings to use when rendering vector layers.
QgsRectangle mExtent
void setTextRenderFormat(QgsRenderContext::TextRenderFormat format)
Sets the text render format, which dictates how text is rendered (e.g.
Flag
Enumeration of flags that adjust the way the map is rendered.
Always render text using path objects (AKA outlines/curves).
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void setSegmentationTolerance(double tolerance)
Sets the segmentation tolerance applied when rendering curved geometries.
An interface for classes which provider custom handlers for features rendered as part of a map render...
QgsPathResolver mPathResolver
QgsVectorSimplifyMethod mSimplifyMethod
QImage::Format outputImageFormat() const
format of internal QImage, default QImage::Format_ARGB32_Premultiplied
void setSimplifyMethod(const QgsVectorSimplifyMethod &method)
Sets the simplification setting to use when rendering vector layers.
void setOutputImageFormat(QImage::Format format)
sets format of internal QImage
Label blocking region (in map coordinates and CRS).
Contains information about the context in which a coordinate transform is executed.
QgsExpressionContext mExpressionContext
TextRenderFormat
Options for rendering text.
QgsScaleCalculator mScaleCalculator
const QgsMapToPixel & mapToPixel() const
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...
Calculates scale for a given combination of canvas size, map extent, and monitor dpi.
DistanceUnit
Units of distance.
Definition: qgsunittypes.h:66
QString mEllipsoid
ellipsoid acronym (from table tbl_ellipsoids)
void setBackgroundColor(const QColor &color)
Sets the background color of the map.
void setLabelingEngineSettings(const QgsLabelingEngineSettings &settings)
Sets the global configuration of the labeling engine.
This class contains information how to simplify geometries fetched from a vector layer.
QString ellipsoid() const
Returns ellipsoid&#39;s acronym.
double segmentationTolerance() const
Gets the segmentation tolerance applied when rendering curved geometries.
double mSegmentationTolerance
void setSelectionColor(const QColor &color)
Sets color that is used for drawing of selected vector features.
QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList
A list of weak pointers to QgsMapLayers.
Definition: qgsmaplayer.h:1639
QgsWeakMapLayerPointerList mLayers
list of layers to be rendered (stored as weak pointers)
Stores global configuration for labeling engine.
This class represents a coordinate reference system (CRS).
QColor mBackgroundColor
Class for doing transforms between two map coordinate systems.
void setPathResolver(const QgsPathResolver &resolver)
Sets the path resolver for conversion between relative and absolute paths during rendering operations...
QgsLabelBlockingRegion(const QgsGeometry &geometry)
Constructor for a label blocking region.
QgsGeometry geometry
Geometry of region to avoid placing labels within (in destination map coordinates and CRS) ...
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.
QColor mSelectionColor
Resolves relative paths into absolute paths and vice versa.
QList< QgsLabelBlockingRegion > labelBlockingRegions() const
Returns the list of regions to avoid placing labels within.
QString mCustomRenderFlags
const QgsLabelingEngineSettings & labelingEngineSettings() const
Returns the global configuration of the labeling engine.
void setLabelBlockingRegions(const QList< QgsLabelBlockingRegion > &regions)
Sets a list of regions to avoid placing labels within.