QGIS API Documentation 3.39.0-Master (47f7b3a4989)
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 "qgis_core.h"
25#include "qgis_sip.h"
26#include <QColor>
27#include <QVector>
28#include <memory>
29
30#include "qgis.h"
32#include "qgsrectangle.h"
33#include "qgsreadwritecontext.h"
35
36class QgsColorRamp;
38
44{
45
46 public:
47
57
59
64
68 QgsColorRampShader &operator=( const QgsColorRampShader &other );
69
70 bool operator==( const QgsColorRampShader &other ) const
71 {
72 if ( mColorRampItemList.count() != other.mColorRampItemList.count() ||
73 mClassificationMode != other.mClassificationMode ||
74 mColorRampType != other.mColorRampType )
75 {
76 return false;
77 }
78 for ( int i = 0; i < mColorRampItemList.count(); ++i )
79 {
80 if ( mColorRampItemList.at( i ) != other.mColorRampItemList.at( i ) ) return false;
81 }
82 return true;
83 }
84
85 //An entry for classification based upon value.
86 //Such a classification is typically used for
87 //single band layers where a pixel value represents
88 //not a color but a quantity, e.g. temperature or elevation
90 {
92 ColorRampItem() = default;
94 ColorRampItem( double val, const QColor &col, const QString &lbl = QString() )
95 : label( lbl )
96 , value( val )
97 , color( col )
98 {}
99
100 QString label;
101 double value = 0;
102 QColor color;
103
104 // compare operator for sorting
105 bool operator<( const QgsColorRampShader::ColorRampItem &other ) const { return value < other.value; }
106
108 {
109 return ( color != other.color ) ||
110 ( !std::isnan( value ) && !std::isnan( other.value ) && value != other.value ) ||
111 ( std::isnan( value ) != std::isnan( other.value ) );
112 }
113 };
114
120 QList<QgsColorRampShader::ColorRampItem> colorRampItemList() const { return mColorRampItemList.toList(); }
121
127 Qgis::ShaderInterpolationMethod colorRampType() const { return mColorRampType; }
128
130 QString colorRampTypeAsQString() const;
131
137 void setColorRampItemList( const QList<QgsColorRampShader::ColorRampItem> &list ); //TODO: sort on set
138
144 void setColorRampType( Qgis::ShaderInterpolationMethod colorRampType );
145
150 bool isEmpty() const;
151
156 QgsColorRamp *sourceColorRamp() const;
157
162 QgsColorRamp *createColorRamp() const SIP_FACTORY;
163
168 void setSourceColorRamp( QgsColorRamp *colorramp SIP_TRANSFER );
169
171 void setColorRampType( const QString &type );
172
180 void classifyColorRamp( int classes = 0, int band = -1, const QgsRectangle &extent = QgsRectangle(), QgsRasterInterface *input = nullptr );
181
188 void classifyColorRamp( int band = -1, const QgsRectangle &extent = QgsRectangle(), QgsRasterInterface *input = nullptr ) SIP_PYNAME( classifyColorRampV2 );
189
190 bool shade( double value, int *returnRedValue SIP_OUT, int *returnGreenValue SIP_OUT, int *returnBlueValue SIP_OUT, int *returnAlphaValue SIP_OUT ) const override;
191 bool shade( double redValue, double greenValue,
192 double blueValue, double alphaValue,
193 int *returnRedValue SIP_OUT, int *returnGreenValue SIP_OUT,
194 int *returnBlueValue SIP_OUT, int *returnAlphaValue SIP_OUT ) const override;
195 void legendSymbologyItems( QList< QPair< QString, QColor > > &symbolItems SIP_OUT ) const override;
196
201 QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context = QgsReadWriteContext() ) const;
202
207 void readXml( const QDomElement &elem, const QgsReadWriteContext &context = QgsReadWriteContext() );
208
214 void setClassificationMode( Qgis::ShaderClassificationMethod classificationMode ) { mClassificationMode = classificationMode; }
215
221 Qgis::ShaderClassificationMethod classificationMode() const { return mClassificationMode; }
222
228 void setClip( bool clip ) { mClip = clip; }
229
234 bool clip() const { return mClip; }
235
242 const QgsColorRampLegendNodeSettings *legendSettings() const;
243
252 void setLegendSettings( QgsColorRampLegendNodeSettings *settings SIP_TRANSFER );
253
254 protected:
255
257 std::unique_ptr<QgsColorRamp> mSourceColorRamp;
258
259 private:
260
268 QVector<QgsColorRampShader::ColorRampItem> mColorRampItemList;
269
272
277 mutable std::vector<int> mLUT;
278 mutable double mLUTOffset = 0.0;
279 mutable double mLUTFactor = 1.0;
280 mutable bool mLUTInitialized = false;
281
283 bool mClip = false;
284
285 std::unique_ptr< QgsColorRampLegendNodeSettings > mLegendSettings;
286
287};
288
289#endif
The Qgis class provides global constants for use throughout the application.
Definition qgis.h:54
ShaderInterpolationMethod
Color ramp shader interpolation methods.
Definition qgis.h:1158
@ Linear
Interpolates the color between two class breaks linearly.
ShaderClassificationMethod
Color ramp shader classification methods.
Definition qgis.h:1173
@ Continuous
Uses breaks from color palette.
Settings for a color ramp legend node.
A ramp shader will color a raster pixel based on a list of values ranges in a ramp.
~QgsColorRampShader() override
Qgis::ShaderClassificationMethod classificationMode() const
Returns the classification mode.
Qgis::ShaderInterpolationMethod colorRampType() const
Returns the color ramp interpolation method.
QList< QgsColorRampShader::ColorRampItem > colorRampItemList() const
Returns the custom color map.
bool operator==(const QgsColorRampShader &other) const
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.
std::unique_ptr< QgsColorRamp > mSourceColorRamp
Source color ramp.
Abstract base class for color ramps.
Base class for processing filters like renderers, reprojector, resampler etc.
The raster shade function applies a shader to a pixel at render time - typically used to render grays...
The class is used as a container of context for various read/write operations on other objects.
A rectangle specified with double values.
#define SIP_PYNAME(name)
Definition qgis_sip.h:81
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:76
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
ColorRampItem()=default
default constructor