QGIS API Documentation  3.8.0-Zanzibar (11aff65)
qgsrastershader.cpp
Go to the documentation of this file.
1 /* **************************************************************************
2  qgsrastershader.cpp - description
3  -------------------
4 begin : Fri Dec 28 2007
5 copyright : (C) 2007 by Peter J. Ersts
6 email : [email protected]
7 
8 ****************************************************************************/
9 
10 /* **************************************************************************
11  * *
12  * This program is free software; you can redistribute it and/or modify *
13  * it under the terms of the GNU General Public License as published by *
14  * the Free Software Foundation; either version 2 of the License, or *
15  * (at your option) any later version. *
16  * *
17  ***************************************************************************/
18 
19 #include "qgslogger.h"
20 #include "qgscolorrampshader.h"
21 #include "qgsrastershader.h"
22 #include "qgsrasterblock.h"
23 #include "qgssymbollayerutils.h"
24 
25 #include <QDomDocument>
26 #include <QDomElement>
27 
28 QgsRasterShader::QgsRasterShader( double minimumValue, double maximumValue )
29  : mMinimumValue( minimumValue )
30  , mMaximumValue( maximumValue )
31  , mRasterShaderFunction( new QgsRasterShaderFunction( mMinimumValue, mMaximumValue ) )
32 {
33  QgsDebugMsgLevel( QStringLiteral( "called." ), 4 );
34 }
35 
36 bool QgsRasterShader::shade( double value, int *returnRedValue, int *returnGreenValue, int *returnBlueValue, int *returnAlpha )
37 {
38  if ( mRasterShaderFunction )
39  {
40  return mRasterShaderFunction->shade( value, returnRedValue, returnGreenValue, returnBlueValue, returnAlpha );
41  }
42 
43  return false;
44 }
45 
46 bool QgsRasterShader::shade( double redValue, double greenValue, double blueValue, double alphaValue, int *returnRedValue, int *returnGreenValue, int *returnBlueValue, int *returnAlphaValue )
47 {
48  if ( mRasterShaderFunction )
49  {
50  return mRasterShaderFunction->shade( redValue, greenValue, blueValue, alphaValue, returnRedValue, returnGreenValue, returnBlueValue, returnAlphaValue );
51  }
52 
53  return false;
54 }
55 
57 {
58  QgsDebugMsgLevel( QStringLiteral( "called." ), 4 );
59 
60  if ( mRasterShaderFunction.get() == function )
61  return;
62 
63  if ( function )
64  {
65  mRasterShaderFunction.reset( function );
66  }
67 }
68 
70 {
71  QgsDebugMsgLevel( "Value = " + QString::number( value ), 4 );
72 
73  mMaximumValue = value;
74  if ( mRasterShaderFunction )
75  {
76  mRasterShaderFunction->setMaximumValue( value );
77  }
78 }
79 
81 {
82  QgsDebugMsgLevel( "Value = " + QString::number( value ), 4 );
83 
84  mMinimumValue = value;
85  if ( mRasterShaderFunction )
86  {
87  mRasterShaderFunction->setMinimumValue( value );
88  }
89 }
90 
91 void QgsRasterShader::writeXml( QDomDocument &doc, QDomElement &parent ) const
92 {
93  if ( parent.isNull() || !mRasterShaderFunction )
94  {
95  return;
96  }
97 
98  QDomElement rasterShaderElem = doc.createElement( QStringLiteral( "rastershader" ) );
99  QgsColorRampShader *colorRampShader = dynamic_cast<QgsColorRampShader *>( mRasterShaderFunction.get() );
100  if ( colorRampShader )
101  {
102  rasterShaderElem.appendChild( colorRampShader->writeXml( doc ) );
103  }
104  parent.appendChild( rasterShaderElem );
105 }
106 
107 void QgsRasterShader::readXml( const QDomElement &elem )
108 {
109  //only colorrampshader
110  QDomElement colorRampShaderElem = elem.firstChildElement( QStringLiteral( "colorrampshader" ) );
111  if ( !colorRampShaderElem.isNull() )
112  {
113  QgsColorRampShader *colorRampShader = new QgsColorRampShader();
114  colorRampShader->readXml( colorRampShaderElem );
115  setRasterShaderFunction( colorRampShader );
116  }
117 }
A ramp shader will color a raster pixel based on a list of values ranges in a ramp.
QDomElement writeXml(QDomDocument &doc) const
Writes configuration to a new DOM element.
#define QgsDebugMsgLevel(str, level)
Definition: qgslogger.h:39
The raster shade function applies a shader to a pixel at render time - typically used to render grays...
void setRasterShaderFunction(QgsRasterShaderFunction *function)
A public method that allows the user to set their own shader function.
void readXml(const QDomElement &elem)
Reads configuration from the given DOM element.
bool shade(double value, int *returnRedValue, int *returnGreenValue, int *returnBlueValue, int *returnAlpha)
Generates a new RGBA value based on one input value.
QgsRasterShader(double minimumValue=0.0, double maximumValue=255.0)
void writeXml(QDomDocument &doc, QDomElement &parent) const
Writes shader state to an XML element.
void setMinimumValue(double value)
Sets the minimum value for the raster shader.
void setMaximumValue(double value)
Sets the maximum value for the raster shader.
void readXml(const QDomElement &elem)
Reads shader state from an XML element.