QGIS API Documentation 4.3.0-Master (52aa6503bed)
Loading...
Searching...
No Matches
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.h"
22#include "qgis_core.h"
29
31
37class CORE_EXPORT QgsProcessingModelAlgorithm : public QgsProcessingAlgorithm
38{
39 Q_GADGET
40
41 public:
45 QgsProcessingModelAlgorithm( const QString &name = QString(), const QString &group = QString(), const QString &groupId = QString() );
46
47 void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override; //#spellok
48
50 QString name() const override;
51 QString displayName() const override;
52 QString group() const override;
53 QString groupId() const override;
54 QIcon icon() const override;
55 QString svgIconPath() const override;
56 QString shortHelpString() const override;
57 QString shortDescription() const override;
58 QString helpUrl() const override;
59
60 bool canExecute( QString *errorMessage SIP_OUT = nullptr ) const override;
61 QString asPythonCommand( const QVariantMap &parameters, QgsProcessingContext &context ) const override;
62 QgsExpressionContext createExpressionContext( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeatureSource *source = nullptr ) const override;
63
68 void setName( const QString &name );
69
74 void setGroup( const QString &group );
75
83 bool validate( QStringList &issues SIP_OUT ) const;
84
92 QMap<QString, QgsProcessingModelChildAlgorithm> childAlgorithms() const;
93
103 void setChildAlgorithms( const QMap<QString, QgsProcessingModelChildAlgorithm> &childAlgorithms );
104
111 void setChildAlgorithm( const QgsProcessingModelChildAlgorithm &algorithm );
112
123 QString addChildAlgorithm( QgsProcessingModelChildAlgorithm &algorithm );
124
131 QgsProcessingModelChildAlgorithm &childAlgorithm( const QString &id );
132
140 bool removeChildAlgorithm( const QString &id );
141
149 void deactivateChildAlgorithm( const QString &id );
150
157 bool activateChildAlgorithm( const QString &id );
158
169 QSet< QString > dependentChildAlgorithms( const QString &childId, const QString &conditionalBranch = QString() ) const;
170
176 QSet< QString > dependsOnChildAlgorithms( const QString &childId ) const;
177
183 QList< QgsProcessingModelChildDependency > availableDependenciesForChildAlgorithm( const QString &childId ) const;
184
194 bool validateChildAlgorithm( const QString &childId, QStringList &issues SIP_OUT ) const;
195
202 void addModelParameter( QgsProcessingParameterDefinition *definition SIP_TRANSFER, const QgsProcessingModelParameter &component );
203
210 void updateModelParameter( QgsProcessingParameterDefinition *definition SIP_TRANSFER );
211
218 void removeModelParameter( const QString &name );
219
227 void changeParameterName( const QString &oldName, const QString &newName );
228
234 bool childAlgorithmsDependOnParameter( const QString &name ) const;
235
242 bool otherParametersDependOnParameter( const QString &name ) const;
243
250 QMap<QString, QgsProcessingModelParameter> parameterComponents() const;
251
260 void setParameterComponents( const QMap<QString, QgsProcessingModelParameter> &parameterComponents );
261
269 void setParameterComponent( const QgsProcessingModelParameter &component );
270
278 QgsProcessingModelParameter &parameterComponent( const QString &name );
279
286 QList< QgsProcessingModelParameter > orderedParameters() const;
287
297 void setParameterOrder( const QStringList &order );
298
305 QList< QgsProcessingModelOutput > orderedOutputs() const;
306
316 void setOutputOrder( const QStringList &order );
317
324 QString outputGroup() const;
325
332 void setOutputGroup( const QString &group );
333
339 void updateDestinationParameters();
340
349 void addGroupBox( const QgsProcessingModelGroupBox &groupBox );
350
357 QList< QgsProcessingModelGroupBox > groupBoxes() const;
358
366 void removeGroupBox( const QString &uuid );
367
372 bool toFile( const QString &path ) const;
373
378 bool fromFile( const QString &path );
379
387 QVariant toVariant() const;
388
396 bool loadVariant( const QVariant &variant );
397
405 QString modelQgisVersion() const { return mModelQgisVersion; }
406
412 QVariantMap &helpContent() { return mHelpContent; }
413
419 SIP_SKIP QVariantMap helpContent() const;
420
426 void setHelpContent( const QVariantMap &contents );
427
432 QString sourceFilePath() const;
433
438 void setSourceFilePath( const QString &path );
439
448 bool modelNameMatchesFilePath() const;
449
457 QStringList asPythonCode( QgsProcessing::PythonOutputType outputType, int indentSize ) const;
458
467 QList< QgsProcessingModelChildParameterSource > availableSourcesForChild( const QString &childId, const QgsProcessingParameterDefinition *param ) const;
468
479 QList< QgsProcessingModelChildParameterSource > availableSourcesForChild(
480 const QString &childId, const QStringList &parameterTypes = QStringList(), const QStringList &outputTypes = QStringList(), const QList< int > &dataTypes = QList< int >()
481 ) const;
482
487 class CORE_EXPORT VariableDefinition
488 {
489 public:
494 VariableDefinition(
495 const QVariant &value = QVariant(),
496 const QgsProcessingModelChildParameterSource &source = QgsProcessingModelChildParameterSource::fromStaticValue( QVariant() ),
497 const QString &description = QString()
498 )
499 : value( value )
500 , source( source )
501 , description( description )
502 {}
503
505 QVariant value;
506
508 QgsProcessingModelChildParameterSource source;
509
511 QString description;
512 };
513
527 QMap< QString, QgsProcessingModelAlgorithm::VariableDefinition > variablesForChildAlgorithm(
528 const QString &childId, QgsProcessingContext *context = nullptr, const QVariantMap &modelParameters = QVariantMap(), const QVariantMap &results = QVariantMap()
529 ) const;
530
535 std::unique_ptr<QgsExpressionContextScope> createExpressionContextScopeForChildAlgorithm(
536 const QString &childId, QgsProcessingContext &context, const QVariantMap &modelParameters = QVariantMap(), const QVariantMap &results = QVariantMap()
537 ) const;
538
548 QVariantMap variables() const;
549
559 void setVariables( const QVariantMap &variables );
560
572 QVariantMap designerParameterValues() const;
573
585 void setDesignerParameterValues( const QVariantMap &values ) { mDesignerParameterValues = values; }
586
592 const QgsProcessingParameterDefinition *modelParameterFromChildIdAndOutputName( const QString &childId, const QString &childOutputName ) const;
593
601 static QString safeName( const QString &name, bool capitalize = false );
602
603
604#ifndef SIP_RUN
605
607 enum class InternalVersion
608 {
609 Version1,
610 Version2,
611 };
612 Q_ENUM( InternalVersion )
613
614#endif
615
616 protected:
617 QgsProcessingAlgorithm *createInstance() const override SIP_FACTORY;
618
619 QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override SIP_THROW( QgsProcessingException );
620
621 private:
622 InternalVersion mInternalVersion = InternalVersion::Version2;
623
624 QString mModelName;
625 QString mModelGroup;
626 QString mModelGroupId;
627 QString mModelQgisVersion;
628
629 QMap< QString, QgsProcessingModelChildAlgorithm > mChildAlgorithms;
630
632 QMap< QString, QgsProcessingModelParameter > mParameterComponents;
633
634 QVariantMap mHelpContent;
635
637 QString mSourceFile;
638
639 QVariantMap mResults;
640
641 QVariantMap mVariables;
642
643 QVariantMap mDesignerParameterValues;
644
645 QMap< QString, QgsProcessingModelGroupBox > mGroupBoxes;
646
647 QStringList mParameterOrder;
648 QStringList mOutputOrder;
649 QString mOutputGroup;
650
651 void dependsOnChildAlgorithmsRecursive( const QString &childId, QSet<QString> &depends ) const;
652 void dependentChildAlgorithmsRecursive( const QString &childId, QSet<QString> &depends, const QString &branch ) const;
653
654 QVariantMap parametersForChildAlgorithm(
655 const QgsProcessingModelChildAlgorithm &child,
656 const QVariantMap &modelParameters,
657 const QVariantMap &results,
658 const QgsExpressionContext &expressionContext,
659 QString &error,
660 const QgsProcessingContext *context = nullptr
661 ) const;
662
667 bool childOutputIsRequired( const QString &childId, const QString &outputName ) const;
668
678 static bool vectorOutputIsCompatibleType( const QList<int> &acceptableDataTypes, Qgis::ProcessingSourceType outputType );
679
683 void reattachAlgorithms() const;
684
685 friend class TestQgsProcessingModelAlgorithm;
686};
687
689
690#endif // QGSPROCESSINGMODELALGORITHM_H
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
Definition qgis.h:3848
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.
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:138
#define SIP_TRANSFER
Definition qgis_sip.h:35
#define SIP_OUT
Definition qgis_sip.h:57
#define SIP_FACTORY
Definition qgis_sip.h:83
#define SIP_THROW(name,...)
Definition qgis_sip.h:215