52 for ( QVariantMap::const_iterator it = customVariables.constBegin(); it != customVariables.constEnd(); ++it )
84 if ( vars.remove( name ) )
98 QVariant
func(
const QVariantList &values,
const QgsExpressionContext *, QgsExpression *,
const QgsExpressionNodeFunction * )
override
103 const QString
id = values.at( 0 ).toString();
105 const QgsLayoutItem *item = mLayout->itemById(
id );
114 QgsScopedExpressionFunction *
clone()
const override
116 return new GetLayoutItemVariables( mLayout );
121 const QgsLayout *mLayout =
nullptr;
129 GetLayoutMapLayerCredits(
const QgsLayout *
c )
130 : QgsScopedExpressionFunction( QStringLiteral(
"map_credits" ),
131 QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral(
"id" ), true )
132 << QgsExpressionFunction::Parameter( QStringLiteral(
"include_layer_names" ), true, false )
133 << QgsExpressionFunction::Parameter( QStringLiteral(
"layer_name_separator" ), true, QStringLiteral(
": " ) ), QStringLiteral(
"Layout" ) )
137 QVariant
func(
const QVariantList &values,
const QgsExpressionContext *, QgsExpression *,
const QgsExpressionNodeFunction * )
override
142 const QString
id = values.value( 0 ).toString();
143 const bool includeLayerNames = values.value( 1 ).toBool();
144 const QString layerNameSeparator = values.value( 2 ).toString();
146 QList< QgsLayoutItemMap * > maps;
147 mLayout->layoutItems( maps );
150 QList< const QgsMapLayer * > layers;
151 bool foundMap =
false;
152 for ( QgsLayoutItemMap *map : std::as_const( maps ) )
154 if ( !
id.isEmpty() && map->id() !=
id )
159 const QgsExpressionContext
c = map->createExpressionContext();
160 const QVariantList mapLayers =
c.variable( QStringLiteral(
"map_layers" ) ).toList();
163 for (
const QVariant &value : mapLayers )
165 if (
const QgsMapLayer *layer = qobject_cast< const QgsMapLayer * >( value.value< QObject * >() ) )
167 if ( !layers.contains( layer ) )
176 res.reserve( layers.size() );
177 for (
const QgsMapLayer *layer : std::as_const( layers ) )
179 const QStringList credits = !layer->metadata().rights().isEmpty() ? layer->metadata().rights() : QStringList() << layer->serverProperties()->attribution();
180 for (
const QString &credit : credits )
182 if ( credit.trimmed().isEmpty() )
185 const QString creditString = includeLayerNames ? layer->name() + layerNameSeparator + credit
188 if ( !res.contains( creditString ) )
196 QgsScopedExpressionFunction *
clone()
const override
198 return new GetLayoutMapLayerCredits( mLayout );
203 const QgsLayout *mLayout =
nullptr;
210 GetCurrentFormFieldValue( )
211 : QgsScopedExpressionFunction( QStringLiteral(
"current_value" ), QgsExpressionFunction::ParameterList() << QStringLiteral(
"field_name" ), QStringLiteral(
"Form" ) )
214 QVariant
func(
const QVariantList &values,
const QgsExpressionContext *context, QgsExpression *,
const QgsExpressionNodeFunction * )
override
216 const QString fieldName( values.at( 0 ).toString() );
217 const QgsFeature feat( context->
variable( QStringLiteral(
"current_feature" ) ).value<QgsFeature>() );
218 if ( fieldName.isEmpty() || ! feat.isValid( ) )
222 return feat.attribute( fieldName ) ;
225 QgsScopedExpressionFunction *
clone()
const override
227 return new GetCurrentFormFieldValue( );
230 bool isStatic(
const QgsExpressionNodeFunction *, QgsExpression *,
const QgsExpressionContext * )
const override
240 GetCurrentParentFormFieldValue( )
241 : QgsScopedExpressionFunction( QStringLiteral(
"current_parent_value" ), QgsExpressionFunction::ParameterList() << QStringLiteral(
"field_name" ), QStringLiteral(
"Form" ) )
244 QVariant
func(
const QVariantList &values,
const QgsExpressionContext *context, QgsExpression *,
const QgsExpressionNodeFunction * )
override
246 const QString fieldName( values.at( 0 ).toString() );
247 const QgsFeature feat( context->
variable( QStringLiteral(
"current_parent_feature" ) ).value<QgsFeature>() );
248 if ( fieldName.isEmpty() || ! feat.isValid( ) )
252 return feat.attribute( fieldName ) ;
255 QgsScopedExpressionFunction *
clone()
const override
257 return new GetCurrentParentFormFieldValue( );
260 bool isStatic(
const QgsExpressionNodeFunction *, QgsExpression *,
const QgsExpressionContext * )
const override
271 GetProcessingParameterValue(
const QVariantMap ¶ms )
272 : QgsScopedExpressionFunction( QStringLiteral(
"parameter" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral(
"name" ) ), QStringLiteral(
"Processing" ) )
276 QVariant
func(
const QVariantList &values,
const QgsExpressionContext *, QgsExpression *,
const QgsExpressionNodeFunction * )
override
278 return mParams.value( values.at( 0 ).toString() );
281 QgsScopedExpressionFunction *
clone()
const override
283 return new GetProcessingParameterValue( mParams );
288 const QVariantMap mParams;
298 scope->
addFunction( QStringLiteral(
"current_value" ),
new GetCurrentFormFieldValue( ) );
300 scope->
setVariable( QStringLiteral(
"current_feature" ), formFeature,
true );
301 scope->
setVariable( QStringLiteral(
"form_mode" ), formMode,
true );
309 scope->
addFunction( QStringLiteral(
"current_parent_value" ),
new GetCurrentParentFormFieldValue( ) );
310 scope->
setVariable( QStringLiteral(
"current_parent_geometry" ), parentFormFeature.
geometry( ),
true );
311 scope->
setVariable( QStringLiteral(
"current_parent_feature" ), parentFormFeature,
true );
312 scope->
setVariable( QStringLiteral(
"parent_form_mode" ), parentFormMode,
true );
334 vars.insert( name, value );
355 if ( vars.remove( name ) )
367 const QStringList variableNames = layer->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
368 const QStringList variableValues = layer->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
371 for (
const QString &variableName : variableNames )
373 if ( varIndex >= variableValues.length() )
378 const QVariant varValue = variableValues.at( varIndex );
380 scope->
setVariable( variableName, varValue,
true );
400 const QgsVectorLayer *vLayer = qobject_cast< const QgsVectorLayer * >( layer );
415 QList<QgsExpressionContextScope *> scopes;
434 QStringList variableNames = layer->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
435 QStringList variableValues = layer->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
438 const int index = variableNames.indexOf( name );
441 variableValues[ index ] = value.toString();
446 variableNames << name;
447 variableValues << value.toString();
459 QStringList variableNames;
460 QStringList variableValues;
462 QVariantMap::const_iterator it = variables.constBegin();
463 for ( ; it != variables.constEnd(); ++it )
465 variableNames << it.key();
466 variableValues << it.value().toString();
520 QVariantList layersIds;
522 const QList<QgsMapLayer *> layersInMap = mapSettings.
layers(
true );
523 layersIds.reserve( layersInMap.count() );
524 layers.reserve( layersInMap.count() );
527 layersIds << layer->id();
540 scope->
addFunction( QStringLiteral(
"is_layer_visible" ),
new GetLayerVisibility( mapSettings.
layers(
true ), mapSettings.
scale() ) );
571 QVariantList matchList;
575 QVariantMap matchMap;
577 matchMap.insert( QStringLiteral(
"valid" ), match.isValid() );
578 matchMap.insert( QStringLiteral(
"layer" ), QVariant::fromValue<QgsWeakMapLayerPointer>(
QgsWeakMapLayerPointer( match.layer() ) ) );
579 matchMap.insert( QStringLiteral(
"feature_id" ), match.featureId() );
580 matchMap.insert( QStringLiteral(
"vertex_index" ), match.vertexIndex() );
581 matchMap.insert( QStringLiteral(
"distance" ), match.distance() );
583 matchList.append( matchMap );
609 angle = markerSymbol->
angle();
618 auto scope = std::make_unique<QgsExpressionContextScope>( QObject::tr(
"Layout" ) );
620 return scope.release();
623 const QStringList variableNames = layout->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
624 const QStringList variableValues = layout->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
628 for (
const QString &variableName : variableNames )
630 if ( varIndex >= variableValues.length() )
635 const QVariant varValue = variableValues.at( varIndex );
637 scope->setVariable( variableName, varValue );
663 QVariantList offsets;
666 if ( pages.contains( i ) )
676 scope->addFunction( QStringLiteral(
"item_variables" ),
new GetLayoutItemVariables( layout ) );
677 scope->addFunction( QStringLiteral(
"map_credits" ),
new GetLayoutMapLayerCredits( layout ) );
689 scope->setFeature( atlasFeature );
695 return scope.release();
704 QStringList variableNames = layout->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
705 QStringList variableValues = layout->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
707 variableNames << name;
708 variableValues << value.toString();
719 QStringList variableNames;
720 QStringList variableValues;
722 QVariantMap::const_iterator it = variables.constBegin();
723 for ( ; it != variables.constEnd(); ++it )
725 variableNames << it.key();
726 variableValues << it.value().toString();
779 const QStringList variableNames = item->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
780 const QStringList variableValues = item->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
783 for (
const QString &variableName : variableNames )
785 if ( varIndex >= variableValues.length() )
790 const QVariant varValue = variableValues.at( varIndex );
796 bool itemPageFound =
false;
799 for (
int i = 0; i < item->
layout()->pageCollection()->pageCount(); i++ )
803 if ( i == item->
page() )
805 itemPageFound =
true;
813 if ( !itemPageFound )
848 QStringList variableNames = item->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
849 QStringList variableValues = item->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
851 variableNames << name;
852 variableValues << value.toString();
863 QStringList variableNames;
864 QStringList variableValues;
866 QVariantMap::const_iterator it = variables.constBegin();
867 for ( ; it != variables.constEnd(); ++it )
869 variableNames << it.key();
870 variableValues << it.value().toString();
884 const QStringList variableNames = frame->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
885 const QStringList variableValues = frame->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
888 for (
const QString &variableName : variableNames )
890 if ( varIndex >= variableValues.length() )
895 const QVariant varValue = variableValues.at( varIndex );
909 QStringList variableNames = frame->
customProperty( QStringLiteral(
"variableNames" ) ).toStringList();
910 QStringList variableValues = frame->
customProperty( QStringLiteral(
"variableValues" ) ).toStringList();
912 variableNames << name;
913 variableValues << value.toString();
924 QStringList variableNames;
925 QStringList variableValues;
927 QVariantMap::const_iterator it = variables.constBegin();
928 for ( ; it != variables.constEnd(); ++it )
930 variableNames << it.key();
931 variableValues << it.value().toString();
951 auto scope = std::make_unique<QgsExpressionContextScope>( QObject::tr(
"Algorithm" ) );
952 scope->addFunction( QStringLiteral(
"parameter" ),
new GetProcessingParameterValue( parameters ) );
955 return scope.release();
960 return scope.release();
965 auto modelScope = std::make_unique<QgsExpressionContextScope>( QObject::tr(
"Model" ) );
967 if ( !model->sourceFilePath().isEmpty() )
969 modelPath = model->sourceFilePath();
978 const QString modelFolder = !modelPath.isEmpty() ? QFileInfo( modelPath ).path() : QString();
985 const QVariantMap customVariables = model->variables();
986 for (
auto it = customVariables.constBegin(); it != customVariables.constEnd(); ++it )
991 return modelScope.release();
996 auto scope = std::make_unique<QgsExpressionContextScope>();
998 return scope.release();
1018 return mUsesGeometry;
1024 return mReferencedColumns;
1036QgsExpressionContextUtils::GetLayerVisibility::GetLayerVisibility(
const QList<QgsMapLayer *> &layers,
double scale )
1038 , mLayers( _qgis_listRawToQPointer( layers ) )
1041 for (
const auto &layer : mLayers )
1043 if ( layer->hasScaleBasedVisibility() )
1045 mScaleBasedVisibilityDetails[ layer ] = qMakePair( layer->minimumScale(), layer->maximumScale() );
1050QgsExpressionContextUtils::GetLayerVisibility::GetLayerVisibility()
1056 if ( mLayers.isEmpty() )
1061 bool isVisible =
false;
1063 QgsMapLayer *layer = QgsExpressionUtils::getMapLayer( values.at( 0 ), context, parent );
1065 if ( layer && mLayers.contains( layer ) )
1068 if ( mScaleBasedVisibilityDetails.contains( layer ) && !
qgsDoubleNear( mScale, 0.0 ) )
1070 if ( ( !
qgsDoubleNear( mScaleBasedVisibilityDetails[ layer ].first, 0.0 ) && mScale > mScaleBasedVisibilityDetails[ layer ].first ) ||
1071 ( !
qgsDoubleNear( mScaleBasedVisibilityDetails[ layer ].second, 0.0 ) && mScale < mScaleBasedVisibilityDetails[ layer ].second ) )
1083 GetLayerVisibility *func =
new GetLayerVisibility();
1084 func->mLayers = mLayers;
1085 func->mScale = mScale;
1086 func->mScaleBasedVisibilityDetails = mScaleBasedVisibilityDetails;
1095class CurrentVertexZValueExpressionFunction:
public QgsScopedExpressionFunction
1098 CurrentVertexZValueExpressionFunction():
1099 QgsScopedExpressionFunction(
"$vertex_z",
1101 QStringLiteral(
"Meshes" ) )
1104 QgsScopedExpressionFunction *clone()
const override {
return new CurrentVertexZValueExpressionFunction();}
1106 QVariant func(
const QVariantList &,
const QgsExpressionContext *context, QgsExpression *,
const QgsExpressionNodeFunction * )
override
1109 context->
hasVariable( QStringLiteral(
"_mesh_vertex_index" ) ) &&
1110 context->
hasVariable( QStringLiteral(
"_native_mesh" ) ) )
1112 int vertexIndex = context->
variable( QStringLiteral(
"_mesh_vertex_index" ) ).toInt();
1113 const QgsMesh nativeMesh = qvariant_cast<QgsMesh>( context->
variable( QStringLiteral(
"_native_mesh" ) ) );
1122 bool isStatic(
const QgsExpressionNodeFunction *, QgsExpression *,
const QgsExpressionContext * )
const override
1128class CurrentVertexXValueExpressionFunction:
public QgsScopedExpressionFunction
1131 CurrentVertexXValueExpressionFunction():
1132 QgsScopedExpressionFunction(
"$vertex_x",
1134 QStringLiteral(
"Meshes" ) )
1137 QgsScopedExpressionFunction *clone()
const override {
return new CurrentVertexXValueExpressionFunction();}
1139 QVariant func(
const QVariantList &,
const QgsExpressionContext *context, QgsExpression *,
const QgsExpressionNodeFunction * )
override
1142 context->
hasVariable( QStringLiteral(
"_mesh_vertex_index" ) ) &&
1143 context->
hasVariable( QStringLiteral(
"_native_mesh" ) ) )
1145 int vertexIndex = context->
variable( QStringLiteral(
"_mesh_vertex_index" ) ).toInt();
1146 const QgsMesh nativeMesh = qvariant_cast<QgsMesh>( context->
variable( QStringLiteral(
"_native_mesh" ) ) );
1155 bool isStatic(
const QgsExpressionNodeFunction *, QgsExpression *,
const QgsExpressionContext * )
const override
1161class CurrentVertexYValueExpressionFunction:
public QgsScopedExpressionFunction
1164 CurrentVertexYValueExpressionFunction():
1165 QgsScopedExpressionFunction(
"$vertex_y",
1167 QStringLiteral(
"Meshes" ) )
1170 QgsScopedExpressionFunction *clone()
const override {
return new CurrentVertexYValueExpressionFunction();}
1172 QVariant func(
const QVariantList &,
const QgsExpressionContext *context, QgsExpression *,
const QgsExpressionNodeFunction * )
override
1175 context->
hasVariable( QStringLiteral(
"_mesh_vertex_index" ) ) &&
1176 context->
hasVariable( QStringLiteral(
"_native_mesh" ) ) )
1178 int vertexIndex = context->
variable( QStringLiteral(
"_mesh_vertex_index" ) ).toInt();
1179 const QgsMesh nativeMesh = qvariant_cast<QgsMesh>( context->
variable( QStringLiteral(
"_native_mesh" ) ) );
1188 bool isStatic(
const QgsExpressionNodeFunction *, QgsExpression *,
const QgsExpressionContext * )
const override
1194class CurrentVertexExpressionFunction:
public QgsScopedExpressionFunction
1197 CurrentVertexExpressionFunction():
1198 QgsScopedExpressionFunction(
"$vertex_as_point",
1200 QStringLiteral(
"Meshes" ) )
1203 QgsScopedExpressionFunction *clone()
const override {
return new CurrentVertexExpressionFunction();}
1205 QVariant func(
const QVariantList &,
const QgsExpressionContext *context, QgsExpression *,
const QgsExpressionNodeFunction * )
override
1208 context->
hasVariable( QStringLiteral(
"_mesh_vertex_index" ) ) &&
1209 context->
hasVariable( QStringLiteral(
"_native_mesh" ) ) )
1211 int vertexIndex = context->
variable( QStringLiteral(
"_mesh_vertex_index" ) ).toInt();
1212 const QgsMesh nativeMesh = qvariant_cast<QgsMesh>( context->
variable( QStringLiteral(
"_native_mesh" ) ) );
1215 return QVariant::fromValue( QgsGeometry(
new QgsPoint( vertex ) ) );
1221 bool isStatic(
const QgsExpressionNodeFunction *, QgsExpression *,
const QgsExpressionContext * )
const override
1227class CurrentVertexIndexExpressionFunction:
public QgsScopedExpressionFunction
1230 CurrentVertexIndexExpressionFunction():
1231 QgsScopedExpressionFunction(
"$vertex_index",
1233 QStringLiteral(
"Meshes" ) )
1236 QgsScopedExpressionFunction *clone()
const override {
return new CurrentVertexIndexExpressionFunction();}
1238 QVariant func(
const QVariantList &,
const QgsExpressionContext *context, QgsExpression *,
const QgsExpressionNodeFunction * )
override
1243 if ( !context->
hasVariable( QStringLiteral(
"_mesh_vertex_index" ) ) )
1246 return context->
variable( QStringLiteral(
"_mesh_vertex_index" ) );
1250 bool isStatic(
const QgsExpressionNodeFunction *, QgsExpression *,
const QgsExpressionContext * )
const override
1256class CurrentFaceAreaExpressionFunction:
public QgsScopedExpressionFunction
1259 CurrentFaceAreaExpressionFunction():
1260 QgsScopedExpressionFunction(
"$face_area",
1262 QStringLiteral(
"Meshes" ) )
1265 QgsScopedExpressionFunction *clone()
const override {
return new CurrentFaceAreaExpressionFunction();}
1267 QVariant func(
const QVariantList &,
const QgsExpressionContext *context, QgsExpression *parent,
const QgsExpressionNodeFunction * )
override
1270 context->
hasVariable( QStringLiteral(
"_mesh_face_index" ) ) &&
1271 context->
hasVariable( QStringLiteral(
"_native_mesh" ) ) )
1273 const int faceIndex = context->
variable( QStringLiteral(
"_mesh_face_index" ) ).toInt();
1274 const QgsMesh nativeMesh = qvariant_cast<QgsMesh>( context->
variable( QStringLiteral(
"_native_mesh" ) ) );
1276 if ( !face.isEmpty() )
1286 return QVariant( area );
1288 catch ( QgsCsException & )
1290 parent->
setEvalErrorString( QObject::tr(
"An error occurred while calculating area" ) );
1296 return QVariant( geom.
area() );
1304 bool isStatic(
const QgsExpressionNodeFunction *, QgsExpression *,
const QgsExpressionContext * )
const override
1310class CurrentFaceIndexExpressionFunction:
public QgsScopedExpressionFunction
1313 CurrentFaceIndexExpressionFunction():
1314 QgsScopedExpressionFunction(
"$face_index",
1316 QStringLiteral(
"Meshes" ) )
1319 QgsScopedExpressionFunction *clone()
const override {
return new CurrentFaceIndexExpressionFunction();}
1321 QVariant func(
const QVariantList &,
const QgsExpressionContext *context, QgsExpression *,
const QgsExpressionNodeFunction * )
override
1326 if ( !context->
hasVariable( QStringLiteral(
"_mesh_face_index" ) ) )
1329 return context->
variable( QStringLiteral(
"_mesh_face_index" ) ).toInt();
1333 bool isStatic(
const QgsExpressionNodeFunction *, QgsExpression *,
const QgsExpressionContext * )
const override
1343 auto scope = std::make_unique<QgsExpressionContextScope>();
1345 switch ( elementType )
1354 scope->addFunction(
"$vertex_as_point",
new CurrentVertexExpressionFunction );
1355 scope->addFunction(
"$vertex_x",
new CurrentVertexXValueExpressionFunction );
1356 scope->addFunction(
"$vertex_y",
new CurrentVertexYValueExpressionFunction );
1357 scope->addFunction(
"$vertex_z",
new CurrentVertexZValueExpressionFunction );
1358 scope->addFunction(
"$vertex_index",
new CurrentVertexIndexExpressionFunction );
1365 scope->addFunction(
"$face_area",
new CurrentFaceAreaExpressionFunction );
1366 scope->addFunction(
"$face_index",
new CurrentFaceIndexExpressionFunction );
1373 return scope.release();
1377QVariant LoadLayerFunction::func(
const QVariantList &,
const QgsExpressionContext *, QgsExpression *parent,
const QgsExpressionNodeFunction * )
1379 parent->
setEvalErrorString( QObject::tr(
"Invalid arguments for load_layer function" ) );
1383bool LoadLayerFunction::isStatic(
const QgsExpressionNodeFunction *node, QgsExpression *parent,
const QgsExpressionContext *context )
const
1393 parent->
setEvalErrorString( QObject::tr(
"load_layer cannot be used in this context" ) );
1397 QgsExpressionNode *uriNode = node->
args()->
at( 0 );
1398 QgsExpressionNode *providerNode = node->
args()->
at( 1 );
1399 if ( !uriNode->
isStatic( parent, context ) )
1401 parent->
setEvalErrorString( QObject::tr(
"load_layer requires a static value for the uri argument" ) );
1404 if ( !providerNode->
isStatic( parent, context ) )
1406 parent->
setEvalErrorString( QObject::tr(
"load_layer requires a static value for the provider argument" ) );
1410 const QString uri = uriNode->
eval( parent, context ).toString();
1411 if ( uri.isEmpty() )
1417 const QString providerKey = providerNode->
eval( parent, context ).toString();
1418 if ( providerKey.isEmpty() )
1420 parent->
setEvalErrorString( QObject::tr(
"Invalid provider argument for load_layer" ) );
1424 const QgsCoordinateTransformContext transformContext = context->
variable( QStringLiteral(
"_project_transform_context" ) ).value<QgsCoordinateTransformContext>();
1427 auto loadLayer = [ uri, providerKey, store, node, parent, &res, &transformContext ]
1432 parent->setEvalErrorString( QObject::tr(
"Invalid provider argument for load_layer" ) );
1438 parent->setEvalErrorString( QObject::tr(
"Cannot use %1 provider for load_layer" ).arg( providerKey ) );
1442 QgsMapLayerFactory::LayerOptions layerOptions( transformContext );
1443 layerOptions.loadAllStoredStyles =
false;
1444 layerOptions.loadDefaultStyle =
false;
1449 parent->setEvalErrorString( QObject::tr(
"Could not load_layer with uri: %1" ).arg( uri ) );
1455 parent->setEvalErrorString( QObject::tr(
"Could not load_layer with uri: %1" ).arg( uri ) );
1459 store->addMapLayer( layer );
1466 if ( QThread::currentThread() == store->thread() )
1469 QMetaObject::invokeMethod( store, std::move( loadLayer ), Qt::BlockingQueuedConnection );
1476QgsScopedExpressionFunction *LoadLayerFunction::clone()
const
1478 return new LoadLayerFunction();
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.
@ Preferred
Preferred format, matching the most recent WKT ISO standard. Currently an alias to WKT2_2019,...
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", "server", "qgis_process" or "external" (for external...
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.
Represents a coordinate reference system (CRS).
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
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 projectionAcronym() const
Returns the projection acronym for the projection used by the CRS.
QString toWkt(Qgis::CrsWktVariant variant=Qgis::CrsWktVariant::Wkt1Gdal, 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,...
double measureArea(const QgsGeometry &geometry) const
Measures the area of a geometry.
double convertAreaMeasurement(double area, Qgis::AreaUnit toUnits) const
Takes an area measurement calculated by this QgsDistanceArea object and converts it to a different ar...
QgsRange which stores a range of double values.
bool isInfinite() const
Returns true if the range consists of all possible values.
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 QgsExpressionContextScope * mapLayerPositionScope(const QgsPointXY &position)
Sets the expression context variables which are available for expressions triggered by moving the mou...
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 QgsExpressionContextScope * meshExpressionScope(QgsMesh::ElementType elementType)
Creates a new scope which contains functions relating to mesh layer element elementType.
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...
QgsMapLayerStore * loadedLayerStore() const
Returns the destination layer store for any layers loaded during expression evaluation.
static const QString EXPR_SYMBOL_COLOR
Inbuilt variable name for symbol color variable.
bool hasVariable(const QString &name) const
Check whether a variable is specified by any scope within the context.
static const QString EXPR_SYMBOL_ANGLE
Inbuilt variable name for symbol angle variable.
QVariantMap variablesToMap() const
Returns a map of variable name to value representing all the expression variables contained by the co...
QVariant variable(const QString &name) const
Fetches a matching variable from the context.
An 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.
QgsExpressionNode::NodeList * args() const
Returns a list of arguments specified for the function.
QgsExpressionNode * at(int i)
Gets the node at position i in the list.
int count() const
Returns the number of nodes in the list.
QVariant eval(QgsExpression *parent, const QgsExpressionContext *context)
Evaluate this node with the given context and parent.
virtual bool isStatic(QgsExpression *parent, const QgsExpressionContext *context) const =0
Returns true if this node can be evaluated for a static value.
Handles parsing and evaluation of expressions (formerly called "search strings").
static bool registerFunction(QgsExpressionFunction *function, bool transferOwnership=false)
Registers a function to the expression engine.
Qgis::AreaUnit areaUnits() const
Returns the desired areal units for calculations involving geomCalculator(), e.g.,...
void setEvalErrorString(const QString &str)
Sets evaluation error (used internally by evaluation functions).
QgsDistanceArea * geomCalculator()
Returns calculator used for distance and area calculations (used by $length, $area and $perimeter fun...
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)
Creates a new geometry from a QgsRectangle.
static QgsGeometry fromPointXY(const QgsPointXY &point)
Creates a new geometry from a QgsPointXY object.
double area() const
Returns the planar, 2-dimensional area of the geometry.
A representation of the interval between two datetime values.
Used to render QgsLayout as an atlas, by iterating over the features from an associated vector layer.
QString nameForPage(int page) const
Returns the calculated name for a specified atlas page number.
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.
QgsVectorLayer * coverageLayer() const
Returns the coverage layer used for the atlas features.
int currentFeatureNumber() const
Returns the current feature number, where a value of 0 corresponds to the first feature.
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.
bool shouldExportPage(int page) const
Returns whether the specified page number should be included in exports of the layouts.
QgsLayoutItemPage * page(int pageNumber)
Returns a specific page (by pageNumber) from the collection.
Provides a method of storing points, consisting of an x and y coordinate, for use in QGIS layouts.
bool isPreviewRender() const
Returns true if the render current being conducted is a preview render, i.e.
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 ...
static QgsMapLayer * createLayer(const QString &uri, const QString &name, Qgis::LayerType type, const LayerOptions &options, const QString &provider=QString())
Creates a map layer, given a uri, name, layer type and provider name.
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
Q_INVOKABLE void setCustomProperty(const QString &key, const QVariant &value)
Set a custom property for layer.
QgsCoordinateReferenceSystem verticalCrs
Contains configuration for rendering maps.
Qgis::DistanceUnit mapUnits() const
Returns the units of the map's geographical coordinates - used for scale calculation.
QList< QgsMapLayer * > layers(bool expandGroupLayers=false) const
Returns the list of layers which will be rendered in the map.
double scale() const
Returns the calculated map scale.
QgsDoubleRange zRange() const
Returns the range of z-values which will be visible in the map.
long long currentFrame() const
Returns the current frame number of the map, for maps which are part of an animation.
double frameRate() const
Returns the frame rate of the map (in frames per second), for maps which are part of an animation.
QgsRectangle visibleExtent() const
Returns the actual extent derived from requested extent that takes output image size into account.
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.
static QgsGeometry toGeometry(const QgsMeshFace &face, const QVector< QgsMeshVertex > &vertices)
Returns face as polygon geometry.
bool isEmpty() const override
Returns true if the geometry is empty.
Abstract base class for processing algorithms.
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.
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
QgsProviderMetadata * providerMetadata(const QString &providerKey) const
Returns metadata of the provider or nullptr if not found.
T lower() const
Returns the lower bound of the range.
T upper() const
Returns the upper bound of the range.
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.
virtual QgsScopedExpressionFunction * clone() const =0
Returns a clone of the 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.
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...
T begin() const
Returns the beginning of the range.
T end() const
Returns the upper bound of the range.
static Q_INVOKABLE QString toString(Qgis::DistanceUnit unit)
Returns a translated string representing a distance unit.
Represents a vector layer which manages a vector based dataset.
static double scaleToZoom(double mapScale, double z0Scale=559082264.0287178)
Finds zoom level given map scale denominator.
static int scaleToZoomLevel(double mapScale, int sourceMinZoom, int sourceMaxZoom, double z0Scale=559082264.0287178)
Finds the best fitting zoom level given a map scale denominator and allowed zoom level range.
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
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH
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.
QVector< int > QgsMeshFace
List of vertex indexes.
QgsPoint QgsMeshVertex
xyz coords of vertex
Single variable definition for use within a QgsExpressionContextScope.
QVector< QgsMeshVertex > vertices
QgsMeshFace face(int index) const
Returns a face at the index.
ElementType
Defines type of mesh elements.
QgsMeshVertex vertex(int index) const
Returns a vertex at the index.