QGIS API Documentation 3.43.0-Master (e737cc10456)
qgsprocessingmodelalgorithm.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsprocessingmodelalgorithm.h
3 -----------------------------
4 begin : June 2017
5 copyright : (C) 2017 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#ifndef QGSPROCESSINGMODELALGORITHM_H
19#define QGSPROCESSINGMODELALGORITHM_H
20
21#include "qgis_core.h"
22#include "qgis.h"
29
31
37class CORE_EXPORT QgsProcessingModelAlgorithm : public QgsProcessingAlgorithm
38{
39 Q_GADGET
40
41 public:
42
46 QgsProcessingModelAlgorithm( const QString &name = QString(), const QString &group = QString(), const QString &groupId = QString() );
47
48 void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override; //#spellok
49
51 QString name() const override;
52 QString displayName() const override;
53 QString group() const override;
54 QString groupId() const override;
55 QIcon icon() const override;
56 QString svgIconPath() const override;
57 QString shortHelpString() const override;
58 QString shortDescription() const override;
59 QString helpUrl() const override;
60
61 bool canExecute( QString *errorMessage SIP_OUT = nullptr ) const override;
62 QString asPythonCommand( const QVariantMap &parameters, QgsProcessingContext &context ) const override;
63 QgsExpressionContext createExpressionContext( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeatureSource *source = nullptr ) const override;
64
69 void setName( const QString &name );
70
75 void setGroup( const QString &group );
76
84 bool validate( QStringList &issues SIP_OUT ) const;
85
93 QMap<QString, QgsProcessingModelChildAlgorithm> childAlgorithms() const;
94
104 void setChildAlgorithms( const QMap<QString, QgsProcessingModelChildAlgorithm> &childAlgorithms );
105
112 void setChildAlgorithm( const QgsProcessingModelChildAlgorithm &algorithm );
113
124 QString addChildAlgorithm( QgsProcessingModelChildAlgorithm &algorithm );
125
132 QgsProcessingModelChildAlgorithm &childAlgorithm( const QString &id );
133
141 bool removeChildAlgorithm( const QString &id );
142
150 void deactivateChildAlgorithm( const QString &id );
151
158 bool activateChildAlgorithm( const QString &id );
159
170 QSet< QString > dependentChildAlgorithms( const QString &childId, const QString &conditionalBranch = QString() ) const;
171
177 QSet< QString > dependsOnChildAlgorithms( const QString &childId ) const;
178
184 QList< QgsProcessingModelChildDependency > availableDependenciesForChildAlgorithm( const QString &childId ) const;
185
195 bool validateChildAlgorithm( const QString &childId, QStringList &issues SIP_OUT ) const;
196
203 void addModelParameter( QgsProcessingParameterDefinition *definition SIP_TRANSFER, const QgsProcessingModelParameter &component );
204
211 void updateModelParameter( QgsProcessingParameterDefinition *definition SIP_TRANSFER );
212
219 void removeModelParameter( const QString &name );
220
228 void changeParameterName( const QString &oldName, const QString &newName );
229
235 bool childAlgorithmsDependOnParameter( const QString &name ) const;
236
243 bool otherParametersDependOnParameter( const QString &name ) const;
244
251 QMap<QString, QgsProcessingModelParameter> parameterComponents() const;
252
261 void setParameterComponents( const QMap<QString, QgsProcessingModelParameter> &parameterComponents );
262
270 void setParameterComponent( const QgsProcessingModelParameter &component );
271
279 QgsProcessingModelParameter &parameterComponent( const QString &name );
280
287 QList< QgsProcessingModelParameter > orderedParameters() const;
288
298 void setParameterOrder( const QStringList &order );
299
306 QList< QgsProcessingModelOutput > orderedOutputs() const;
307
317 void setOutputOrder( const QStringList &order );
318
325 QString outputGroup() const;
326
333 void setOutputGroup( const QString &group );
334
340 void updateDestinationParameters();
341
350 void addGroupBox( const QgsProcessingModelGroupBox &groupBox );
351
358 QList< QgsProcessingModelGroupBox > groupBoxes() const;
359
367 void removeGroupBox( const QString &uuid );
368
373 bool toFile( const QString &path ) const;
374
379 bool fromFile( const QString &path );
380
388 QVariant toVariant() const;
389
397 bool loadVariant( const QVariant &variant );
398
404 QVariantMap &helpContent() { return mHelpContent; }
405
411 SIP_SKIP QVariantMap helpContent() const;
412
418 void setHelpContent( const QVariantMap &contents );
419
424 QString sourceFilePath() const;
425
430 void setSourceFilePath( const QString &path );
431
440 bool modelNameMatchesFilePath() const;
441
449 QStringList asPythonCode( QgsProcessing::PythonOutputType outputType, int indentSize ) const;
450
459 QList< QgsProcessingModelChildParameterSource > availableSourcesForChild( const QString &childId, const QgsProcessingParameterDefinition *param ) const;
460
471 QList< QgsProcessingModelChildParameterSource > availableSourcesForChild( const QString &childId, const QStringList &parameterTypes = QStringList(),
472 const QStringList &outputTypes = QStringList(), const QList< int > &dataTypes = QList< int >() ) const;
473
478 class CORE_EXPORT VariableDefinition
479 {
480 public:
481
486 VariableDefinition( const QVariant &value = QVariant(), const QgsProcessingModelChildParameterSource &source = QgsProcessingModelChildParameterSource::fromStaticValue( QVariant() ), const QString &description = QString() )
487 : value( value )
488 , source( source )
489 , description( description )
490 {}
491
493 QVariant value;
494
496 QgsProcessingModelChildParameterSource source;
497
499 QString description;
500 };
501
515 QMap< QString, QgsProcessingModelAlgorithm::VariableDefinition > variablesForChildAlgorithm( const QString &childId, QgsProcessingContext *context = nullptr, const QVariantMap &modelParameters = QVariantMap(),
516 const QVariantMap &results = QVariantMap() ) const;
517
522 QgsExpressionContextScope *createExpressionContextScopeForChildAlgorithm( const QString &childId, QgsProcessingContext &context, const QVariantMap &modelParameters = QVariantMap(),
523 const QVariantMap &results = QVariantMap() ) const SIP_FACTORY;
524
534 QVariantMap variables() const;
535
545 void setVariables( const QVariantMap &variables );
546
558 QVariantMap designerParameterValues() const;
559
571 void setDesignerParameterValues( const QVariantMap &values ) { mDesignerParameterValues = values; }
572
578 const QgsProcessingParameterDefinition *modelParameterFromChildIdAndOutputName( const QString &childId, const QString &childOutputName ) const;
579
587 static QString safeName( const QString &name, bool capitalize = false );
588
589#ifndef SIP_RUN
590
592 enum class InternalVersion
593 {
594 Version1,
595 Version2,
596 };
597 Q_ENUM( InternalVersion )
598
599#endif
600
601 protected:
602
604
605 QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override SIP_THROW( QgsProcessingException );
606
607 private:
608
609 InternalVersion mInternalVersion = InternalVersion::Version2;
610
611 QString mModelName;
612 QString mModelGroup;
613 QString mModelGroupId;
614
615 QMap< QString, QgsProcessingModelChildAlgorithm > mChildAlgorithms;
616
618 QMap< QString, QgsProcessingModelParameter > mParameterComponents;
619
620 QVariantMap mHelpContent;
621
623 QString mSourceFile;
624
625 QVariantMap mResults;
626
627 QVariantMap mVariables;
628
629 QVariantMap mDesignerParameterValues;
630
631 QMap< QString, QgsProcessingModelGroupBox > mGroupBoxes;
632
633 QStringList mParameterOrder;
634 QStringList mOutputOrder;
635 QString mOutputGroup;
636
637 void dependsOnChildAlgorithmsRecursive( const QString &childId, QSet<QString> &depends ) const;
638 void dependentChildAlgorithmsRecursive( const QString &childId, QSet<QString> &depends, const QString &branch ) const;
639
640 QVariantMap parametersForChildAlgorithm( const QgsProcessingModelChildAlgorithm &child, const QVariantMap &modelParameters, const QVariantMap &results, const QgsExpressionContext &expressionContext, QString &error, const QgsProcessingContext *context = nullptr ) const;
641
646 bool childOutputIsRequired( const QString &childId, const QString &outputName ) const;
647
657 static bool vectorOutputIsCompatibleType( const QList<int> &acceptableDataTypes, Qgis::ProcessingSourceType outputType );
658
662 void reattachAlgorithms() const;
663
664 friend class TestQgsProcessingModelAlgorithm;
665};
666
668
669#endif // QGSPROCESSINGMODELALGORITHM_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:54
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
Definition qgis.h:3476
Single scope for storing variables and functions for use within a QgsExpressionContext.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Abstract base class for processing algorithms.
virtual QgsProcessingAlgorithm * createInstance() const =0
Creates a new instance of the algorithm class.
virtual QString group() const
Returns the name of the group this algorithm belongs to.
virtual QString groupId() const
Returns the unique ID of the group this algorithm belongs to.
virtual QString helpUrl() const
Returns a url pointing to the algorithm's help page.
virtual QIcon icon() const
Returns an icon for the algorithm.
virtual QString shortHelpString() const
Returns a localised short helper string for the algorithm.
virtual Qgis::ProcessingAlgorithmFlags flags() const
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
virtual QString shortDescription() const
Returns an optional translated short description of the algorithm.
virtual QString displayName() const =0
Returns the translated algorithm name, which should be used for any user-visible display of the algor...
virtual QgsExpressionContext createExpressionContext(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeatureSource *source=nullptr) const
Creates an expression context relating to the algorithm.
virtual QString svgIconPath() const
Returns a path to an SVG version of the algorithm's icon.
virtual void initAlgorithm(const QVariantMap &configuration=QVariantMap())=0
Initializes the algorithm using the specified configuration.
virtual QString asPythonCommand(const QVariantMap &parameters, QgsProcessingContext &context) const
Returns a Python command string which can be executed to run the algorithm using the specified parame...
virtual bool canExecute(QString *errorMessage=nullptr) const
Returns true if the algorithm can execute.
virtual QString name() const =0
Returns the algorithm name, used for identifying the algorithm.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
QgsFeatureSource subclass which proxies methods to an underlying QgsFeatureSource,...
Base class for providing feedback from a processing algorithm.
Base class for the definition of processing parameters.
PythonOutputType
Available Python output types.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into allowing algorithms to be written in pure substantial changes are required in order to port existing x Processing algorithms for QGIS x The most significant changes are outlined not GeoAlgorithm For algorithms which operate on features one by consider subclassing the QgsProcessingFeatureBasedAlgorithm class This class allows much of the boilerplate code for looping over features from a vector layer to be bypassed and instead requires implementation of a processFeature method Ensure that your algorithm(or algorithm 's parent class) implements the new pure virtual createInstance(self) call
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:76
#define SIP_THROW(name,...)
Definition qgis_sip.h:203