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 &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
53     QVariantMap processAlgorithm( const QVariantMap &parameters,
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