Branch data Line data Source code
1 : : /* ************************************************************************** 2 : : qgsrastershader.cpp - description 3 : : ------------------- 4 : : begin : Fri Dec 28 2007 5 : : copyright : (C) 2007 by Peter J. Ersts 6 : : email : ersts@amnh.org 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 : 0 : QgsRasterShader::QgsRasterShader( double minimumValue, double maximumValue ) 29 : 0 : : mMinimumValue( minimumValue ) 30 : 0 : , mMaximumValue( maximumValue ) 31 : 0 : , mRasterShaderFunction( new QgsRasterShaderFunction( mMinimumValue, mMaximumValue ) ) 32 : : { 33 : 0 : QgsDebugMsgLevel( QStringLiteral( "called." ), 4 ); 34 : 0 : } 35 : : 36 : 0 : bool QgsRasterShader::shade( double value, int *returnRedValue, int *returnGreenValue, int *returnBlueValue, int *returnAlpha ) 37 : : { 38 : 0 : if ( mRasterShaderFunction ) 39 : : { 40 : 0 : return mRasterShaderFunction->shade( value, returnRedValue, returnGreenValue, returnBlueValue, returnAlpha ); 41 : : } 42 : : 43 : 0 : return false; 44 : 0 : } 45 : : 46 : 0 : bool QgsRasterShader::shade( double redValue, double greenValue, double blueValue, double alphaValue, int *returnRedValue, int *returnGreenValue, int *returnBlueValue, int *returnAlphaValue ) 47 : : { 48 : 0 : if ( mRasterShaderFunction ) 49 : : { 50 : 0 : return mRasterShaderFunction->shade( redValue, greenValue, blueValue, alphaValue, returnRedValue, returnGreenValue, returnBlueValue, returnAlphaValue ); 51 : : } 52 : : 53 : 0 : return false; 54 : 0 : } 55 : : 56 : 0 : void QgsRasterShader::setRasterShaderFunction( QgsRasterShaderFunction *function ) 57 : : { 58 : 0 : QgsDebugMsgLevel( QStringLiteral( "called." ), 4 ); 59 : : 60 : 0 : if ( mRasterShaderFunction.get() == function ) 61 : 0 : return; 62 : : 63 : 0 : if ( function ) 64 : : { 65 : 0 : mRasterShaderFunction.reset( function ); 66 : 0 : } 67 : 0 : } 68 : : 69 : 0 : void QgsRasterShader::setMaximumValue( double value ) 70 : : { 71 : 0 : QgsDebugMsgLevel( "Value = " + QString::number( value ), 4 ); 72 : : 73 : 0 : mMaximumValue = value; 74 : 0 : if ( mRasterShaderFunction ) 75 : : { 76 : 0 : mRasterShaderFunction->setMaximumValue( value ); 77 : 0 : } 78 : 0 : } 79 : : 80 : 0 : void QgsRasterShader::setMinimumValue( double value ) 81 : : { 82 : 0 : QgsDebugMsgLevel( "Value = " + QString::number( value ), 4 ); 83 : : 84 : 0 : mMinimumValue = value; 85 : 0 : if ( mRasterShaderFunction ) 86 : : { 87 : 0 : mRasterShaderFunction->setMinimumValue( value ); 88 : 0 : } 89 : 0 : } 90 : : 91 : 0 : void QgsRasterShader::writeXml( QDomDocument &doc, QDomElement &parent, const QgsReadWriteContext &context ) const 92 : : { 93 : 0 : if ( parent.isNull() || !mRasterShaderFunction ) 94 : : { 95 : 0 : return; 96 : : } 97 : : 98 : 0 : QDomElement rasterShaderElem = doc.createElement( QStringLiteral( "rastershader" ) ); 99 : 0 : QgsColorRampShader *colorRampShader = dynamic_cast<QgsColorRampShader *>( mRasterShaderFunction.get() ); 100 : 0 : if ( colorRampShader ) 101 : : { 102 : 0 : rasterShaderElem.appendChild( colorRampShader->writeXml( doc, context ) ); 103 : 0 : } 104 : 0 : parent.appendChild( rasterShaderElem ); 105 : 0 : } 106 : : 107 : 0 : void QgsRasterShader::readXml( const QDomElement &elem, const QgsReadWriteContext &context ) 108 : : { 109 : : //only colorrampshader 110 : 0 : QDomElement colorRampShaderElem = elem.firstChildElement( QStringLiteral( "colorrampshader" ) ); 111 : 0 : if ( !colorRampShaderElem.isNull() ) 112 : : { 113 : 0 : QgsColorRampShader *colorRampShader = new QgsColorRampShader(); 114 : 0 : colorRampShader->readXml( colorRampShaderElem, context ); 115 : 0 : setRasterShaderFunction( colorRampShader ); 116 : 0 : } 117 : 0 : } 118 : :