[QGIS Commit] r15526 - trunk/qgis/src/analysis/raster
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Thu Mar 17 04:58:10 EDT 2011
Author: mhugent
Date: 2011-03-17 01:58:10 -0700 (Thu, 17 Mar 2011)
New Revision: 15526
Modified:
trunk/qgis/src/analysis/raster/qgsrastercalcnode.cpp
trunk/qgis/src/analysis/raster/qgsrastercalcnode.h
trunk/qgis/src/analysis/raster/qgsrastercalcparser.yy
trunk/qgis/src/analysis/raster/qgsrastermatrix.cpp
trunk/qgis/src/analysis/raster/qgsrastermatrix.h
Log:
Add support for unary minus in raster calculator. Fixes ticket 3627
Modified: trunk/qgis/src/analysis/raster/qgsrastercalcnode.cpp
===================================================================
--- trunk/qgis/src/analysis/raster/qgsrastercalcnode.cpp 2011-03-17 05:33:31 UTC (rev 15525)
+++ trunk/qgis/src/analysis/raster/qgsrastercalcnode.cpp 2011-03-17 08:58:10 UTC (rev 15526)
@@ -122,6 +122,8 @@
break;
case opATAN:
leftMatrix.atangens();
+ case opSIGN:
+ leftMatrix.changeSign();
break;
default:
return false;
Modified: trunk/qgis/src/analysis/raster/qgsrastercalcnode.h
===================================================================
--- trunk/qgis/src/analysis/raster/qgsrastercalcnode.h 2011-03-17 05:33:31 UTC (rev 15525)
+++ trunk/qgis/src/analysis/raster/qgsrastercalcnode.h 2011-03-17 08:58:10 UTC (rev 15526)
@@ -56,7 +56,8 @@
opGE, // >=
opLE, // <=
opAND,
- opOR
+ opOR,
+ opSIGN //change sign
};
QgsRasterCalcNode();
Modified: trunk/qgis/src/analysis/raster/qgsrastercalcparser.yy
===================================================================
--- trunk/qgis/src/analysis/raster/qgsrastercalcparser.yy 2011-03-17 05:33:31 UTC (rev 15525)
+++ trunk/qgis/src/analysis/raster/qgsrastercalcparser.yy 2011-03-17 08:58:10 UTC (rev 15526)
@@ -70,6 +70,7 @@
%left '+' '-'
%left '*' '/'
%left '^'
+%left UMINUS // fictitious symbol (for unary minus)
%%
@@ -92,6 +93,8 @@
| raster_exp '+' raster_exp { $$ = new QgsRasterCalcNode(QgsRasterCalcNode::opPLUS, $1, $3); joinTmpNodes($$,$1,$3); }
| raster_exp '-' raster_exp { $$ = new QgsRasterCalcNode(QgsRasterCalcNode::opMINUS, $1, $3); joinTmpNodes($$,$1,$3); }
| '(' raster_exp ')' { $$ = $2; }
+ | '+' raster_exp %prec UMINUS { $$ = $2; }
+ | '-' raster_exp %prec UMINUS { $$ = new QgsRasterCalcNode( QgsRasterCalcNode::opSIGN, $2, 0 ); joinTmpNodes($$, $2, 0); }
| NUMBER { $$ = new QgsRasterCalcNode($1); addToTmpNodes($$); }
| RASTER_BAND_REF { $$ = new QgsRasterCalcNode(QString::fromUtf8(rastertext)); addToTmpNodes($$); }
;
Modified: trunk/qgis/src/analysis/raster/qgsrastermatrix.cpp
===================================================================
--- trunk/qgis/src/analysis/raster/qgsrastermatrix.cpp 2011-03-17 05:33:31 UTC (rev 15525)
+++ trunk/qgis/src/analysis/raster/qgsrastermatrix.cpp 2011-03-17 08:58:10 UTC (rev 15526)
@@ -167,6 +167,11 @@
return oneArgumentOperation( opATAN );
}
+bool QgsRasterMatrix::changeSign()
+{
+ return oneArgumentOperation( opSIGN );
+}
+
bool QgsRasterMatrix::oneArgumentOperation( OneArgOperator op )
{
if ( !mData )
@@ -211,6 +216,8 @@
case opATAN:
mData[i] = static_cast<float>( atan( value ) );
break;
+ case opSIGN:
+ mData[i] = -value;
}
}
}
Modified: trunk/qgis/src/analysis/raster/qgsrastermatrix.h
===================================================================
--- trunk/qgis/src/analysis/raster/qgsrastermatrix.h 2011-03-17 05:33:31 UTC (rev 15525)
+++ trunk/qgis/src/analysis/raster/qgsrastermatrix.h 2011-03-17 08:58:10 UTC (rev 15526)
@@ -48,6 +48,7 @@
opASIN,
opACOS,
opATAN,
+ opSIGN
};
/**Takes ownership of data array*/
@@ -97,6 +98,7 @@
bool acosinus();
bool tangens();
bool atangens();
+ bool changeSign();
private:
int mColumns;
More information about the QGIS-commit
mailing list