@@ -19,11 +19,11 @@ QgsRasterCalcNode::QgsRasterCalcNode( const QString& rasterName ): mType( tRaste
1919
2020QgsRasterCalcNode::~QgsRasterCalcNode ()
2121{
22- if ( mLeft )
22+ if ( mLeft )
2323 {
2424 delete mLeft ;
2525 }
26- if ( mRight )
26+ if ( mRight )
2727 {
2828 delete mRight ;
2929 }
@@ -34,10 +34,10 @@ bool QgsRasterCalcNode::calculate( QMap<QString, QgsRasterMatrix*>& rasterData,
3434 // if type is raster ref: return a copy of the corresponding matrix
3535
3636 // if type is operator, call the proper matrix operations
37- if ( mType == tRasterRef )
37+ if ( mType == tRasterRef )
3838 {
3939 QMap<QString, QgsRasterMatrix*>::iterator it = rasterData.find ( mRasterName );
40- if ( it == rasterData.end () )
40+ if ( it == rasterData.end () )
4141 {
4242 return false ;
4343 }
@@ -48,20 +48,20 @@ bool QgsRasterCalcNode::calculate( QMap<QString, QgsRasterMatrix*>& rasterData,
4848 result.setData (( *it )->nColumns (), ( *it )->nRows (), data, ( *it )->nodataValue () );
4949 return true ;
5050 }
51- else if ( mType == tOperator )
51+ else if ( mType == tOperator )
5252 {
5353 QgsRasterMatrix leftMatrix, rightMatrix;
5454 QgsRasterMatrix resultMatrix;
55- if ( !mLeft || !mLeft ->calculate ( rasterData, leftMatrix ) )
55+ if ( !mLeft || !mLeft ->calculate ( rasterData, leftMatrix ) )
5656 {
5757 return false ;
5858 }
59- if ( mRight && !mRight ->calculate ( rasterData, rightMatrix ) )
59+ if ( mRight && !mRight ->calculate ( rasterData, rightMatrix ) )
6060 {
6161 return false ;
6262 }
6363
64- switch ( mOperator )
64+ switch ( mOperator )
6565 {
6666 case opPLUS:
6767 leftMatrix.add ( rightMatrix );
@@ -96,6 +96,12 @@ bool QgsRasterCalcNode::calculate( QMap<QString, QgsRasterMatrix*>& rasterData,
9696 case opLE:
9797 leftMatrix.lesserEqual ( rightMatrix );
9898 break ;
99+ case opAND:
100+ leftMatrix.logicalAnd ( rightMatrix );
101+ break ;
102+ case opOR:
103+ leftMatrix.logicalOr ( rightMatrix );
104+ break ;
99105 case opSQRT:
100106 leftMatrix.squareRoot ();
101107 break ;
@@ -125,7 +131,7 @@ bool QgsRasterCalcNode::calculate( QMap<QString, QgsRasterMatrix*>& rasterData,
125131 result.setData ( newNColumns, newNRows, leftMatrix.takeData (), leftMatrix.nodataValue () );
126132 return true ;
127133 }
128- else if ( mType == tNumber )
134+ else if ( mType == tNumber )
129135 {
130136 float * data = new float [1 ];
131137 data[0 ] = mNumber ;
0 commit comments