22 #include "qgsprocessingmodelalgorithm.h"
44 for ( QVariantMap::const_iterator it = customVariables.constBegin(); it != customVariables.constEnd(); ++it )
76 if ( vars.remove( name ) )
95 QString
id = values.at( 0 ).toString();
103 return c.variablesToMap();
108 return new GetLayoutItemVariables( mLayout );
121 GetLayoutMapLayerCredits(
const QgsLayout *
c )
125 <<
QgsExpressionFunction::Parameter( QStringLiteral(
"layer_name_separator" ), true, QStringLiteral(
": " ) ), QStringLiteral(
"Layout" ) )
134 QString
id = values.value( 0 ).toString();
136 if (
QgsLayoutItemMap *map = qobject_cast< QgsLayoutItemMap * >( mLayout->itemById(
id ) ) )
139 const QVariantList mapLayers =
c.variable( QStringLiteral(
"map_layers" ) ).toList();
141 const bool includeLayerNames = values.value( 1 ).toBool();
142 const QString layerNameSeparator = values.value( 2 ).toString();
145 for (
const QVariant &value : mapLayers )
147 if (
const QgsMapLayer *layer = qobject_cast< const QgsMapLayer * >( value.value< QObject * >() ) )
149 const QStringList credits = !layer->metadata().rights().isEmpty() ? layer->metadata().rights() : QStringList() << layer->attribution();
150 for (
const QString &credit : credits )
152 if ( credit.trimmed().isEmpty() )
155 const QString creditString = includeLayerNames ? layer->name() + layerNameSeparator + credit
158 if ( !res.contains( creditString ) )
171 return new GetLayoutMapLayerCredits( mLayout );
183 GetCurrentFormFieldValue( )
189 QString fieldName( values.at( 0 ).toString() );
190 const QgsFeature feat( context->
variable( QStringLiteral(
"current_feature" ) ).value<QgsFeature>() );
191 if ( fieldName.isEmpty() || ! feat.isValid( ) )
195 return feat.attribute( fieldName ) ;
200 return new GetCurrentFormFieldValue( );
213 GetCurrentParentFormFieldValue( )
219 QString fieldName( values.at( 0 ).toString() );
220 const QgsFeature feat( context->
variable( QStringLiteral(
"current_parent_feature" ) ).value<QgsFeature>() );
221 if ( fieldName.isEmpty() || ! feat.isValid( ) )
225 return feat.attribute( fieldName ) ;
230 return new GetCurrentParentFormFieldValue( );
244 GetProcessingParameterValue(
const QVariantMap ¶ms )
251 return mParams.value( values.at( 0 ).toString() );
256 return new GetProcessingParameterValue( mParams );
261 const QVariantMap mParams;
271 scope->
addFunction( QStringLiteral(
"current_value" ),
new GetCurrentFormFieldValue( ) );
273 scope->
setVariable( QStringLiteral(
"current_feature" ), formFeature,
true );
274 scope->
setVariable( QStringLiteral(
"form_mode" ), formMode,
true );
282 scope->
addFunction( QStringLiteral(
"current_parent_value" ),
new GetCurrentParentFormFieldValue( ) );
283 scope->
setVariable( QStringLiteral(
"current_parent_geometry" ), parentFormFeature.
geometry( ),
true );
284 scope->
setVariable( QStringLiteral(
"current_parent_feature" ), parentFormFeature,
true );
285 scope->
setVariable( QStringLiteral(
"parent_form_mode" ), parentFormMode,
true );
307 vars.insert( name, value );
328 if ( vars.remove( name ) )
340 const QStringList variableNames = layer->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
341 const QStringList variableValues = layer->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
344 for (
const QString &variableName : variableNames )
346 if ( varIndex >= variableValues.length() )
351 QVariant varValue = variableValues.at( varIndex );
353 scope->
setVariable( variableName, varValue,
true );
362 const QgsVectorLayer *vLayer = qobject_cast< const QgsVectorLayer * >( layer );
377 QList<QgsExpressionContextScope *> scopes;
396 QStringList variableNames = layer->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
397 QStringList variableValues = layer->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
399 variableNames << name;
400 variableValues << value.toString();
411 QStringList variableNames;
412 QStringList variableValues;
414 QVariantMap::const_iterator it = variables.constBegin();
415 for ( ; it != variables.constEnd(); ++it )
417 variableNames << it.key();
418 variableValues << it.value().toString();
469 QVariantList layersIds;
471 const QList<QgsMapLayer *> layersInMap = mapSettings.
layers();
472 layersIds.reserve( layersInMap.count() );
473 layers.reserve( layersInMap.count() );
476 layersIds << layer->id();
489 scope->
addFunction( QStringLiteral(
"is_layer_visible" ),
new GetLayerVisibility( mapSettings.
layers(), mapSettings.
scale() ) );
508 QVariantList matchList;
512 QVariantMap matchMap;
514 matchMap.insert( QStringLiteral(
"valid" ), match.isValid() );
515 matchMap.insert( QStringLiteral(
"layer" ), QVariant::fromValue<QgsWeakMapLayerPointer>(
QgsWeakMapLayerPointer( match.layer() ) ) );
516 matchMap.insert( QStringLiteral(
"feature_id" ), match.featureId() );
517 matchMap.insert( QStringLiteral(
"vertex_index" ), match.vertexIndex() );
518 matchMap.insert( QStringLiteral(
"distance" ), match.distance() );
520 matchList.append( matchMap );
550 return scope.release();
553 const QStringList variableNames = layout->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
554 const QStringList variableValues = layout->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
558 for (
const QString &variableName : variableNames )
560 if ( varIndex >= variableValues.length() )
565 QVariant varValue = variableValues.at( varIndex );
567 scope->setVariable( variableName, varValue );
583 QVariantList offsets;
593 scope->addFunction( QStringLiteral(
"item_variables" ),
new GetLayoutItemVariables( layout ) );
594 scope->addFunction( QStringLiteral(
"map_credits" ),
new GetLayoutMapLayerCredits( layout ) );
606 scope->setFeature( atlasFeature );
612 return scope.release();
621 QStringList variableNames = layout->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
622 QStringList variableValues = layout->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
624 variableNames << name;
625 variableValues << value.toString();
636 QStringList variableNames;
637 QStringList variableValues;
639 QVariantMap::const_iterator it = variables.constBegin();
640 for ( ; it != variables.constEnd(); ++it )
642 variableNames << it.key();
643 variableValues << it.value().toString();
696 const QStringList variableNames = item->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
697 const QStringList variableValues = item->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
700 for (
const QString &variableName : variableNames )
702 if ( varIndex >= variableValues.length() )
707 QVariant varValue = variableValues.at( varIndex );
742 QStringList variableNames = item->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
743 QStringList variableValues = item->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
745 variableNames << name;
746 variableValues << value.toString();
757 QStringList variableNames;
758 QStringList variableValues;
760 QVariantMap::const_iterator it = variables.constBegin();
761 for ( ; it != variables.constEnd(); ++it )
763 variableNames << it.key();
764 variableValues << it.value().toString();
778 const QStringList variableNames = frame->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
779 const QStringList variableValues = frame->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
782 for (
const QString &variableName : variableNames )
784 if ( varIndex >= variableValues.length() )
789 QVariant varValue = variableValues.at( varIndex );
803 QStringList variableNames = frame->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
804 QStringList variableValues = frame->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
806 variableNames << name;
807 variableValues << value.toString();
818 QStringList variableNames;
819 QStringList variableValues;
821 QVariantMap::const_iterator it = variables.constBegin();
822 for ( ; it != variables.constEnd(); ++it )
824 variableNames << it.key();
825 variableValues << it.value().toString();
846 scope->addFunction( QStringLiteral(
"parameter" ),
new GetProcessingParameterValue( parameters ) );
849 return scope.release();
854 return scope.release();
861 if ( !model->sourceFilePath().isEmpty() )
863 modelPath = model->sourceFilePath();
872 const QString modelFolder = !modelPath.isEmpty() ? QFileInfo( modelPath ).path() : QString();
879 const QVariantMap customVariables = model->variables();
880 for (
auto it = customVariables.constBegin(); it != customVariables.constEnd(); ++it )
885 return modelScope.release();
892 return scope.release();
909 return mUsesGeometry;
915 return mReferencedColumns;
927 QgsExpressionContextUtils::GetLayerVisibility::GetLayerVisibility(
const QList<QgsMapLayer *> &layers,
double scale )
929 , mLayers( _qgis_listRawToQPointer( layers ) )
932 for (
const auto &layer : mLayers )
934 if ( layer->hasScaleBasedVisibility() )
936 mScaleBasedVisibilityDetails[ layer ] = qMakePair( layer->minimumScale(), layer->maximumScale() );
941 QgsExpressionContextUtils::GetLayerVisibility::GetLayerVisibility()
947 if ( mLayers.isEmpty() )
952 bool isVisible =
false;
953 QgsMapLayer *layer = QgsExpressionUtils::getMapLayer( values.at( 0 ), parent );
954 if ( layer && mLayers.contains( layer ) )
957 if ( mScaleBasedVisibilityDetails.contains( layer ) && !
qgsDoubleNear( mScale, 0.0 ) )
959 if ( ( !
qgsDoubleNear( mScaleBasedVisibilityDetails[ layer ].first, 0.0 ) && mScale > mScaleBasedVisibilityDetails[ layer ].first ) ||
960 ( !
qgsDoubleNear( mScaleBasedVisibilityDetails[ layer ].second, 0.0 ) && mScale < mScaleBasedVisibilityDetails[ layer ].second ) )
972 GetLayerVisibility *func =
new GetLayerVisibility();
973 func->mLayers = mLayers;
974 func->mScale = mScale;
975 func->mScaleBasedVisibilityDetails = mScaleBasedVisibilityDetails;
static QString version()
Version string.
static QString releaseName()
Release name.
static int versionInt()
Version number used for comparing versions using the "Check QGIS Version" function.
static void setCustomVariables(const QVariantMap &customVariables)
Custom expression variables for this application.
static QString osName()
Returns a string name of the operating system QGIS is running on.
static QString platform()
Returns the QGIS platform name, e.g., "desktop" or "server".
static QVariantMap customVariables()
Custom expression variables for this application.
static QString locale()
Returns the QGIS locale.
static void setCustomVariable(const QString &name, const QVariant &value)
Set a single custom expression variable.
static QString userFullName()
Returns the user's operating system login account full display name.
static QString userLoginName()
Returns the user's operating system login account name.
QString toProj() const
Returns a Proj string representation of this CRS.
QString ellipsoidAcronym() const
Returns the ellipsoid acronym for the ellipsoid used by the CRS.
QString description() const
Returns the descriptive name of the CRS, e.g., "WGS 84" or "GDA 94 / Vicgrid94".
QString projectionAcronym() const
Returns the projection acronym for the projection used by the CRS.
QString authid() const
Returns the authority identifier for the CRS.
@ WKT_PREFERRED
Preferred format, matching the most recent WKT ISO standard. Currently an alias to WKT2_2019,...
QString toWkt(WktVariant variant=WKT1_GDAL, bool multiline=false, int indentationWidth=4) const
Returns a WKT representation of this CRS.
QgsProjOperation operation() const
Returns information about the PROJ operation associated with the coordinate reference system,...
Single scope for storing variables and functions for use within a QgsExpressionContext.
void setFields(const QgsFields &fields)
Convenience function for setting a fields for the scope.
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the scope.
void addFunction(const QString &name, QgsScopedExpressionFunction *function)
Adds a function to the scope.
void addVariable(const QgsExpressionContextScope::StaticVariable &variable)
Adds a variable into the context scope.
void setVariable(const QString &name, const QVariant &value, bool isStatic=false)
Convenience method for setting a variable in the context scope by name name and value.
static QgsExpressionContextScope * layoutItemScope(const QgsLayoutItem *item)
Creates a new scope which contains variables and functions relating to a QgsLayoutItem.
static void setLayoutMultiFrameVariable(QgsLayoutMultiFrame *frame, const QString &name, const QVariant &value)
Sets a layout multi frame context variable, with the given name and value.
static void setLayerVariable(QgsMapLayer *layer, const QString &name, const QVariant &value)
Sets a layer context variable.
static QgsExpressionContextScope * processingModelAlgorithmScope(const QgsProcessingModelAlgorithm *model, const QVariantMap ¶meters, QgsProcessingContext &context)
Creates a new scope which contains variables and functions relating to a processing model algorithm,...
static QgsExpressionContextScope * updateSymbolScope(const QgsSymbol *symbol, QgsExpressionContextScope *symbolScope=nullptr)
Updates a symbol scope related to a QgsSymbol to an expression context.
static void setProjectVariables(QgsProject *project, const QVariantMap &variables)
Sets all project context variables.
static QgsExpressionContextScope * layoutScope(const QgsLayout *layout)
Creates a new scope which contains variables and functions relating to a QgsLayout layout.
static QgsExpressionContext createFeatureBasedContext(const QgsFeature &feature, const QgsFields &fields)
Helper function for creating an expression context which contains just a feature and fields collectio...
static void removeProjectVariable(QgsProject *project, const QString &name)
Remove project context variable.
static void setLayerVariables(QgsMapLayer *layer, const QVariantMap &variables)
Sets all layer context variables.
static void setGlobalVariables(const QVariantMap &variables)
Sets all global context variables.
static void setLayoutItemVariables(QgsLayoutItem *item, const QVariantMap &variables)
Sets all layout item context variables for an item.
static void setLayoutMultiFrameVariables(QgsLayoutMultiFrame *frame, const QVariantMap &variables)
Sets all layout multiframe context variables for an frame.
static QgsExpressionContextScope * processingAlgorithmScope(const QgsProcessingAlgorithm *algorithm, const QVariantMap ¶meters, QgsProcessingContext &context)
Creates a new scope which contains variables and functions relating to a processing algorithm,...
static QgsExpressionContextScope * notificationScope(const QString &message=QString())
Creates a new scope which contains variables and functions relating to provider notifications.
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
static QgsExpressionContextScope * parentFormScope(const QgsFeature &formFeature=QgsFeature(), const QString &formMode=QString())
Creates a new scope which contains functions and variables from the current parent attribute form/tab...
static void setLayoutVariable(QgsLayout *layout, const QString &name, const QVariant &value)
Sets a layout context variable.
static QgsExpressionContextScope * formScope(const QgsFeature &formFeature=QgsFeature(), const QString &formMode=QString())
Creates a new scope which contains functions and variables from the current attribute form/table form...
static QgsExpressionContextScope * multiFrameScope(const QgsLayoutMultiFrame *frame)
Creates a new scope which contains variables and functions relating to a QgsLayoutMultiFrame.
static void setLayoutItemVariable(QgsLayoutItem *item, const QString &name, const QVariant &value)
Sets a layout item context variable, with the given name and value.
static QgsExpressionContextScope * mapToolCaptureScope(const QList< QgsPointLocator::Match > &matches)
Sets the expression context variables which are available for expressions triggered by a map tool cap...
static QgsExpressionContextScope * atlasScope(const QgsLayoutAtlas *atlas)
Creates a new scope which contains variables and functions relating to a QgsLayoutAtlas.
static void registerContextFunctions()
Registers all known core functions provided by QgsExpressionContextScope objects.
static void setLayoutVariables(QgsLayout *layout, const QVariantMap &variables)
Sets all layout context variables.
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object.
static void removeGlobalVariable(const QString &name)
Remove a global context variable.
static void setGlobalVariable(const QString &name, const QVariant &value)
Sets a global context variable.
static QList< QgsExpressionContextScope * > globalProjectLayerScopes(const QgsMapLayer *layer)
Creates a list of three scopes: global, layer's project and layer.
static void setProjectVariable(QgsProject *project, const QString &name, const QVariant &value)
Sets a project context variable.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
static const QString EXPR_SYMBOL_COLOR
Inbuilt variable name for symbol color variable.
static const QString EXPR_SYMBOL_ANGLE
Inbuilt variable name for symbol angle variable.
QVariant variable(const QString &name) const
Fetches a matching variable from the context.
A abstract base class for defining QgsExpression functions.
static bool allParamsStatic(const QgsExpressionNodeFunction *node, QgsExpression *parent, const QgsExpressionContext *context)
This will return true if all the params for the provided function node are static within the constrai...
An expression node for expression functions.
Class for parsing and evaluation of expressions (formerly called "search strings").
static bool registerFunction(QgsExpressionFunction *function, bool transferOwnership=false)
Registers a function to the expression engine.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
bool isValid() const
Returns the validity of this feature.
Container of fields for a vector layer.
A geometry is the spatial representation of a feature.
static QgsGeometry fromRect(const QgsRectangle &rect) SIP_HOLDGIL
Creates a new geometry from a QgsRectangle.
static QgsGeometry fromPointXY(const QgsPointXY &point) SIP_HOLDGIL
Creates a new geometry from a QgsPointXY object.
Class used to render QgsLayout as an atlas, by iterating over the features from an associated vector ...
QString nameForPage(int page) const
Returns the calculated name for a specified atlas page number.
QgsVectorLayer * coverageLayer() const
Returns the coverage layer used for the atlas features.
QgsLayout * layout() override
Returns the layout associated with the iterator.
bool enabled() const
Returns whether the atlas generation is enabled.
QString currentFilename() const
Returns the current feature filename.
int count() const override
Returns the number of features to iterate over.
int currentFeatureNumber() const
Returns the current feature number, where a value of 0 corresponds to the first feature.
Layout graphical items for displaying a map.
Item representing the paper in a layout.
Base class for graphical items within a QgsLayout.
QgsLayoutSize sizeWithUnits() const
Returns the item's current size, including units.
int page() const
Returns the page the item is currently on, with the first page returning 0.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
virtual QString uuid() const
Returns the item identification string.
QString id() const
Returns the item's ID name.
Abstract base class for layout items with the ability to distribute the content to several frames (Qg...
QVariant customProperty(const QString &key, const QVariant &defaultValue=QVariant()) const
Read a custom property from the object.
const QgsLayout * layout() const
Returns the layout the object is attached to.
void setCustomProperty(const QString &key, const QVariant &value)
Set a custom property for the object.
QPointF pagePositionToLayoutPosition(int page, const QgsLayoutPoint &position) const
Converts a position on a page to an absolute position in layout coordinates.
int pageCount() const
Returns the number of pages in the collection.
QgsLayoutItemPage * page(int pageNumber)
Returns a specific page (by pageNumber) from the collection.
This class provides a method of storing points, consisting of an x and y coordinate,...
double dpi() const
Returns the dpi for outputting the layout.
QgsFeature feature() const
Returns the current feature for evaluating the layout.
QgsVectorLayer * layer() const
Returns the vector layer associated with the layout's context.
QSizeF toQSizeF() const
Converts the layout size to a QSizeF.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
void setCustomProperty(const QString &key, const QVariant &value)
Set a custom property for the layout.
QgsLayoutRenderContext & renderContext()
Returns a reference to the layout's render context, which stores information relating to the current ...
QgsLayoutPageCollection * pageCollection()
Returns a pointer to the layout's page collection, which stores and manages page items in the layout.
QVariant customProperty(const QString &key, const QVariant &defaultValue=QVariant()) const
Read a custom property from the layout.
QgsLayoutReportContext & reportContext()
Returns a reference to the layout's report context, which stores information relating to the current ...
Base class for all map layer types.
Q_INVOKABLE QVariant customProperty(const QString &value, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer.
QgsCoordinateReferenceSystem crs
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
Q_INVOKABLE void setCustomProperty(const QString &key, const QVariant &value)
Set a custom property for layer.
The QgsMapSettings class contains configuration for rendering of the map.
double scale() const
Returns the calculated map scale.
QgsUnitTypes::DistanceUnit mapUnits() const
Returns the units of the map's geographical coordinates - used for scale calculation.
QgsRectangle visibleExtent() const
Returns the actual extent derived from requested extent that takes takes output image size into accou...
QList< QgsMapLayer * > layers() const
Returns the list of layers which will be rendered in the map.
double rotation() const
Returns the rotation of the resulting map image, in degrees clockwise.
QgsCoordinateReferenceSystem destinationCrs() const
Returns the destination coordinate reference system for the map render.
A marker symbol type, for rendering Point and MultiPoint geometries.
double angle() const
Returns the marker angle for the whole symbol.
Interface for master layout type objects, such as print layouts and reports.
Abstract base class for processing algorithms.
QString id() const
Returns the unique ID for the algorithm, which is a combination of the algorithm provider's ID and th...
Contains information about the context in which a processing algorithm is executed.
QgsProject * project() const
Returns the project in which the algorithm is being executed.
QString description() const
Description.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
static QgsProject * instance()
Returns the QgsProject singleton instance.
QgsExpressionContextScope * createExpressionContextScope() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
QString absoluteFilePath() const
Returns full absolute path to the project file if the project is stored in a file system - derived fr...
QVariantMap customVariables() const
A map of custom project variables.
void setCustomVariables(const QVariantMap &customVariables)
A map of custom project variables.
QgsProjectStorage * projectStorage() const
Returns pointer to project storage implementation that handles read/write of the project file.
double height() const SIP_HOLDGIL
Returns the height of the rectangle.
double width() const SIP_HOLDGIL
Returns the width of the rectangle.
QgsPointXY center() const SIP_HOLDGIL
Returns the center point of the rectangle.
Expression function for use within a QgsExpressionContextScope.
QSet< QString > referencedColumns(const QgsExpressionNodeFunction *node) const override
Returns a set of field names which are required for this function.
bool isStatic(const QgsExpressionNodeFunction *node, QgsExpression *parent, const QgsExpressionContext *context) const override
Will be called during prepare to determine if the function is static.
bool usesGeometry(const QgsExpressionNodeFunction *node) const override
Does this function use a geometry object.
QVariant func(const QVariantList &values, const QgsExpressionContext *context, QgsExpression *parent, const QgsExpressionNodeFunction *node) override=0
Returns result of evaluating the function.
virtual QgsScopedExpressionFunction * clone() const =0
Returns a clone of the function.
Abstract base class for all rendered symbols.
QColor color() const
Returns the symbol's color.
const QgsDateTimeRange & temporalRange() const
Returns the datetime range for the object.
bool isTemporal() const
Returns true if the object's temporal range is enabled, and the object will be filtered when renderin...
static Q_INVOKABLE QString toString(QgsUnitTypes::DistanceUnit unit)
Returns a translated string representing a distance unit.
Represents a vector layer which manages a vector based data sets.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
double ANALYSIS_EXPORT angle(QgsPoint *p1, QgsPoint *p2, QgsPoint *p3, QgsPoint *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
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
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 c
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
QPointer< QgsMapLayer > QgsWeakMapLayerPointer
Weak pointer for QgsMapLayer.
Single variable definition for use within a QgsExpressionContextScope.