24QString QgsFilterAlgorithm::name()
const
26 return QStringLiteral(
"filter" );
29QString QgsFilterAlgorithm::displayName()
const
31 return QObject::tr(
"Feature filter" );
34QStringList QgsFilterAlgorithm::tags()
const
36 return QObject::tr(
"filter,proxy,redirect,route" ).split(
',' );
39QString QgsFilterAlgorithm::group()
const
41 return QObject::tr(
"Modeler tools" );
44QString QgsFilterAlgorithm::groupId()
const
46 return QStringLiteral(
"modelertools" );
54QString QgsFilterAlgorithm::shortHelpString()
const
56 return QObject::tr(
"This algorithm filters features from the input layer and redirects them to one or more outputs." );
59QString QgsFilterAlgorithm::shortDescription()
const
61 return QObject::tr(
"Filters features from the input layer and redirects them to one or more outputs." );
64QgsFilterAlgorithm *QgsFilterAlgorithm::createInstance()
const
66 return new QgsFilterAlgorithm();
69QgsFilterAlgorithm::~QgsFilterAlgorithm()
71 qDeleteAll( mOutputs );
74void QgsFilterAlgorithm::initAlgorithm(
const QVariantMap &configuration )
78 const QVariantList outputs = configuration.value( QStringLiteral(
"outputs" ) ).toList();
79 for (
const QVariant &output : outputs )
81 const QVariantMap outputDef = output.toMap();
82 const QString name = QStringLiteral(
"OUTPUT_%1" ).arg( outputDef.value( QStringLiteral(
"name" ) ).toString() );
86 if ( outputDef.value( QStringLiteral(
"isModelOutput" ) ).toBool() )
89 addParameter( outputParam );
90 mOutputs.append(
new Output( name, outputDef.value( QStringLiteral(
"expression" ) ).toString() ) );
97 std::unique_ptr<QgsProcessingFeatureSource> source( parameterAsSource( parameters, QStringLiteral(
"INPUT" ), context ) );
101 QgsExpressionContext expressionContext = createExpressionContext( parameters, context, source.get() );
102 for ( Output *output : std::as_const( mOutputs ) )
104 output->sink.reset( parameterAsSink( parameters, output->name, context, output->destinationIdentifier, source->fields(), source->wkbType(), source->sourceCrs() ) );
107 output->expression.prepare( &expressionContext );
110 long count = source->featureCount();
115 double step = count > 0 ? 100.0 / count : 1;
127 for ( Output *output : std::as_const( mOutputs ) )
129 if ( output->expression.evaluate( &expressionContext ).toBool() )
141 for (
const Output *output : std::as_const( mOutputs ) )
143 outputs.insert( output->name, output->destinationIdentifier );
145 qDeleteAll( mOutputs );
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
QFlags< ProcessingParameterFlag > ProcessingParameterFlags
Flags which dictate the behavior of Processing parameters.
@ SkipGeometryValidityChecks
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
@ HideFromToolbox
Algorithm should be hidden from the toolbox.
@ Hidden
Parameter is hidden and should not be shown to users.
@ IsModelOutput
Destination parameter is final output. The parameter name will be used.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
Fetch next feature and stores in f, returns true on success.
Wraps a request for features to a vector layer (or directly its vector data provider).
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
bool isCanceled() const
Tells whether the operation has been canceled already.
void setProgress(double progress)
Sets the current progress for the feedback object.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
Base class for providing feedback from a processing algorithm.
void setFlags(Qgis::ProcessingParameterFlags flags)
Sets the flags associated with the parameter.
A feature sink output for processing algorithms.
An input feature source (such as vector layers) parameter for processing algorithms.