34 for (
int i = 0; i < pipe.
size(); i++ )
39 Role role = interfaceRole( clone );
40 QgsDebugMsgLevel( QStringLiteral(
"cloned interface with role %1" ).arg( role ), 4 );
43 clone->setInput( mInterfaces.at( i - 1 ) );
45 mInterfaces.append( clone );
48 mRoleMap.insert( role, i );
61 bool QgsRasterPipe::connect( QVector<QgsRasterInterface *> interfaces )
64 for (
int i = 1; i < interfaces.size(); i++ )
66 if ( ! interfaces[i]->setInput( interfaces[i - 1] ) )
71 QgsDebugMsg( QStringLiteral(
"cannot connect %1 to %2" ).arg(
typeid( a ).name(),
typeid( b ).name() ) );
81 QgsDebugMsgLevel( QStringLiteral(
"insert %1 at %2" ).arg(
typeid( *interface ).name() ).arg( idx ), 4 );
82 if ( idx > mInterfaces.size() )
84 idx = mInterfaces.size();
88 QVector<QgsRasterInterface *> interfaces = mInterfaces;
90 interfaces.insert( idx, interface );
92 if ( connect( interfaces ) )
95 mInterfaces.insert( idx, interface );
96 setRole( interface, idx );
101 connect( mInterfaces );
107 if ( !interface )
return false;
109 QgsDebugMsgLevel( QStringLiteral(
"replace by %1 at %2" ).arg(
typeid( *interface ).name() ).arg( idx ), 4 );
110 if ( !checkBounds( idx ) )
return false;
114 QVector<QgsRasterInterface *> interfaces = mInterfaces;
116 interfaces[idx] = interface;
117 bool success =
false;
118 if ( connect( interfaces ) )
121 delete mInterfaces.at( idx );
122 mInterfaces[idx] = interface;
123 setRole( interface, idx );
128 connect( mInterfaces );
135 if ( dynamic_cast<QgsRasterDataProvider *>( interface ) ) role =
ProviderRole;
136 else if ( dynamic_cast<QgsRasterRenderer *>( interface ) ) role =
RendererRole;
137 else if ( dynamic_cast<QgsRasterResampleFilter *>( interface ) ) role =
ResamplerRole;
138 else if ( dynamic_cast<QgsBrightnessContrastFilter *>( interface ) ) role =
BrightnessRole;
139 else if ( dynamic_cast<QgsHueSaturationFilter *>( interface ) ) role =
HueSaturationRole;
140 else if ( dynamic_cast<QgsRasterProjector *>( interface ) ) role =
ProjectorRole;
141 else if ( dynamic_cast<QgsRasterNuller *>( interface ) ) role =
NullerRole;
143 QgsDebugMsgLevel( QStringLiteral(
"%1 role = %2" ).arg(
typeid( *interface ).name() ).arg( role ), 4 );
149 Role role = interfaceRole( interface );
151 mRoleMap.insert( role, idx );
156 Role role = interfaceRole( interface );
158 mRoleMap.remove( role );
163 if ( !interface )
return false;
165 QgsDebugMsgLevel( QStringLiteral(
"%1" ).arg(
typeid( *interface ).name() ), 4 );
166 Role role = interfaceRole( interface );
172 if ( mRoleMap.contains( role ) )
176 return replace( mRoleMap.value( role ), interface );
199 idx = providerIdx + 1;
203 idx = std::max( providerIdx, rendererIdx ) + 1;
207 idx = std::max( std::max( providerIdx, rendererIdx ), brightnessIdx ) + 1;
211 idx = std::max( std::max( std::max( providerIdx, rendererIdx ), brightnessIdx ), hueSaturationIdx ) + 1;
215 idx = std::max( std::max( std::max( std::max( providerIdx, rendererIdx ), brightnessIdx ), hueSaturationIdx ), resamplerIdx ) + 1;
218 return insert( idx, interface );
224 if ( mRoleMap.contains( role ) )
226 return mInterfaces.value( mRoleMap.value( role ) );
270 if ( !checkBounds( idx ) )
return false;
274 QVector<QgsRasterInterface *> interfaces = mInterfaces;
276 interfaces.remove( idx );
277 bool success =
false;
278 if ( connect( interfaces ) )
281 unsetRole( mInterfaces.at( idx ) );
282 delete mInterfaces.at( idx );
283 mInterfaces.remove( idx );
288 connect( mInterfaces );
294 if ( !interface )
return false;
296 return remove( mInterfaces.indexOf( interface ) );
301 QgsDebugMsgLevel( QStringLiteral(
"idx = %1 on = %2" ).arg( idx ).arg( on ), 4 );
302 if ( !checkBounds( idx ) )
return false;
306 bool onOrig = mInterfaces.at( idx )->on();
308 if ( onOrig == on )
return true;
310 mInterfaces.at( idx )->setOn( on );
312 bool success = connect( mInterfaces );
314 mInterfaces.at( idx )->setOn( onOrig );
315 connect( mInterfaces );
321 QgsDebugMsgLevel( QStringLiteral(
"idx = %1 on = %2" ).arg( idx ).arg( on ), 4 );
322 if ( !checkBounds( idx ) )
return false;
324 bool onOrig = mInterfaces.at( idx )->on();
326 if ( onOrig == on )
return true;
328 mInterfaces.at( idx )->setOn( on );
330 if ( connect( mInterfaces ) )
return true;
332 mInterfaces.at( idx )->setOn( onOrig );
333 connect( mInterfaces );
338 bool QgsRasterPipe::checkBounds(
int idx )
const 340 return !( idx < 0 || idx >= mInterfaces.size() );
Base class for processing modules.
QgsRasterNuller * nuller() const
QgsBrightnessContrastFilter * brightnessFilter() const
Raster pipe that deals with null values.
bool insert(int idx, QgsRasterInterface *interface)
Try to insert interface at specified index and connect if connection would fail, the interface is not...
Resample filter pipe for rasters.
bool replace(int idx, QgsRasterInterface *interface)
Try to replace interface at specified index and connect if connection would fail, the interface is no...
#define QgsDebugMsgLevel(str, level)
QgsRasterDataProvider * provider() const
QgsRasterProjector * projector() const
Base class for processing filters like renderers, reprojector, resampler etc.
QgsRasterProjector implements approximate projection support for it calculates grid of points in sour...
bool canSetOn(int idx, bool on)
Test if interface at index may be switched on/off.
bool set(QgsRasterInterface *interface)
Insert a new known interface in default place or replace interface of the same role if it already exi...
bool remove(int idx)
Remove and delete interface at given index if possible.
bool setOn(int idx, bool on)
Set interface at index on/off Returns true on success.
virtual QgsRasterInterface * clone() const =0
Clone itself, create deep copy.
Brightness/contrast filter pipe for rasters.
Color and saturation filter pipe for rasters.
QgsHueSaturationFilter * hueSaturationFilter() const
QgsRasterRenderer * renderer() const
QgsRasterResampleFilter * resampleFilter() const
Raster renderer pipe that applies colors to a raster.
Base class for raster data providers.
QgsRasterPipe()=default
Constructor for QgsRasterPipe.