Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgspalettedrasterrenderer.h 3 : : --------------------------- 4 : : begin : December 2011 5 : : copyright : (C) 2011 by Marco Hugentobler 6 : : email : marco at sourcepole 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 : : #ifndef QGSPALETTEDRASTERRENDERER_H 19 : : #define QGSPALETTEDRASTERRENDERER_H 20 : : 21 : : #include "qgis_core.h" 22 : : #include "qgis_sip.h" 23 : : #include <QVector> 24 : : 25 : : #include "qgsrasterrenderer.h" 26 : : #include "qgscolorrampshader.h" 27 : : 28 : : class QColor; 29 : : class QDomElement; 30 : : 31 : : /** 32 : : * \ingroup core 33 : : * \brief Renderer for paletted raster images. 34 : : */ 35 : 0 : class CORE_EXPORT QgsPalettedRasterRenderer: public QgsRasterRenderer 36 : : { 37 : : public: 38 : : 39 : : //! Properties of a single value class 40 : 0 : struct Class 41 : : { 42 : : //! Constructor for Class 43 : 0 : Class( double value, const QColor &color = QColor(), const QString &label = QString() ) 44 : 0 : : value( value ) 45 : 0 : , color( color ) 46 : 0 : , label( label ) 47 : 0 : {} 48 : : 49 : : //! Value 50 : : double value; 51 : : 52 : : //! Color to render value 53 : : QColor color; 54 : : //! Label for value 55 : : QString label; 56 : : }; 57 : : 58 : : //! Map of value to class properties 59 : : typedef QList< QgsPalettedRasterRenderer::Class > ClassData; 60 : : 61 : : /** 62 : : * Constructor for QgsPalettedRasterRenderer. 63 : : */ 64 : : QgsPalettedRasterRenderer( QgsRasterInterface *input, int bandNumber, const ClassData &classes ); 65 : : 66 : : //! QgsPalettedRasterRenderer cannot be copied. Use clone() instead. 67 : : QgsPalettedRasterRenderer( const QgsPalettedRasterRenderer & ) = delete; 68 : : //! QgsPalettedRasterRenderer cannot be copied. Use clone() instead. 69 : : const QgsPalettedRasterRenderer &operator=( const QgsPalettedRasterRenderer & ) = delete; 70 : : 71 : : QgsPalettedRasterRenderer *clone() const override SIP_FACTORY; 72 : : static QgsRasterRenderer *create( const QDomElement &elem, QgsRasterInterface *input ) SIP_FACTORY; 73 : : 74 : : QgsRasterBlock *block( int bandNo, const QgsRectangle &extent, int width, int height, QgsRasterBlockFeedback *feedback = nullptr ) override SIP_FACTORY; 75 : : 76 : : //! Returns number of colors 77 : : int nColors() const { return mClassData.size(); } 78 : : 79 : : /** 80 : : * Returns a map of value to classes (colors) used by the renderer. 81 : : */ 82 : : ClassData classes() const; 83 : : 84 : : /** 85 : : * Returns optional category label 86 : : * \since QGIS 2.1 87 : : */ 88 : : QString label( double idx ) const; 89 : : 90 : : /** 91 : : * Set category label 92 : : * \since QGIS 2.1 93 : : */ 94 : : void setLabel( double idx, const QString &label ); 95 : : 96 : : /** 97 : : * Returns the raster band used for rendering the raster. 98 : : * \since QGIS 3.0 99 : : */ 100 : 0 : int band() const { return mBand; } 101 : : 102 : : void writeXml( QDomDocument &doc, QDomElement &parentElem ) const override; 103 : : QList< QPair< QString, QColor > > legendSymbologyItems() const override; 104 : : QList<QgsLayerTreeModelLegendNode *> createLegendNodes( QgsLayerTreeLayer *nodeLayer ) SIP_FACTORY override; 105 : : QList<int> usesBands() const override; 106 : : void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props = QVariantMap() ) const override; 107 : : bool accept( QgsStyleEntityVisitorInterface *visitor ) const override; 108 : : 109 : : /** 110 : : * Set the source color \a ramp. Ownership is transferred to the renderer. 111 : : * \see sourceColorRamp() 112 : : * \since QGIS 3.0 113 : : */ 114 : : void setSourceColorRamp( QgsColorRamp *ramp SIP_TRANSFER ); 115 : : 116 : : /** 117 : : * Gets the source color ramp 118 : : * \see setSourceColorRamp() 119 : : * \since QGIS 3.0 120 : : */ 121 : : QgsColorRamp *sourceColorRamp() const; 122 : : 123 : : /** 124 : : * Converts a raster color \a table to paletted renderer class data. 125 : : * \since QGIS 3.0 126 : : */ 127 : : static QgsPalettedRasterRenderer::ClassData colorTableToClassData( const QList<QgsColorRampShader::ColorRampItem> &table ); 128 : : 129 : : /** 130 : : * Converts a \a string containing a color table or class data to to paletted renderer class data. 131 : : * \see classDataFromFile() 132 : : * \see classDataToString() 133 : : * \since QGIS 3.0 134 : : */ 135 : : static QgsPalettedRasterRenderer::ClassData classDataFromString( const QString &string ); 136 : : 137 : : /** 138 : : * Opens a color table file and returns corresponding paletted renderer class data. 139 : : * \see classDataFromString() 140 : : * \since QGIS 3.0 141 : : */ 142 : : static QgsPalettedRasterRenderer::ClassData classDataFromFile( const QString &path ); 143 : : 144 : : /** 145 : : * Converts classes to a string representation, using the .clr/gdal color table file format. 146 : : * \see classDataFromString() 147 : : * \since QGIS 3.0 148 : : */ 149 : : static QString classDataToString( const QgsPalettedRasterRenderer::ClassData &classes ); 150 : : 151 : : /** 152 : : * Generates class data from a \a raster, for the specified \a bandNumber. An optional 153 : : * color \a ramp can be specified to automatically assign colors from the ramp. 154 : : * \since QGIS 3.0 155 : : */ 156 : : static QgsPalettedRasterRenderer::ClassData classDataFromRaster( QgsRasterInterface *raster, int bandNumber, QgsColorRamp *ramp = nullptr, 157 : : QgsRasterBlockFeedback *feedback = nullptr ); 158 : : 159 : : private: 160 : : #ifdef SIP_RUN 161 : : QgsPalettedRasterRenderer( const QgsPalettedRasterRenderer & ); 162 : : const QgsPalettedRasterRenderer &operator=( const QgsPalettedRasterRenderer & ); 163 : : #endif 164 : : 165 : : 166 : : int mBand; 167 : : ClassData mClassData; 168 : : 169 : : //! Source color ramp 170 : : std::unique_ptr<QgsColorRamp> mSourceColorRamp; 171 : : 172 : : //! Premultiplied color map 173 : : QMap< double, QRgb > mColors; 174 : : void updateArrays(); 175 : : 176 : : // Maximum number of allowed classes for float rasters 177 : : static const int MAX_FLOAT_CLASSES; 178 : : }; 179 : : 180 : : #endif // QGSPALETTEDRASTERRENDERER_H