QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
qgscolorrampshader.h
Go to the documentation of this file.
1/***************************************************************************
2 qgscolorrampshader.h - description
3 -------------------
4begin : Fri Dec 28 2007
5copyright : (C) 2007 by Peter J. Ersts
7
8This class is based off of code that was originally written by Marco Hugentobler and
9originally part of the larger QgsRasterLayer class
10****************************************************************************/
11
12/***************************************************************************
13 * *
14 * This program is free software; you can redistribute it and/or modify *
15 * it under the terms of the GNU General Public License as published by *
16 * the Free Software Foundation; either version 2 of the License, or *
17 * (at your option) any later version. *
18 * *
19 ***************************************************************************/
20
21#ifndef QGSCOLORRAMPSHADER_H
22#define QGSCOLORRAMPSHADER_H
23
24#include <memory>
25
26#include "qgis.h"
27#include "qgis_core.h"
28#include "qgis_sip.h"
31#include "qgsreadwritecontext.h"
32#include "qgsrectangle.h"
33
34#include <QColor>
35#include <QVector>
36
37class QgsColorRamp;
39
45{
46
47 public:
48
58
60
63
64 bool operator==( const QgsColorRampShader &other ) const
65 {
66 if ( mColorRampItemList.count() != other.mColorRampItemList.count() ||
67 mClassificationMode != other.mClassificationMode ||
68 mColorRampType != other.mColorRampType )
69 {
70 return false;
71 }
72 for ( int i = 0; i < mColorRampItemList.count(); ++i )
73 {
74 if ( mColorRampItemList.at( i ) != other.mColorRampItemList.at( i ) ) return false;
75 }
76 return true;
77 }
78
79 bool operator!=( const QgsColorRampShader &other ) const
80 {
81 return !( *this == other );
82 }
83
84 //An entry for classification based upon value.
85 //Such a classification is typically used for
86 //single band layers where a pixel value represents
87 //not a color but a quantity, e.g. temperature or elevation
89 {
90
91 ColorRampItem() = default;
93 ColorRampItem( double val, const QColor &col, const QString &lbl = QString() )
94 : label( lbl )
95 , value( val )
96 , color( col )
97 {}
98
99 QString label;
100 double value = 0;
101 QColor color;
102
103 // compare operator for sorting
104 bool operator<( const QgsColorRampShader::ColorRampItem &other ) const { return value < other.value; }
105
107 {
108 return ( color != other.color ) ||
109 ( !std::isnan( value ) && !std::isnan( other.value ) && value != other.value ) ||
110 ( std::isnan( value ) != std::isnan( other.value ) );
111 }
112 };
113
119 QList<QgsColorRampShader::ColorRampItem> colorRampItemList() const { return mColorRampItemList.toList(); }
120
126 Qgis::ShaderInterpolationMethod colorRampType() const { return mColorRampType; }
127
129 QString colorRampTypeAsQString() const;
130
136 void setColorRampItemList( const QList<QgsColorRampShader::ColorRampItem> &list ); //TODO: sort on set
137
143 void setColorRampType( Qgis::ShaderInterpolationMethod colorRampType );
144
149 bool isEmpty() const;
150
155 QgsColorRamp *sourceColorRamp() const;
156
161 QgsColorRamp *createColorRamp() const SIP_FACTORY;
162
167 void setSourceColorRamp( QgsColorRamp *colorramp SIP_TRANSFER );
168
170 void setColorRampType( const QString &type );
171
179 void classifyColorRamp( int classes = 0, int band = -1, const QgsRectangle &extent = QgsRectangle(), QgsRasterInterface *input = nullptr );
180
187 void classifyColorRamp( int band = -1, const QgsRectangle &extent = QgsRectangle(), QgsRasterInterface *input = nullptr ) SIP_PYNAME( classifyColorRampV2 );
188
189 bool shade( double value, int *returnRedValue SIP_OUT, int *returnGreenValue SIP_OUT, int *returnBlueValue SIP_OUT, int *returnAlphaValue SIP_OUT ) const override;
190 bool shade( double redValue, double greenValue,
191 double blueValue, double alphaValue,
192 int *returnRedValue SIP_OUT, int *returnGreenValue SIP_OUT,
193 int *returnBlueValue SIP_OUT, int *returnAlphaValue SIP_OUT ) const override;
194 void legendSymbologyItems( QList< QPair< QString, QColor > > &symbolItems SIP_OUT ) const override;
195
200 QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context = QgsReadWriteContext() ) const;
201
206 void readXml( const QDomElement &elem, const QgsReadWriteContext &context = QgsReadWriteContext() );
207
213 void setClassificationMode( Qgis::ShaderClassificationMethod classificationMode ) { mClassificationMode = classificationMode; }
214
220 Qgis::ShaderClassificationMethod classificationMode() const { return mClassificationMode; }
221
227 void setClip( bool clip ) { mClip = clip; }
228
233 bool clip() const { return mClip; }
234
241 const QgsColorRampLegendNodeSettings *legendSettings() const;
242
251 void setLegendSettings( QgsColorRampLegendNodeSettings *settings SIP_TRANSFER );
252
253 protected:
254
256 std::unique_ptr<QgsColorRamp> mSourceColorRamp;
257
258 private:
259
267 QVector<QgsColorRampShader::ColorRampItem> mColorRampItemList;
268
271
276 mutable std::vector<int> mLUT;
277 mutable double mLUTOffset = 0.0;
278 mutable double mLUTFactor = 1.0;
279 mutable bool mLUTInitialized = false;
280
282 bool mClip = false;
283
284 std::unique_ptr< QgsColorRampLegendNodeSettings > mLegendSettings;
285
286};
287
288#endif
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:56
ShaderInterpolationMethod
Color ramp shader interpolation methods.
Definition qgis.h:1425
@ Linear
Interpolates the color between two class breaks linearly.
Definition qgis.h:1426
ShaderClassificationMethod
Color ramp shader classification methods.
Definition qgis.h:1440
@ Continuous
Uses breaks from color palette.
Definition qgis.h:1441
Settings for a color ramp legend node.
~QgsColorRampShader() override
Qgis::ShaderClassificationMethod classificationMode() const
Returns the classification mode.
Qgis::ShaderInterpolationMethod colorRampType() const
Returns the color ramp interpolation method.
bool operator!=(const QgsColorRampShader &other) const
void setClassificationMode(Qgis::ShaderClassificationMethod classificationMode)
Sets the classification mode.
QList< QgsColorRampShader::ColorRampItem > colorRampItemList() const
Returns the custom color map.
bool operator==(const QgsColorRampShader &other) const
QgsColorRampShader & operator=(const QgsColorRampShader &other)
void setClip(bool clip)
Sets whether the shader should not render values out of range.
bool clip() const
Returns whether the shader will clip values which are out of range.
QgsColorRampShader(double minimumValue=0.0, double maximumValue=255.0, QgsColorRamp *colorRamp=nullptr, Qgis::ShaderInterpolationMethod type=Qgis::ShaderInterpolationMethod::Linear, Qgis::ShaderClassificationMethod classificationMode=Qgis::ShaderClassificationMethod::Continuous)
Creates a new color ramp shader.
std::unique_ptr< QgsColorRamp > mSourceColorRamp
Source color ramp.
Abstract base class for color ramps.
Base class for processing filters like renderers, reprojector, resampler etc.
QgsRasterShaderFunction(double minimumValue=0.0, double maximumValue=255.0)
double maximumValue() const
Returns the minimum value for the raster shader.
double minimumValue() const
Returns the maximum value for the raster shader.
A container for the context for various read/write operations on objects.
A rectangle specified with double values.
#define SIP_PYNAME(name)
Definition qgis_sip.h:89
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:84
ColorRampItem(double val, const QColor &col, const QString &lbl=QString())
convenience constructor
bool operator!=(const QgsColorRampShader::ColorRampItem &other) const
bool operator<(const QgsColorRampShader::ColorRampItem &other) const