Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsmapclippingregion.h 3 : : -------------------------------------- 4 : : Date : June 2020 5 : : Copyright : (C) 2020 by Nyall Dawson 6 : : Email : nyall dot dawson 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 QGSMAPCLIPPINGREGION_H 17 : : #define QGSMAPCLIPPINGREGION_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgsgeometry.h" 21 : : #include "qgsmaplayer.h" 22 : : 23 : : /** 24 : : * \class QgsMapClippingRegion 25 : : * \ingroup core 26 : : * 27 : : * \brief A map clipping region (in map coordinates and CRS). 28 : : * 29 : : * \since QGIS 3.16 30 : : */ 31 : 0 : class CORE_EXPORT QgsMapClippingRegion 32 : : { 33 : : public: 34 : : 35 : : /** 36 : : * Feature clipping behavior, which controls how features from vector layers 37 : : * will be clipped. 38 : : */ 39 : : enum class FeatureClippingType : int 40 : : { 41 : : ClipToIntersection, //!< Clip the geometry of these features to the region prior to rendering (i.e. feature boundaries will follow the clip region) 42 : : ClipPainterOnly, //!< Applying clipping on the painter only (i.e. feature boundaries will be unchanged, but may be invisible where the feature falls outside the clipping region) 43 : : NoClipping, //!< Only render features which intersect the clipping region, but do not clip these features to the region 44 : : }; 45 : : 46 : : /** 47 : : * Constructor for a map clipping region, with the specified \a geometry in the destination map CRS. 48 : : */ 49 : 0 : explicit QgsMapClippingRegion( const QgsGeometry &geometry ) 50 : 0 : : mGeometry( geometry ) 51 : 0 : {} 52 : : 53 : : /** 54 : : * Returns the geometry of the clipping region (in the destination map CRS). 55 : : * 56 : : * \see setGeometry(). 57 : : */ 58 : : QgsGeometry geometry() const; 59 : : 60 : : /** 61 : : * Sets the clipping region \a geometry (in the destination map CRS). 62 : : * 63 : : * \see geometry() 64 : : */ 65 : : void setGeometry( const QgsGeometry &geometry ); 66 : : 67 : : /** 68 : : * Returns the feature clipping type. 69 : : * 70 : : * This setting is only used while rendering vector layers, for other layer types it is ignored. 71 : : * 72 : : * \see setFeatureClip() 73 : : */ 74 : 0 : FeatureClippingType featureClip() const 75 : : { 76 : 0 : return mFeatureClip; 77 : : } 78 : : 79 : : /** 80 : : * Sets the feature clipping \a type. 81 : : * 82 : : * This setting is only used while rendering vector layers, for other layer types it is ignored. 83 : : * 84 : : * \see featureClip() 85 : : */ 86 : 0 : void setFeatureClip( FeatureClippingType type ) 87 : : { 88 : 0 : mFeatureClip = type; 89 : 0 : } 90 : : 91 : : /** 92 : : * Returns TRUE if clipping should be restricted to a subset of layers. 93 : : * 94 : : * \see restrictedLayers() 95 : : * \see setRestrictToLayers() 96 : : */ 97 : : bool restrictToLayers() const; 98 : : 99 : : /** 100 : : * Sets whether clipping should be restricted to a subset of layers. 101 : : * 102 : : * \see setRestrictedLayers() 103 : : * \see restrictToLayers() 104 : : */ 105 : : void setRestrictToLayers( bool enabled ); 106 : : 107 : : /** 108 : : * Sets a list of \a layers to restrict the clipping region effects to. 109 : : * 110 : : * By default the clipping region applies to all layers. 111 : : * 112 : : * \note This setting is only used if restrictToLayers() is TRUE. 113 : : * 114 : : * \see restrictedLayers() 115 : : * \see setRestrictToLayers() 116 : : */ 117 : : void setRestrictedLayers( const QList< QgsMapLayer * > &layers ); 118 : : 119 : : /** 120 : : * Returns the list of layers to restrict the clipping region effects to. 121 : : * 122 : : * If the list is empty then the clipping will be applied to all layers. 123 : : * 124 : : * \note This setting is only used if restrictToLayers() is TRUE. 125 : : * 126 : : * \see setRestrictedLayers() 127 : : * \see restrictToLayers() 128 : : */ 129 : : QList< QgsMapLayer * > restrictedLayers() const; 130 : : 131 : : /** 132 : : * Returns TRUE if the clipping region should be applied to the specified map \a layer. 133 : : */ 134 : : bool appliesToLayer( const QgsMapLayer *layer ) const; 135 : : 136 : : private: 137 : : 138 : : //! Geometry of clipping region (in destination map coordinates and CRS) 139 : : QgsGeometry mGeometry; 140 : : 141 : 0 : bool mRestrictToLayers = false; 142 : : QgsWeakMapLayerPointerList mRestrictToLayersList; 143 : : 144 : 0 : FeatureClippingType mFeatureClip = FeatureClippingType::ClipToIntersection; 145 : : 146 : : }; 147 : : 148 : : #endif // QGSMAPCLIPPINGREGION_H