23 QString QgsFilterAlgorithm::name()
const
25 return QStringLiteral(
"filter" );
28 QString QgsFilterAlgorithm::displayName()
const
30 return QObject::tr(
"Feature filter" );
33 QStringList QgsFilterAlgorithm::tags()
const
35 return QObject::tr(
"filter,proxy,redirect,route" ).split(
',' );
38 QString QgsFilterAlgorithm::group()
const
40 return QObject::tr(
"Modeler tools" );
43 QString QgsFilterAlgorithm::groupId()
const
45 return QStringLiteral(
"modelertools" );
48 QgsProcessingAlgorithm::Flags QgsFilterAlgorithm::flags()
const
50 return FlagHideFromToolbox;
53 QString QgsFilterAlgorithm::shortHelpString()
const
55 return QObject::tr(
"This algorithm filters features from the input layer and redirects them to one or several outputs." );
58 QgsFilterAlgorithm *QgsFilterAlgorithm::createInstance()
const
60 return new QgsFilterAlgorithm();
63 QgsFilterAlgorithm::~QgsFilterAlgorithm()
65 qDeleteAll( mOutputs );
68 void 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 SIP_HOLDGIL
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.