20using namespace Qt::StringLiterals;
25 const QString &name,
const QString &description,
const QString &meshLayerParameterName,
const QSet<int> supportedDataType,
bool optional
28 , mMeshLayerParameterName( meshLayerParameterName )
29 , mSupportedDataType( supportedDataType )
53 for (
const int g : groups )
54 parts.append( QString::number( g ) );
56 return parts.join(
',' ).prepend(
'[' ).append(
']' );
66 if ( !mMeshLayerParameterName.isEmpty() )
71 dt.append( u
"QgsMeshDatasetGroupMetadata.DataOnFaces"_s );
73 dt.append( u
"QgsMeshDatasetGroupMetadata.DataOnVertices"_s );
75 dt.append( u
"QgsMeshDatasetGroupMetadata.DataOnVolumes"_s );
77 dt.append( u
"QgsMeshDatasetGroupMetadata.DataOnEdges"_s );
80 code +=
", supportedDataType=["_L1;
81 code += dt.join(
',' );
86 code +=
", optional=True"_L1;
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.userType() == QMetaType::Type::QVariantList )
123 const QVariantList varList = value.toList();
124 for (
const QVariant &v : varList )
129 ret << value.toInt();
139 map.insert( u
"mesh_layer"_s, mMeshLayerParameterName );
140 QVariantList dataType;
141 for (
int v : mSupportedDataType )
142 dataType.append( v );
143 map.insert( u
"supported_data_type"_s, dataType );
150 mMeshLayerParameterName = map.value( u
"mesh_layer"_s ).toString();
151 const QVariantList dataType = map.value( u
"supported_data_type"_s ).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.userType() != QMetaType::Type::QVariantList )
169 const QVariantList list = input.toList();
171 if ( !allowEmpty && list.isEmpty() )
174 for (
const QVariant &var : list )
187 , mMeshLayerParameterName( meshLayerParameterName )
188 , mDatasetGroupParameterName( datasetGroupParameterName )
212 parts << u
"'type': "_s +
type;
214 if ( value.toDateTime().isValid() )
216 QDateTime dateTime = value.toDateTime();
217 dateTime.setTimeSpec( Qt::UTC );
222 const QVariantMap variantTimeDataset = value.toMap();
223 if ( variantTimeDataset.value( u
"type"_s ) ==
"dataset-time-step"_L1 )
225 const QVariantList datasetIndex = variantTimeDataset.value( u
"value"_s ).toList();
226 parts << u
"'value': "_s + QString(
"[%1,%2]" ).arg( datasetIndex.at( 0 ).toString(), datasetIndex.at( 1 ).toString() );
228 else if ( variantTimeDataset.value( u
"type"_s ) ==
"defined-date-time"_L1 )
234 return parts.join(
',' ).prepend(
'{' ).append(
'}' );
239 switch ( outputType )
243 QString code = u
"QgsProcessingParameterMeshDatasetTime('%1', '%2'"_s.arg(
name(),
description() );
244 if ( !mMeshLayerParameterName.isEmpty() )
247 if ( !mDatasetGroupParameterName.isEmpty() )
251 code +=
", optional=True"_L1;
261 QStringList otherParameters;
262 if ( !mMeshLayerParameterName.isEmpty() )
263 otherParameters << mMeshLayerParameterName;
265 if ( !mDatasetGroupParameterName.isEmpty() )
266 otherParameters << mMeshLayerParameterName << mDatasetGroupParameterName;
268 return otherParameters;
274 map.insert( u
"mesh_layer"_s, mMeshLayerParameterName );
275 map.insert( u
"dataset_groups"_s, mDatasetGroupParameterName );
282 mMeshLayerParameterName = map.value( u
"mesh_layer"_s ).toString();
283 mDatasetGroupParameterName = map.value( u
"dataset_groups"_s ).toString();
289 return mMeshLayerParameterName;
294 return mDatasetGroupParameterName;
299 if ( !valueIsAcceptable( value,
false ) )
302 if ( value.toDateTime().isValid() )
303 return u
"defined-date-time"_s;
305 return value.toMap().value( u
"type"_s ).toString();
310 if ( !valueIsAcceptable( value,
false ) ||
valueAsTimeType( value ) !=
"dataset-time-step"_L1 )
311 return QgsMeshDatasetIndex( -1, -1 );
313 const QVariantList list = value.toMap().value( u
"value"_s ).toList();
314 return QgsMeshDatasetIndex( list.at( 0 ).toInt(), list.at( 1 ).toInt() );
319 if ( value.toDateTime().isValid() )
321 QDateTime dateTime = value.toDateTime();
322 dateTime.setTimeSpec( Qt::UTC );
326 if ( !valueIsAcceptable( value,
false ) &&
valueAsTimeType( value ) !=
"defined-date-time"_L1 )
329 return value.toMap().value( u
"value"_s ).toDateTime();
332bool QgsProcessingParameterMeshDatasetTime::valueIsAcceptable(
const QVariant &input,
bool allowEmpty )
334 if ( !input.isValid() )
337 if ( input.toDateTime().isValid() )
340 if ( input.userType() != QMetaType::Type::QVariantMap )
343 const QVariantMap map = input.toMap();
348 if ( !map.contains( u
"type"_s ) )
351 const QString
type = map.value( u
"type"_s ).toString();
352 const QVariant value = map.value( u
"value"_s );
354 if (
type ==
"static"_L1 ||
type ==
"current-context-time"_L1 )
357 if (
type ==
"dataset-time-step"_L1 )
359 if ( value.userType() != QMetaType::Type::QVariantList )
361 const QVariantList list = value.toList();
362 if ( value.toList().count() != 2 )
364 if ( list.at( 0 ).userType() != QMetaType::Type::Int || list.at( 1 ).userType() != QMetaType::Type::Int )
367 else if (
type ==
"defined-date-time"_L1 )
369 if ( value.userType() != QMetaType::Type::QDateTime )
@ Optional
Parameter is optional.
An 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.
Qgis::ProcessingParameterFlags mFlags
Parameter flags.
QString description() const
Returns the description for the parameter.
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.
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.
bool fromVariantMap(const QVariantMap &map) override
Restores this parameter to a QVariantMap.
QString meshLayerParameterName() const
Returns the name of the mesh layer parameter.
QString asPythonString(QgsProcessing::PythonOutputType outputType=QgsProcessing::PythonOutputType::PythonQgsProcessingAlgorithmSubclass) const override
Returns the parameter definition as a Python command which can be used within a Python Processing scr...
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.
QString asPythonString(QgsProcessing::PythonOutputType outputType=QgsProcessing::PythonOutputType::PythonQgsProcessingAlgorithmSubclass) const override
Returns the parameter definition as a Python command which can be used within a Python Processing scr...
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...
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.