31 for (
int i = 0; i < thePipe.
size(); i++ )
36 Role role = interfaceRole( clone );
40 clone->setInput( mInterfaces.
at( i - 1 ) );
42 mInterfaces.
append( clone );
45 mRoleMap.
insert( role, i );
61 for (
int i = 1; i < theInterfaces.
size(); i++ )
63 if ( ! theInterfaces[i]->setInput( theInterfaces[i-1] ) )
68 QgsDebugMsg(
QString(
"cannot connect %1 to %2" ).arg(
typeid( a ).name(),
typeid( b ).name() ) );
78 QgsDebugMsg(
QString(
"insert %1 at %2" ).arg(
typeid( *theInterface ).name() ).arg( idx ) );
79 if ( idx > mInterfaces.
size() )
81 idx = mInterfaces.
size();
87 interfaces.
insert( idx, theInterface );
89 if ( connect( interfaces ) )
92 mInterfaces.
insert( idx, theInterface );
93 setRole( theInterface, idx );
98 connect( mInterfaces );
104 if ( !theInterface )
return false;
106 QgsDebugMsg(
QString(
"replace by %1 at %2" ).arg(
typeid( *theInterface ).name() ).arg( idx ) );
107 if ( !checkBounds( idx ) )
return false;
113 interfaces[idx] = theInterface;
114 bool success =
false;
115 if ( connect( interfaces ) )
118 delete mInterfaces[idx];
119 mInterfaces[idx] = theInterface;
120 setRole( theInterface, idx );
125 connect( mInterfaces );
132 if ( dynamic_cast<QgsRasterDataProvider *>( interface ) ) role =
ProviderRole;
133 else if ( dynamic_cast<QgsRasterRenderer *>( interface ) ) role =
RendererRole;
134 else if ( dynamic_cast<QgsRasterResampleFilter *>( interface ) ) role =
ResamplerRole;
135 else if ( dynamic_cast<QgsBrightnessContrastFilter *>( interface ) ) role =
BrightnessRole;
136 else if ( dynamic_cast<QgsHueSaturationFilter *>( interface ) ) role =
HueSaturationRole;
137 else if ( dynamic_cast<QgsRasterProjector *>( interface ) ) role =
ProjectorRole;
138 else if ( dynamic_cast<QgsRasterNuller *>( interface ) ) role =
NullerRole;
140 QgsDebugMsg(
QString(
"%1 role = %2" ).arg(
typeid( *interface ).name() ).arg( role ) );
146 Role role = interfaceRole( theInterface );
148 mRoleMap.
insert( role, idx );
153 Role role = interfaceRole( theInterface );
160 if ( !theInterface )
return false;
163 Role role = interfaceRole( theInterface );
196 idx = providerIdx + 1;
200 idx = qMax( providerIdx, rendererIdx ) + 1;
204 idx = qMax( qMax( providerIdx, rendererIdx ), brightnessIdx ) + 1;
208 idx = qMax( qMax( qMax( providerIdx, rendererIdx ), brightnessIdx ), hueSaturationIdx ) + 1;
212 idx = qMax( qMax( qMax( qMax( providerIdx, rendererIdx ), brightnessIdx ), hueSaturationIdx ), resamplerIdx ) + 1;
215 return insert( idx, theInterface );
223 return mInterfaces.
value( mRoleMap.
value( role ) );
267 if ( !checkBounds( idx ) )
return false;
274 bool success =
false;
275 if ( connect( interfaces ) )
278 unsetRole( mInterfaces[idx] );
279 delete mInterfaces[idx];
280 mInterfaces.
remove( idx );
285 connect( mInterfaces );
291 if ( !theInterface )
return false;
293 return remove( mInterfaces.
indexOf( theInterface ) );
299 if ( !checkBounds( idx ) )
return false;
303 bool onOrig = mInterfaces[idx]->on();
305 if ( onOrig == on )
return true;
307 mInterfaces[idx]->setOn( on );
309 bool success = connect( mInterfaces );
311 mInterfaces[idx]->setOn( onOrig );
312 connect( mInterfaces );
319 if ( !checkBounds( idx ) )
return false;
321 bool onOrig = mInterfaces[idx]->on();
323 if ( onOrig == on )
return true;
325 mInterfaces[idx]->setOn( on );
327 if ( connect( mInterfaces ) )
return true;
329 mInterfaces[idx]->setOn( onOrig );
330 connect( mInterfaces );
335 bool QgsRasterPipe::checkBounds(
int idx )
const
337 if ( idx < 0 || idx >= mInterfaces.
size() )
return false;
Base class for processing modules.
QgsRasterNuller * nuller() const
bool contains(const Key &key) const
void append(const T &value)
QgsBrightnessContrastFilter * brightnessFilter() const
int indexOf(const T &value, int from) const
Raster pipe that deals with null values.
void insert(int i, const T &value)
Resample filter pipe for rasters.
QgsRasterDataProvider * provider() const
QgsRasterProjector * projector() const
Base class for processing filters like renderers, reprojector, resampler etc.
bool canSetOn(int idx, bool on)
Test if interface at index may be swithed on/off.
const T & at(int i) const
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.
bool insert(int idx, QgsRasterInterface *theInterface)
Try to insert interface at specified index and connect if connection would fail, the interface is not...
iterator insert(const Key &key, const T &value)
QgsHueSaturationFilter * hueSaturationFilter() const
bool replace(int idx, QgsRasterInterface *theInterface)
Try to replace interface at specified index and connect if connection would fail, the interface is no...
QgsRasterRenderer * renderer() const
bool set(QgsRasterInterface *theInterface)
Insert a new known interface in default place or replace interface of the same role if it already exi...
QgsRasterResampleFilter * resampleFilter() const
Raster renderer pipe that applies colors to a raster.
const T value(const Key &key) const
Base class for raster data providers.
int remove(const Key &key)