23QString QgsFilterAlgorithm::name()
const
25 return QStringLiteral(
"filter" );
28QString QgsFilterAlgorithm::displayName()
const
30 return QObject::tr(
"Feature filter" );
33QStringList QgsFilterAlgorithm::tags()
const
35 return QObject::tr(
"filter,proxy,redirect,route" ).split(
',' );
38QString QgsFilterAlgorithm::group()
const
40 return QObject::tr(
"Modeler tools" );
43QString QgsFilterAlgorithm::groupId()
const
45 return QStringLiteral(
"modelertools" );
48QgsProcessingAlgorithm::Flags QgsFilterAlgorithm::flags()
const
50 return FlagHideFromToolbox;
53QString QgsFilterAlgorithm::shortHelpString()
const
55 return QObject::tr(
"This algorithm filters features from the input layer and redirects them to one or several outputs." );
58QgsFilterAlgorithm *QgsFilterAlgorithm::createInstance()
const
60 return new QgsFilterAlgorithm();
63QgsFilterAlgorithm::~QgsFilterAlgorithm()
65 qDeleteAll( mOutputs );
68void QgsFilterAlgorithm::initAlgorithm(
const QVariantMap &configuration )
72 const QVariantList outputs = configuration.value( QStringLiteral(
"outputs" ) ).toList();
73 for (
const QVariant &output : outputs )
75 const QVariantMap outputDef = output.toMap();
76 const QString name = QStringLiteral(
"OUTPUT_%1" ).arg( outputDef.value( QStringLiteral(
"name" ) ).toString() );
78 QgsProcessingParameterDefinition::Flags flags = QgsProcessingParameterDefinition::Flags();
80 if ( outputDef.value( QStringLiteral(
"isModelOutput" ) ).toBool() )
83 addParameter( outputParam );
84 mOutputs.append(
new Output( name, outputDef.value( QStringLiteral(
"expression" ) ).toString() ) );
91 std::unique_ptr< QgsProcessingFeatureSource > source( parameterAsSource( parameters, QStringLiteral(
"INPUT" ), context ) );
95 QgsExpressionContext expressionContext = createExpressionContext( parameters, context, source.get() );
96 for ( Output *output : std::as_const( mOutputs ) )
98 output->sink.reset( parameterAsSink( parameters, output->name, context, output->destinationIdentifier, source->fields(), source->wkbType(), source->sourceCrs() ) );
101 output->expression.prepare( &expressionContext );
104 long count = source->featureCount();
109 double step = count > 0 ? 100.0 / count : 1;
121 for ( Output *output : std::as_const( mOutputs ) )
123 if ( output->expression.evaluate( &expressionContext ).toBool() )
135 for (
const Output *output : std::as_const( mOutputs ) )
137 outputs.insert( output->name, output->destinationIdentifier );
139 qDeleteAll( mOutputs );
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)
This class 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.
@ FlagSkipGeometryValidityChecks
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
Base class for providing feedback from a processing algorithm.
@ FlagIsModelOutput
Destination parameter is final output. The parameter name will be used.
@ FlagHidden
Parameter is hidden and should not be shown to users.
void setFlags(Flags 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.