21 const QString &description,
22 const QString &meshLayerParameterName,
23 const QSet<int> supportedDataType,
26 mMeshLayerParameterName( meshLayerParameterName ),
27 mSupportedDataType( supportedDataType )
52 for (
const int g : groups )
53 parts.append( QString::number( g ) );
55 return parts.join(
',' ).prepend(
'[' ).append(
']' );
64 QString code = QStringLiteral(
"QgsProcessingParameterMeshDatasetGroups('%1', %2" )
66 if ( !mMeshLayerParameterName.isEmpty() )
71 dt.append( QStringLiteral(
"QgsMeshDatasetGroupMetadata.DataOnFaces" ) );
73 dt.append( QStringLiteral(
"QgsMeshDatasetGroupMetadata.DataOnVertices" ) );
75 dt.append( QStringLiteral(
"QgsMeshDatasetGroupMetadata.DataOnVolumes" ) );
77 dt.append( QStringLiteral(
"QgsMeshDatasetGroupMetadata.DataOnEdges" ) );
80 code += QLatin1String(
", supportedDataType=[" );
81 code += dt.join(
',' );
86 code += QLatin1String(
", optional=True" );
96 if ( mMeshLayerParameterName.isEmpty() )
99 return QStringList() << mMeshLayerParameterName;
104 return mMeshLayerParameterName;
109 return mSupportedDataType.contains( dataType );
114 if ( !valueIsAcceptable( value,
true ) )
119 if ( value.isValid() )
121 if ( value.type() == QVariant::List )
123 const QVariantList varList = value.toList();
124 for (
const QVariant &v : varList )
129 ret << value.toInt();
139 map.insert( QStringLiteral(
"mesh_layer" ), mMeshLayerParameterName );
140 QVariantList dataType;
141 for (
int v : mSupportedDataType )
142 dataType.append( v );
143 map.insert( QStringLiteral(
"supported_data_type" ), dataType );
150 mMeshLayerParameterName = map.value( QStringLiteral(
"mesh_layer" ) ).toString();
151 const QVariantList dataType = map.value( QStringLiteral(
"supported_data_type" ) ).toList();
152 mSupportedDataType.clear();
153 for (
const QVariant &var : dataType )
154 mSupportedDataType.insert( var.toInt() );
158bool QgsProcessingParameterMeshDatasetGroups::valueIsAcceptable(
const QVariant &input,
bool allowEmpty )
160 if ( !input.isValid() )
163 if ( input.type() != QVariant::List )
169 const QVariantList list = input.toList();
171 if ( !allowEmpty && list.isEmpty() )
174 for (
const QVariant &var : list )
186 const QString &description,
187 const QString &meshLayerParameterName,
188 const QString &datasetGroupParameterName )
190 , mMeshLayerParameterName( meshLayerParameterName )
191 , mDatasetGroupParameterName( datasetGroupParameterName )
217 parts << QStringLiteral(
"'type': " ) +
type;
219 if ( value.toDateTime().isValid() )
221 QDateTime dateTime = value.toDateTime();
222 dateTime.setTimeSpec( Qt::UTC );
227 const QVariantMap variantTimeDataset = value.toMap();
228 if ( variantTimeDataset.value( QStringLiteral(
"type" ) ) == QLatin1String(
"dataset-time-step" ) )
230 const QVariantList datasetIndex = variantTimeDataset.value( QStringLiteral(
"value" ) ).toList();
231 parts << QStringLiteral(
"'value': " ) + QString(
"[%1,%2]" ).arg( datasetIndex.at( 0 ).toString(), datasetIndex.at( 1 ).toString() );
233 else if ( variantTimeDataset.value( QStringLiteral(
"type" ) ) == QLatin1String(
"defined-date-time" ) )
239 return parts.join(
',' ).prepend(
'{' ).append(
'}' );
244 switch ( outputType )
248 QString code = QStringLiteral(
"QgsProcessingParameterMeshDatasetTime('%1', '%2'" )
250 if ( !mMeshLayerParameterName.isEmpty() )
253 if ( !mDatasetGroupParameterName.isEmpty() )
257 code += QLatin1String(
", optional=True" );
267 QStringList otherParameters;
268 if ( !mMeshLayerParameterName.isEmpty() )
269 otherParameters << mMeshLayerParameterName;
271 if ( !mDatasetGroupParameterName.isEmpty() )
272 otherParameters << mMeshLayerParameterName << mDatasetGroupParameterName;
274 return otherParameters;
280 map.insert( QStringLiteral(
"mesh_layer" ), mMeshLayerParameterName );
281 map.insert( QStringLiteral(
"dataset_groups" ), mDatasetGroupParameterName );
288 mMeshLayerParameterName = map.value( QStringLiteral(
"mesh_layer" ) ).toString();
289 mDatasetGroupParameterName = map.value( QStringLiteral(
"dataset_groups" ) ).toString();
295 return mMeshLayerParameterName;
300 return mDatasetGroupParameterName;
305 if ( !valueIsAcceptable( value,
false ) )
308 if ( value.toDateTime().isValid() )
309 return QStringLiteral(
"defined-date-time" );
311 return value.toMap().value( QStringLiteral(
"type" ) ).toString();
316 if ( !valueIsAcceptable( value,
false ) ||
valueAsTimeType( value ) != QLatin1String(
"dataset-time-step" ) )
319 const QVariantList list = value.toMap().value( QStringLiteral(
"value" ) ).toList();
325 if ( value.toDateTime().isValid() )
327 QDateTime dateTime = value.toDateTime();
328 dateTime.setTimeSpec( Qt::UTC );
332 if ( !valueIsAcceptable( value,
false ) &&
valueAsTimeType( value ) != QLatin1String(
"defined-date-time" ) )
335 return value.toMap().value( QStringLiteral(
"value" ) ).toDateTime();
338bool QgsProcessingParameterMeshDatasetTime::valueIsAcceptable(
const QVariant &input,
bool allowEmpty )
340 if ( !input.isValid() )
343 if ( input.toDateTime().isValid() )
346 if ( input.type() != QVariant::Map )
349 const QVariantMap map = input.toMap();
354 if ( ! map.contains( QStringLiteral(
"type" ) ) )
357 const QString
type = map.value( QStringLiteral(
"type" ) ).toString();
358 const QVariant value = map.value( QStringLiteral(
"value" ) );
360 if (
type == QLatin1String(
"static" ) ||
type == QLatin1String(
"current-context-time" ) )
363 if (
type == QLatin1String(
"dataset-time-step" ) )
365 if ( value.type() != QVariant::List )
367 const QVariantList list = value.toList();
368 if ( value.toList().count() != 2 )
370 if ( list.at( 0 ).type() != QVariant::Int || list.at( 1 ).type() != QVariant::Int )
373 else if (
type == QLatin1String(
"defined-date-time" ) )
375 if ( value.type() != QVariant::DateTime )
QgsMeshDatasetIndex is index that identifies the dataset group (e.g.
Contains information about the context in which a processing algorithm is executed.
Base class for the definition of processing parameters.
Flags mFlags
Parameter flags.
QString description() const
Returns the description for the parameter.
@ FlagOptional
Parameter is optional.
virtual QVariantMap toVariantMap() const
Saves this parameter to a QVariantMap.
QString name() const
Returns the name of the parameter.
virtual bool fromVariantMap(const QVariantMap &map)
Restores this parameter to a QVariantMap.
A parameter for processing algorithms that need a list of mesh dataset groups.
QgsProcessingParameterMeshDatasetGroups(const QString &name, const QString &description=QString(), const QString &meshLayerParameterName=QString(), QSet< int > supportedDataType=QSet< int >(), bool optional=false)
Constructor.
static QString typeName()
Returns the type name for the parameter class.
static QList< int > valueAsDatasetGroup(const QVariant &value)
Returns the value as a list if dataset group indexes.
QStringList dependsOnOtherParameters() const override
Returns a list of other parameter names on which this parameter is dependent (e.g.
QString valueAsPythonString(const QVariant &value, QgsProcessingContext &context) const override
Returns a string version of the parameter input value, which is suitable for use as an input paramete...
QgsProcessingParameterDefinition * clone() const override
Creates a clone of the parameter definition.
bool checkValueIsAcceptable(const QVariant &input, QgsProcessingContext *context=nullptr) const override
Checks whether the specified input value is acceptable for the parameter.
QString type() const override
Unique parameter type name.
QString asPythonString(QgsProcessing::PythonOutputType outputType=QgsProcessing::PythonQgsProcessingAlgorithmSubclass) const override
Returns the parameter definition as a Python command which can be used within a Python Processing scr...
bool fromVariantMap(const QVariantMap &map) override
Restores this parameter to a QVariantMap.
QString meshLayerParameterName() const
Returns the name of the mesh layer parameter.
QVariantMap toVariantMap() const override
Saves this parameter to a QVariantMap.
bool isDataTypeSupported(QgsMeshDatasetGroupMetadata::DataType dataType) const
Returns whether the data type is supported by the parameter.
A parameter for processing algorithms that need a list of mesh dataset index from time parameter.
QgsProcessingParameterMeshDatasetTime(const QString &name, const QString &description=QString(), const QString &meshLayerParameterName=QString(), const QString &datasetGroupParameterName=QString())
Constructor.
QString valueAsPythonString(const QVariant &value, QgsProcessingContext &context) const override
Returns a string version of the parameter input value, which is suitable for use as an input paramete...
QgsProcessingParameterDefinition * clone() const override
Creates a clone of the parameter definition.
static QString valueAsTimeType(const QVariant &value)
Returns the dataset value time type as a string : current-context-time : the time is store in the pro...
QString asPythonString(QgsProcessing::PythonOutputType outputType=QgsProcessing::PythonQgsProcessingAlgorithmSubclass) const override
Returns the parameter definition as a Python command which can be used within a Python Processing scr...
bool fromVariantMap(const QVariantMap &map) override
Restores this parameter to a QVariantMap.
QString datasetGroupParameterName() const
Returns the name of the dataset groups parameter.
QString meshLayerParameterName() const
Returns the name of the mesh layer parameter.
static QgsMeshDatasetIndex timeValueAsDatasetIndex(const QVariant &value)
Returns the value as a QgsMeshDatasetIndex if the value has "dataset-time-step" type.
QVariantMap toVariantMap() const override
Saves this parameter to a QVariantMap.
QStringList dependsOnOtherParameters() const override
Returns a list of other parameter names on which this parameter is dependent (e.g.
static QString typeName()
Returns the type name for the parameter class.
bool checkValueIsAcceptable(const QVariant &input, QgsProcessingContext *context=nullptr) const override
Checks whether the specified input value is acceptable for the parameter.
static QDateTime timeValueAsDefinedDateTime(const QVariant &value)
Returns the value as a QDateTime if the value has "defined-date-time" type.
QString type() const override
Unique parameter type name.
static QString stringToPythonLiteral(const QString &string)
Converts a string to a Python string literal.
static QString variantToPythonLiteral(const QVariant &value)
Converts a variant to a Python literal.
PythonOutputType
Available Python output types.
@ PythonQgsProcessingAlgorithmSubclass
Full Python QgsProcessingAlgorithm subclass.