00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef QGSRASTERCALCNODE_H
00020 #define QGSRASTERCALCNODE_H
00021
00022 #include "qgsrastermatrix.h"
00023 #include <QMap>
00024 #include <QString>
00025
00026 class ANALYSIS_EXPORT QgsRasterCalcNode
00027 {
00028 public:
00030 enum Type
00031 {
00032 tOperator = 1,
00033 tNumber,
00034 tRasterRef
00035 };
00036
00038 enum Operator
00039 {
00040 opPLUS,
00041 opMINUS,
00042 opMUL,
00043 opDIV,
00044 opPOW,
00045 opSQRT,
00046 opSIN,
00047 opCOS,
00048 opTAN,
00049 opASIN,
00050 opACOS,
00051 opATAN,
00052 opEQ,
00053 opNE,
00054 opGT,
00055 opLT,
00056 opGE,
00057 opLE,
00058 };
00059
00060 QgsRasterCalcNode();
00061 QgsRasterCalcNode( double number );
00062 QgsRasterCalcNode( Operator op, QgsRasterCalcNode* left, QgsRasterCalcNode* right );
00063 QgsRasterCalcNode( const QString& rasterName );
00064 ~QgsRasterCalcNode();
00065
00066 Type type() const { return mType; }
00067
00068
00069 void setLeft( QgsRasterCalcNode* left ) { delete mLeft; mLeft = left; }
00070 void setRight( QgsRasterCalcNode* right ) { delete mRight; mRight = right; }
00071
00073 bool calculate( QMap<QString, QgsRasterMatrix*>& rasterData, QgsRasterMatrix& result ) const;
00074
00075 static QgsRasterCalcNode* parseRasterCalcString( const QString& str, QString& parserErrorMsg );
00076
00077 private:
00078 Type mType;
00079 QgsRasterCalcNode* mLeft;
00080 QgsRasterCalcNode* mRight;
00081 QgsRasterMatrix* mRasterMatrix;
00082 QString mRasterName;
00083 double mNumber;
00084 Operator mOperator;
00085 };
00086
00087
00088 #endif // QGSRASTERCALCNODE_H