From 4dc84995ee4dec8fe4b927a650b900e7edddaad4 Mon Sep 17 00:00:00 2001 From: Radim Blazek Date: Fri, 9 Nov 2012 20:46:07 +0100 Subject: [PATCH] GRASS Direct --- src/core/raster/qgsrasterblock.cpp | 6 +- src/core/raster/qgsrasterprojector.cpp | 10 +- src/plugins/grass/modules/default.qgc | 1 + .../grass/modules/r.random.raster.1.png | Bin 0 -> 1219 bytes .../grass/modules/r.random.raster.2.png | Bin 0 -> 1816 bytes src/plugins/grass/modules/r.random.raster.qgm | 8 + src/plugins/grass/modules/r.surf.idw.qgm | 2 +- src/plugins/grass/qgsgrassmapcalc.cpp | 2 +- src/plugins/grass/qgsgrassmodule.cpp | 834 +++++++++---- src/plugins/grass/qgsgrassmodule.h | 75 +- src/plugins/grass/qgsgrassplugin.cpp | 7 +- src/plugins/grass/qgsgrasstools.cpp | 297 +++-- src/plugins/grass/qgsgrasstools.h | 26 +- src/plugins/grass/qgsgrasstoolsbase.ui | 65 +- src/providers/grass/CMakeLists.txt | 151 +++ src/providers/grass/qgsgrass.cpp | 34 + src/providers/grass/qgsgrass.h | 5 + src/providers/grass/qgsgrassgislib.cpp | 1038 +++++++++++++++++ src/providers/grass/qgsgrassgislib.h | 140 +++ 19 files changed, 2336 insertions(+), 365 deletions(-) create mode 100644 src/plugins/grass/modules/r.random.raster.1.png create mode 100644 src/plugins/grass/modules/r.random.raster.2.png create mode 100644 src/plugins/grass/modules/r.random.raster.qgm create mode 100644 src/providers/grass/qgsgrassgislib.cpp create mode 100644 src/providers/grass/qgsgrassgislib.h diff --git a/src/core/raster/qgsrasterblock.cpp b/src/core/raster/qgsrasterblock.cpp index c265fae0a8e8..bed5d318a5e7 100644 --- a/src/core/raster/qgsrasterblock.cpp +++ b/src/core/raster/qgsrasterblock.cpp @@ -413,12 +413,16 @@ bool QgsRasterBlock::convert( QgsRasterBlock::DataType destDataType ) } QgsFree( mData ); mData = data; + mDataType = destDataType; + mTypeSize = typeSize( mDataType ); } else if ( typeIsColor( mDataType ) && typeIsColor( destDataType ) ) { QImage::Format format = imageFormat( destDataType ); QImage image = mImage->convertToFormat( format ); *mImage = image; + mDataType = destDataType; + mTypeSize = typeSize( mDataType ); } else { @@ -516,7 +520,7 @@ void * QgsRasterBlock::convert( void *srcData, QgsRasterBlock::DataType srcDataT double value = readValue( srcData, srcDataType, i ); writeValue( destData, destDataType, i, value ); //double newValue = readValue( destData, destDataType, i ); - //QgsDebugMsg( QString("convert type %1 to %2: %3 -> %4").arg(srcDataType).arg(destDataType).arg( value ).arg( newValue ) ); + //QgsDebugMsg( QString("convert %1 type %2 to %3: %4 -> %5").arg(i).arg(srcDataType).arg(destDataType).arg( value ).arg( newValue ) ); } return destData; } diff --git a/src/core/raster/qgsrasterprojector.cpp b/src/core/raster/qgsrasterprojector.cpp index 7cbffab5b2f1..73a7a8a1a539 100644 --- a/src/core/raster/qgsrasterprojector.cpp +++ b/src/core/raster/qgsrasterprojector.cpp @@ -701,10 +701,10 @@ QgsRasterBlock * QgsRasterProjector::block( int bandNo, QgsRectangle const & ex QgsRasterBlock *outputBlock = new QgsRasterBlock(); if ( !mInput ) { + QgsDebugMsg( "Input not set" ); return outputBlock; } - if ( ! mSrcCRS.isValid() || ! mDestCRS.isValid() || mSrcCRS == mDestCRS ) { QgsDebugMsg( "No projection necessary" ); @@ -723,6 +723,7 @@ QgsRasterBlock * QgsRasterProjector::block( int bandNo, QgsRectangle const & ex // If we zoom out too much, projector srcRows / srcCols maybe 0, which can cause problems in providers if ( srcRows() <= 0 || srcCols() <= 0 ) { + QgsDebugMsg( "Zero srcRows or srcCols" ); return outputBlock; } @@ -737,13 +738,15 @@ QgsRasterBlock * QgsRasterProjector::block( int bandNo, QgsRectangle const & ex size_t pixelSize = QgsRasterBlock::typeSize( mInput->dataType( bandNo ) ); - if ( !outputBlock->reset( QgsRasterBlock::ARGB32_Premultiplied, width, height ) ) + if ( !outputBlock->reset( mInput->dataType( bandNo ), width, height ) ) { + QgsDebugMsg( "Cannot reset block" ); delete inputBlock; return outputBlock; } + outputBlock->setNoDataValue( mInput->noDataValue( bandNo ) ); - // TODO: fill by transparent + // TODO: fill by no data or transparent int srcRow, srcCol; for ( int i = 0; i < height; ++i ) @@ -751,6 +754,7 @@ QgsRasterBlock * QgsRasterProjector::block( int bandNo, QgsRectangle const & ex for ( int j = 0; j < width; ++j ) { srcRowCol( i, j, &srcRow, &srcCol ); + QgsDebugMsgLevel( QString( "row = %1 col = %2 srcRow = %3 srcCol = %4" ).arg( i ).arg( j ).arg( srcRow ).arg( srcCol ), 5 ); size_t srcIndex = srcRow * mSrcCols + srcCol; size_t destIndex = i * width + j; diff --git a/src/plugins/grass/modules/default.qgc b/src/plugins/grass/modules/default.qgc index 699a238596a3..ba22ee2ba137 100644 --- a/src/plugins/grass/modules/default.qgc +++ b/src/plugins/grass/modules/default.qgc @@ -246,6 +246,7 @@
+
diff --git a/src/plugins/grass/modules/r.random.raster.1.png b/src/plugins/grass/modules/r.random.raster.1.png new file mode 100644 index 0000000000000000000000000000000000000000..e5f1d148c8b3c0c6a7e9ddc80aba78d1ba28ffed GIT binary patch literal 1219 zcmeAS@N?(olHy`uVBq!ia0vp^sz9v3!3HF!25;N|q}Y|f#7S2D@{NV&H|6f zVg?4j!ywFfJby(B0|V1KPZ!6Kh{JEEoz4<*6lwb(92#qDyXCQJXHtj8y#g_%Mclp) zn@Sey)wJrg>}mMLqj!h%k)E__*Dk>+J4_U%6?X*$G%M{)@Nqfu<<73vecdl-%*#l# zn(WClX@6O4>8gFjE3J5Q90M1hT*dn!V47Fi!;B1WYsP|EzO0&IPih$gKBOFDy z$)=gd@=AU7XxZ)iy6MN0MXjB)ax)SO17z35eOeb6_M~T<(8{)eg|RFQKCSY`kDm&f zJ3TSGeZgSE3V*A=yTUWFcGbKM@V==kG(qLy9Hr_M1qH{C8Lo>|SMyHGu+hvuxBW%o z>L3Pz8I~?FmUePH{B_*wtqY`HcOSCVut>Uh?uqX0v#mxkjx(F*P5kuvp!rlo_hW)l zK^+2Ovw4mt7#MrSI2~XNbIRSeEoI^AuQQD+jw+w$`S3nuc^1Rl)=N_k>RpU1x7O9M zdQzux%4uTUzc`Zz9mWq|KZ@He&^Spvs=;MCPf2{#|W#aiMEBN|!c1XDcJn_Pu5s`jCD|xNm+N*PincC7>*FhzJd~VY{EG>goK;I)BT7;dOH!?pi&B9UgOP!OrLLi&u7O2}p|O>rrIo3< zwt=CQfx)t%zuQqX{TA2csT0%4kI$UxGYVZZwP@JDuQl40p%HWxs zn4apJn4X!Otzf2Ss%NTetN^ysz(Uu^Tp`fVOu@e(HP1IdA)}Vh!NTC~!iIT36_Q9Qd^2-XODYRe8NhDRFUU)` z-xTJDW|MCSP!)rrk*T?Xg}H&5Wk74ueV`HnBy)l@t5O+E42+WW_if|`$|)krg$8*t oq-Ex$0)4Mvq*s)fmy(~WXQ&6XYlClEH&8Kyr>mdKI;Vst0Gw;zZU6uP literal 0 HcmV?d00001 diff --git a/src/plugins/grass/modules/r.random.raster.2.png b/src/plugins/grass/modules/r.random.raster.2.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c0a32a79a17f9dccf86873e8d66e48161f152e GIT binary patch literal 1816 zcmZXUdoe>TKI}X)Ekc=a22~p7%WO_ni0ne4p?8{_|#g(45s^ zIxqkL)F>`wFHnuZLVlwP?#WD86DX>T)6QgIXK$@)kEens`}i(rVgLZ1y;l(8z_Ysm zpaP+g?R^4z){3d&Klp0)U0mrT>W7vO_)BH%GOONR`UK})Ekgz2WsGV)NJJ^myEGtS z#^~+1<5|rxm><8=YrIJJ7gx_08nsU?Dt%9fjJipMg#(j=9fKY5S0q1|y`Yh*rPo&8 z5sG8viun(AD|4S0E}pweF{ITP_k0|V%X{@L*Aps&@b(*IlXB%LKeaWy&6Yr8Oy~2-mgJcX;tvP ztdcexL~6sWJD;*3 zjN!h*m)UN=)TTLVsvDFHs_!oNqZLL^GVA)LeC`VqW6Sh&u^;A!T#9~H`1``Hqx%1* zX*;Z6Nho?f*lcv_{7i~bMD^_Ca5M3uK~26A{^YUzt)$G-uGDr}LXF;j^+*HyhZFGJ#}l@VUHMa~(?@RN}bcpC8|x(S*&SZM;g9`(@QQ|45X;Gt?qMQ4sd(PAOtzIwf~g4 zBc!ZqEG^7rP0}_aC7%})JML|4&jdIrIoV2ByntiuYXwQ;RF!vuWNRN2~`Lc@-Ouvx}2|zft76;M*rf9h1mv7& zQ|QlNsLYXiLtq1~c2=d*(e`t}&`iRhTz+C>C|k8HuD-SX@WQM2qG*{IrTk{`Ts*6= z?sa`lkh3XbOmaU5lQSXKY${i9JOdS(ojY_?Kn4Tn9LzX)ydq`!D2Fq9hB~*d@?B;A z@Pb<6{+mgfeR-p;R#zqkYSZ(W?`B6-Sg4kJbU(9?6?V)eVx2|<e%g_I$KN!W~pB0Jp z%deF+t|}R6;tB{`^avpGt7Nr z$+ux$bW{`OR^`Q=ZVKZaKB8Y|E&L}kNb4eG^2v^}<0*{dX;AVh@P{-MIt2)s!9o@( zM8ECiYW;^n z{p6@KXrS&T#PC9e@xcNXK;Z_5v8cge?2rf~0d0x4G&4tjiNso&;fY9390BRhXGKvx zkl{ihpM=50$H$}DdnT|z6PhOoquEKfz`@#kgMGqdxeOAC%nOO-vZ90}k_U*!0JvMb z?HG_je8qf;CXvEf?67blK*T?1Kk^2VL;sKXvzfwhz{>LOGod<29R7-+vbikb1wIS- zawiNwD$K6YkM=)FR3DH6aCl21){2NFSbJm$BkC{8r;JqLQ~zX4}@B8dP1 literal 0 HcmV?d00001 diff --git a/src/plugins/grass/modules/r.random.raster.qgm b/src/plugins/grass/modules/r.random.raster.qgm new file mode 100644 index 000000000000..26c65b021c1c --- /dev/null +++ b/src/plugins/grass/modules/r.random.raster.qgm @@ -0,0 +1,8 @@ + + + + + diff --git a/src/plugins/grass/modules/r.surf.idw.qgm b/src/plugins/grass/modules/r.surf.idw.qgm index 83215ef61255..502b117c0592 100644 --- a/src/plugins/grass/modules/r.surf.idw.qgm +++ b/src/plugins/grass/modules/r.surf.idw.qgm @@ -1,7 +1,7 @@ - +