1 /*************************************************************************** 2 qgsalgorithmroundrastervalues.h 3 --------------------- 4 begin : April 2020 5 copyright : (C) 2020 by Clemens Raffler 6 email : clemens dot raffler at gmail dot com 7 ***************************************************************************/ 8 9 /*************************************************************************** 10 * * 11 * This program is free software; you can redistribute it and/or modify * 12 * it under the terms of the GNU General Public License as published by * 13 * the Free Software Foundation; either version 2 of the License, or * 14 * (at your option) any later version. * 15 * * 16 ***************************************************************************/ 17 18 19 #ifndef QGSALGORITHMROUNDRASTERVALUES_H 20 #define QGSALGORITHMROUNDRASTERVALUES_H 21 22 #define SIP_NO_FILE 23 24 #include "qgis_sip.h" 25 #include "qgsprocessingalgorithm.h" 26 #include "qgsapplication.h" 27 28 ///@cond PRIVATE 29 30 /** 31 * Round raster values algorithm: 32 * This algorithm rounds the Values of floating point raster datasets 33 * based on a predefined precision value. 34 */ 35 class QgsRoundRasterValuesAlgorithm : public QgsProcessingAlgorithm 36 { 37 public: 38 39 QgsRoundRasterValuesAlgorithm() = default; 40 void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override; icon()41 QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmRoundRastervalues.svg" ) ); } svgIconPath()42 QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmRoundRastervalues.svg" ) ); } 43 QString name() const override; 44 QString displayName() const override; 45 QStringList tags() const override; 46 QString group() const override; 47 QString groupId() const override; 48 QString shortHelpString() const override; 49 QgsRoundRasterValuesAlgorithm *createInstance() const override SIP_FACTORY; 50 51 protected: 52 bool prepareAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 53 QVariantMap processAlgorithm( const QVariantMap ¶meters, 54 QgsProcessingContext &context, 55 QgsProcessingFeedback *feedback ) override; 56 57 private: 58 double roundNearest( double value, double m ); 59 double roundUp( double value, double m ); 60 double roundDown( double value, double m ); 61 double roundNearestBaseN( double value ); 62 double roundUpBaseN( double value ); 63 double roundDownBaseN( double value ); 64 65 int mDecimalPrecision = 2; 66 int mBaseN = 10; 67 double mScaleFactor; 68 int mMultipleOfBaseN; 69 int mBand; 70 int mRoundingDirection; 71 std::unique_ptr< QgsRasterInterface > mInterface; 72 Qgis::DataType mDataType; 73 bool mIsInteger; 74 QgsRectangle mExtent; 75 QgsCoordinateReferenceSystem mCrs; 76 int mLayerWidth; 77 int mLayerHeight; 78 int mNbCellsXProvider = 0; 79 int mNbCellsYProvider = 0; 80 double mInputNoDataValue; 81 }; 82 83 ///@endcond PRIVATE 84 85 #endif // QGSALGORITHMROUNDRASTERVALUES_H 86