Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgstransformeffect.h 3 : : -------------------- 4 : : begin : March 2015 5 : : copyright : (C) 2015 Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 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 : : #ifndef QGSTRANSFORMEFFECT_H 18 : : #define QGSTRANSFORMEFFECT_H 19 : : 20 : : #include "qgis_core.h" 21 : : #include "qgspainteffect.h" 22 : : #include "qgis_sip.h" 23 : : #include "qgsmapunitscale.h" 24 : : #include "qgsunittypes.h" 25 : : #include <QPainter> 26 : : 27 : : /** 28 : : * \ingroup core 29 : : * \class QgsTransformEffect 30 : : * \brief A paint effect which applies transformations (such as move, 31 : : * scale and rotate) to a picture. 32 : : * 33 : : * \since QGIS 2.9 34 : : */ 35 : : 36 : 0 : class CORE_EXPORT QgsTransformEffect : public QgsPaintEffect SIP_NODEFAULTCTORS 37 : : { 38 : : 39 : : public: 40 : : 41 : : /** 42 : : * Creates a new QgsTransformEffect effect from a properties string map. 43 : : * \param map encoded properties string map 44 : : * \returns new QgsTransformEffect 45 : : */ 46 : : static QgsPaintEffect *create( const QVariantMap &map ) SIP_FACTORY; 47 : : 48 : : /** 49 : : * Constructor for QgsTransformEffect. 50 : : */ 51 : 0 : QgsTransformEffect() = default; 52 : : 53 : 0 : QString type() const override { return QStringLiteral( "transform" ); } 54 : : QVariantMap properties() const override; 55 : : void readProperties( const QVariantMap &props ) override; 56 : : QgsTransformEffect *clone() const override SIP_FACTORY; 57 : : 58 : : /** 59 : : * Sets the transform x translation. 60 : : * \param translateX distance to translate along the x axis 61 : : * \see translateX 62 : : * \see setTranslateY 63 : : * \see setTranslateUnit 64 : : * \see setTranslateMapUnitScale 65 : : */ 66 : : void setTranslateX( const double translateX ) { mTranslateX = translateX; } 67 : : 68 : : /** 69 : : * Returns the transform x translation. 70 : : * \returns X distance translated along the x axis 71 : : * \see setTranslateX 72 : : * \see translateY 73 : : * \see translateUnit 74 : : * \see translateMapUnitScale 75 : : */ 76 : : double translateX() const { return mTranslateX; } 77 : : 78 : : /** 79 : : * Sets the transform y translation. 80 : : * \param translateY distance to translate along the y axis 81 : : * \see translateY 82 : : * \see setTranslateX 83 : : * \see setTranslateUnit 84 : : * \see setTranslateMapUnitScale 85 : : */ 86 : : void setTranslateY( const double translateY ) { mTranslateY = translateY; } 87 : : 88 : : /** 89 : : * Returns the transform y translation. 90 : : * \returns Y distance translated along the y axis 91 : : * \see setTranslateY 92 : : * \see translateX 93 : : * \see translateUnit 94 : : * \see translateMapUnitScale 95 : : */ 96 : : double translateY() const { return mTranslateY; } 97 : : 98 : : /** 99 : : * Sets the units used for the transform translation. 100 : : * \param unit units for translation 101 : : * \see translateUnit 102 : : * \see setTranslateX 103 : : * \see setTranslateY 104 : : * \see setTranslateMapUnitScale 105 : : */ 106 : : void setTranslateUnit( const QgsUnitTypes::RenderUnit unit ) { mTranslateUnit = unit; } 107 : : 108 : : /** 109 : : * Returns the units used for the transform translation. 110 : : * \returns units for translation 111 : : * \see setTranslateUnit 112 : : * \see translateX 113 : : * \see translateY 114 : : * \see translateMapUnitScale 115 : : */ 116 : : QgsUnitTypes::RenderUnit translateUnit() const { return mTranslateUnit; } 117 : : 118 : : /** 119 : : * Sets the map unit scale used for the transform translation. 120 : : * \param scale map unit scale for translation 121 : : * \see translateMapUnitScale 122 : : * \see setTranslateX 123 : : * \see setTranslateY 124 : : * \see setTranslateUnit 125 : : */ 126 : : void setTranslateMapUnitScale( const QgsMapUnitScale &scale ) { mTranslateMapUnitScale = scale; } 127 : : 128 : : /** 129 : : * Returns the map unit scale used for the transform translation. 130 : : * \returns map unit scale for translation 131 : : * \see setTranslateMapUnitScale 132 : : * \see translateX 133 : : * \see translateY 134 : : * \see translateUnit 135 : : */ 136 : : const QgsMapUnitScale &translateMapUnitScale() const { return mTranslateMapUnitScale; } 137 : : 138 : : /** 139 : : * Sets the x axis scaling factor. 140 : : * \param scaleX factor to scale x axis by, where 1.0 = no scaling 141 : : * \see scaleX 142 : : * \see setScaleY 143 : : */ 144 : : void setScaleX( const double scaleX ) { mScaleX = scaleX; } 145 : : 146 : : /** 147 : : * Returns the x axis scaling factor. 148 : : * \returns x axis scaling factor, where 1.0 = no scaling 149 : : * \see setScaleX 150 : : * \see scaleY 151 : : */ 152 : : double scaleX() const { return mScaleX; } 153 : : 154 : : /** 155 : : * Sets the y axis scaling factor. 156 : : * \param scaleY factor to scale y axis by, where 1.0 = no scaling 157 : : * \see scaleX 158 : : */ 159 : : void setScaleY( const double scaleY ) { mScaleY = scaleY; } 160 : : 161 : : /** 162 : : * Returns the y axis scaling factor. 163 : : * \returns y axis scaling factor, where 1.0 = no scaling 164 : : * \see setScaleY 165 : : * \see scaleX 166 : : */ 167 : : double scaleY() const { return mScaleY; } 168 : : 169 : : /** 170 : : * Sets the transform \a rotation, in degrees clockwise. 171 : : * \see rotation() 172 : : */ 173 : : void setRotation( const double rotation ) { mRotation = rotation; } 174 : : 175 : : /** 176 : : * Returns the transform rotation, in degrees clockwise. 177 : : * \see setRotation() 178 : : */ 179 : : double rotation() const { return mRotation; } 180 : : 181 : : /** 182 : : * Sets the x axis shearing factor. 183 : : * \param shearX x axis shearing 184 : : * \see shearX 185 : : * \see setShearY 186 : : */ 187 : : void setShearX( const double shearX ) { mShearX = shearX; } 188 : : 189 : : /** 190 : : * Returns the x axis shearing factor. 191 : : * \returns x axis shearing 192 : : * \see setShearX 193 : : * \see shearY 194 : : */ 195 : : double shearX() const { return mShearX; } 196 : : 197 : : /** 198 : : * Sets the y axis shearing factor. 199 : : * \param shearY y axis shearing 200 : : * \see shearY 201 : : * \see setShearX 202 : : */ 203 : : void setShearY( const double shearY ) { mShearY = shearY; } 204 : : 205 : : /** 206 : : * Returns the y axis shearing factor. 207 : : * \returns y axis shearing 208 : : * \see setShearY 209 : : * \see shearX 210 : : */ 211 : : double shearY() const { return mShearY; } 212 : : 213 : : /** 214 : : * Sets whether to reflect along the x-axis 215 : : * \param reflectX TRUE to reflect horizontally 216 : : * \see reflectX 217 : : * \see setReflectY 218 : : */ 219 : : void setReflectX( const bool reflectX ) { mReflectX = reflectX; } 220 : : 221 : : /** 222 : : * Returns whether transform will be reflected along the x-axis 223 : : * \returns TRUE if transform will reflect horizontally 224 : : * \see setReflectX 225 : : * \see reflectY 226 : : */ 227 : : bool reflectX() const { return mReflectX; } 228 : : 229 : : /** 230 : : * Sets whether to reflect along the y-axis 231 : : * \param reflectY TRUE to reflect horizontally 232 : : * \see reflectY 233 : : * \see setReflectX 234 : : */ 235 : : void setReflectY( const bool reflectY ) { mReflectY = reflectY; } 236 : : 237 : : /** 238 : : * Returns whether transform will be reflected along the y-axis 239 : : * \returns TRUE if transform will reflect horizontally 240 : : * \see setReflectY 241 : : * \see reflectX 242 : : */ 243 : : bool reflectY() const { return mReflectY; } 244 : : 245 : : protected: 246 : : 247 : : void draw( QgsRenderContext &context ) override; 248 : : QRectF boundingRect( const QRectF &rect, const QgsRenderContext &context ) const override; 249 : : 250 : : private: 251 : : 252 : 0 : double mTranslateX = 0.0; 253 : 0 : double mTranslateY = 0.0; 254 : 0 : QgsUnitTypes::RenderUnit mTranslateUnit = QgsUnitTypes::RenderMillimeters; 255 : : QgsMapUnitScale mTranslateMapUnitScale; 256 : 0 : double mScaleX = 1.0; 257 : 0 : double mScaleY = 1.0; 258 : 0 : double mRotation = 0.0; 259 : 0 : double mShearX = 0.0; 260 : 0 : double mShearY = 0.0; 261 : 0 : bool mReflectX = false; 262 : 0 : bool mReflectY = false; 263 : : 264 : : QTransform createTransform( const QgsRenderContext &context ) const; 265 : : 266 : : }; 267 : : 268 : : #endif // QGSTRANSFORMEFFECT_H 269 : :