On Tue, Dec 11, 2012 at 2:23 PM, G. Allegri <[email protected]> wrote: >> >> Yes, you are right. Any class inheriting from QgsRasterInterface may >> be plugged into the QgsRasterPipe but all interfaces will be in a >> single line, no forks. > > > Ok, Radim, I'm sorry if I insist on this, it's just to understand it > correctly. > To add a QgsRasterInterface in a QgsRasterPipe I would use > QgsRasterPipe.insert(idx,QgsRasterInterface), but what is the > QgsRasterInterface.setInput(QgsRasterInterface ) for?
QgsRasterInterface.setInput(QgsRasterInterface ) is used to set input, but you dont have to call it if you are using QgsRasterPipe because it is called by QgsRasterPipe.insert(idx,QgsRasterInterface). > If I set a QgsRasterInterface, which will have its own input, as the input > for another QgsRasterInterface, I'm creating a chain of > QgsRasterInterfaces... Yes, QgsRasterPipe just helps you to manage such chain. It will automatically connect the interfaces. QgsRasterPipe represents a chain of interfaces. Radim > Help me to understand it... > > giovanni > >> >> >> BTW, you should always test if QgsRasterPipe::insert() was successful, >> because if connection of interfaces fails, the interface is not >> inserted. Only compatible interfaces may be connected. For example, it >> is not possible to connect QgsSingleBandGrayRenderer to an interface >> of ARGB32 type, because it needs numerical data as input. >> QgsRasterResampleFilter only works with ARGB32 as input etc. >> >> Radim >> >> >> > [1] >> > >> > https://github.com/qgis/Quantum-GIS/blob/master/src/core/raster/qgsrasterinterface.h#L108 >> > >> >> >> >> >> >> Radim >> >> >> >> >> >> > giovanni >> >> > >> >> > >> >> > 2012/12/11 Radim Blazek <[email protected]> >> >> >> >> >> >> On Tue, Dec 11, 2012 at 10:52 AM, G. Allegri <[email protected]> >> >> >> wrote: >> >> >> > Until now I've mostly created vector layers on QGIS, delegating >> >> >> > raster >> >> >> > creation to custom GDAL utilities. >> >> >> > Recently I looked into QgsGdalProvider and I saw that it exposes >> >> >> > the >> >> >> > QgsRasterDataProvider::Create capability. >> >> >> > I wonder if it's possible to create a brand new raster (geotiff or >> >> >> > what >> >> >> > else) using this provider and, in case, what is the right workflow >> >> >> > to >> >> >> > do >> >> >> > that. I haven't found examples of doing it... >> >> >> >> >> >> Yes it is possible. You can use a provider directly >> >> >> >> >> >> QgsRasterDataProvider * provider = ( QgsRasterDataProvider* >> >> >> )QgsProviderRegistry::instance()->provider( "gdal", dataSource ); >> >> >> provider->write( data, band, width, height, xOffset, yOffset ) >> >> >> >> >> >> if you your algorithm implemented as QgsRasterInterface you can use >> >> >> higher level QgsRasterFileWriter which will do the work splitting >> >> >> raster into parts >> >> >> >> >> >> QgsRasterPipe* pipe = new QgsRasterPipe(); >> >> >> pipe->set( inputProvider->clone() ); >> >> >> pipe->insert( 1, yourInterface ); >> >> >> QgsRasterFileWriter fileWriter( fileName ); >> >> >> fileWriter.writeRaster( pipe, width, height, extent, crs ); >> >> >> >> >> >> Radim >> >> >> >> >> >> >> >> >> > giovanni >> >> >> > >> >> >> > _______________________________________________ >> >> >> > Qgis-developer mailing list >> >> >> > [email protected] >> >> >> > http://lists.osgeo.org/mailman/listinfo/qgis-developer >> >> >> > >> >> > >> >> > >> > >> > > > _______________________________________________ Qgis-developer mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/qgis-developer
