-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
qgscolorrampshader.h
87 lines (66 loc) · 3.69 KB
/
qgscolorrampshader.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/* **************************************************************************
qgscolorrampshader.h - description
-------------------
begin : Fri Dec 28 2007
copyright : (C) 2007 by Peter J. Ersts
email : ersts@amnh.org
This class is based off of code that was originally written by Marco Hugentobler and
originally part of the larger QgsRasterLayer class
****************************************************************************/
/* **************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSCOLORRAMPSHADER_H
#define QGSCOLORRAMPSHADER_H
#include <QColor>
#include "qgsrastershaderfunction.h"
class CORE_EXPORT QgsColorRampShader : public QgsRasterShaderFunction
{
public:
QgsColorRampShader( double theMinimumValue = 0.0, double theMaximumValue = 255.0 );
//An entry for classification based upon value.
//Such a classification is typically used for
//single band layers where a pixel value represents
//not a color but a quantity, e.g. temperature or elevation
struct ColorRampItem
{
QString label;
double value;
QColor color;
};
enum COLOR_RAMP_TYPE
{
INTERPOLATED,
DISCRETE,
EXACT
};
bool generateShadedValue( double, int*, int*, int* );
bool generateShadedValue( double, double, double, int*, int*, int* );
/** Get the custom colormap*/
QList<QgsColorRampShader::ColorRampItem> getColorRampItemList() const {return mColorRampItemList;}
/**Get the color ramp type */
QgsColorRampShader::COLOR_RAMP_TYPE getColorRampType() {return mColorRampType;}
QString getColorRampTypeAsQString();
/**Set custom colormap */
void setColorRampItemList( const QList<QgsColorRampShader::ColorRampItem>& theList ) { mColorRampItemList = theList; }
/**Set the color ramp type*/
void setColorRampType( QgsColorRampShader::COLOR_RAMP_TYPE theColorRampType ) {mColorRampType = theColorRampType;}
/**Set the color ramp type*/
void setColorRampType( QString );
private:
/**Gets the color for a pixel value from the classification vector mValueClassification. Assigns the color of the lower class for every pixel between two class breaks.*/
bool getDiscreteColor( double, int*, int*, int* );
/**Gets the color for a pixel value from the classification vector mValueClassification. Assigns the color of the exact matching value in the color ramp item list */
bool getExactColor( double, int*, int*, int* );
/**Gets the color for a pixel value from the classification vector mValueClassification. Interpolates the color between two class breaks linearly.*/
bool getInterpolatedColor( double, int*, int*, int* );
/**This vector holds the information for classification based on values. Each item holds a value, a label and a color. The member mDiscreteClassification holds if one color is applied for all values between two class breaks (true) or if the item values are (linearly) interpolated for values between the item values (false)*/
QList<QgsColorRampShader::ColorRampItem> mColorRampItemList;
QgsColorRampShader::COLOR_RAMP_TYPE mColorRampType;
};
#endif