@@ -75,7 +75,11 @@ void QgsFilterAlgorithm::initAlgorithm( const QVariantMap &configuration )
7575 const QVariantMap outputDef = output.toMap ();
7676 const QString name = QStringLiteral ( " OUTPUT_%1" ).arg ( outputDef.value ( QStringLiteral ( " name" ) ).toString () );
7777 QgsProcessingParameterFeatureSink *outputParam = new QgsProcessingParameterFeatureSink ( name, outputDef.value ( QStringLiteral ( " name" ) ).toString () );
78- outputParam->setFlags ( QgsProcessingParameterDefinition::FlagHidden );
78+ QgsProcessingParameterDefinition::Flags flags = QgsProcessingParameterDefinition::Flags ();
79+ flags |= QgsProcessingParameterDefinition::FlagHidden;
80+ if ( outputDef.value ( QStringLiteral ( " isModelOutput" ) ).toBool () )
81+ flags |= QgsProcessingParameterDefinition::FlagIsModelOutput;
82+ outputParam->setFlags ( flags );
7983 addParameter ( outputParam );
8084 mOutputs .append ( new Output ( name, outputDef.value ( QStringLiteral ( " expression" ) ).toString () ) );
8185 }
@@ -92,6 +96,8 @@ QVariantMap QgsFilterAlgorithm::processAlgorithm( const QVariantMap ¶meters,
9296 for ( Output *output : qgis::as_const ( mOutputs ) )
9397 {
9498 output->sink .reset ( parameterAsSink ( parameters, output->name , context, output->destinationIdentifier , source->fields (), source->wkbType (), source->sourceCrs () ) );
99+ if ( !output->sink )
100+ return QVariantMap ();
95101 output->expression .prepare ( &expressionContext );
96102 }
97103
@@ -115,7 +121,9 @@ QVariantMap QgsFilterAlgorithm::processAlgorithm( const QVariantMap ¶meters,
115121 for ( Output *output : qgis::as_const ( mOutputs ) )
116122 {
117123 if ( output->expression .evaluate ( &expressionContext ).toBool () )
124+ {
118125 output->sink ->addFeature ( f, QgsFeatureSink::FastInsert );
126+ }
119127 }
120128
121129 feedback->setProgress ( current * step );
0 commit comments