|
31 | 31 | #include "qgsvectorlayer.h"
|
32 | 32 | #include "qgsproviderregistry.h"
|
33 | 33 | #include "qgsmeshlayer.h"
|
| 34 | +#include "qgsreferencedgeometry.h" |
34 | 35 |
|
35 | 36 | QList<QgsRasterLayer *> QgsProcessingUtils::compatibleRasterLayers( QgsProject *project, bool sort )
|
36 | 37 | {
|
@@ -389,6 +390,84 @@ QString QgsProcessingUtils::normalizeLayerSource( const QString &source )
|
389 | 390 | return normalized.trimmed();
|
390 | 391 | }
|
391 | 392 |
|
| 393 | +QString QgsProcessingUtils::variantToPythonLiteral( const QVariant &value ) |
| 394 | +{ |
| 395 | + if ( !value.isValid() ) |
| 396 | + return QStringLiteral( "None" ); |
| 397 | + |
| 398 | + if ( value.canConvert<QgsProperty>() ) |
| 399 | + return QStringLiteral( "QgsProperty.fromExpression('%1')" ).arg( value.value< QgsProperty >().asExpression() ); |
| 400 | + else if ( value.canConvert<QgsCoordinateReferenceSystem>() ) |
| 401 | + { |
| 402 | + if ( !value.value< QgsCoordinateReferenceSystem >().isValid() ) |
| 403 | + return QStringLiteral( "QgsCoordinateReferenceSystem()" ); |
| 404 | + else |
| 405 | + return QStringLiteral( "QgsCoordinateReferenceSystem('%1')" ).arg( value.value< QgsCoordinateReferenceSystem >().authid() ); |
| 406 | + } |
| 407 | + else if ( value.canConvert< QgsRectangle >() ) |
| 408 | + { |
| 409 | + QgsRectangle r = value.value<QgsRectangle>(); |
| 410 | + return QStringLiteral( "'%1, %3, %2, %4'" ).arg( qgsDoubleToString( r.xMinimum() ), |
| 411 | + qgsDoubleToString( r.yMinimum() ), |
| 412 | + qgsDoubleToString( r.xMaximum() ), |
| 413 | + qgsDoubleToString( r.yMaximum() ) ); |
| 414 | + } |
| 415 | + else if ( value.canConvert< QgsReferencedRectangle >() ) |
| 416 | + { |
| 417 | + QgsReferencedRectangle r = value.value<QgsReferencedRectangle>(); |
| 418 | + return QStringLiteral( "'%1, %3, %2, %4 [%5]'" ).arg( qgsDoubleToString( r.xMinimum() ), |
| 419 | + qgsDoubleToString( r.yMinimum() ), |
| 420 | + qgsDoubleToString( r.xMaximum() ), |
| 421 | + qgsDoubleToString( r.yMaximum() ), r.crs().authid() ); |
| 422 | + } |
| 423 | + else if ( value.canConvert< QgsPointXY >() ) |
| 424 | + { |
| 425 | + QgsPointXY r = value.value<QgsPointXY>(); |
| 426 | + return QStringLiteral( "'%1,%2'" ).arg( qgsDoubleToString( r.x() ), |
| 427 | + qgsDoubleToString( r.y() ) ); |
| 428 | + } |
| 429 | + else if ( value.canConvert< QgsReferencedPointXY >() ) |
| 430 | + { |
| 431 | + QgsReferencedPointXY r = value.value<QgsReferencedPointXY>(); |
| 432 | + return QStringLiteral( "'%1,%2 [%3]'" ).arg( qgsDoubleToString( r.x() ), |
| 433 | + qgsDoubleToString( r.y() ), |
| 434 | + r.crs().authid() ); |
| 435 | + } |
| 436 | + |
| 437 | + switch ( value.type() ) |
| 438 | + { |
| 439 | + case QVariant::Bool: |
| 440 | + return value.toBool() ? QStringLiteral( "True" ) : QStringLiteral( "False" ); |
| 441 | + |
| 442 | + case QVariant::Double: |
| 443 | + return QString::number( value.toDouble() ); |
| 444 | + |
| 445 | + case QVariant::Int: |
| 446 | + case QVariant::UInt: |
| 447 | + return QString::number( value.toInt() ); |
| 448 | + |
| 449 | + case QVariant::LongLong: |
| 450 | + case QVariant::ULongLong: |
| 451 | + return QString::number( value.toLongLong() ); |
| 452 | + |
| 453 | + case QVariant::List: |
| 454 | + { |
| 455 | + QStringList parts; |
| 456 | + const QVariantList vl = value.toList(); |
| 457 | + for ( const QVariant &v : vl ) |
| 458 | + { |
| 459 | + parts << variantToPythonLiteral( v ); |
| 460 | + } |
| 461 | + return parts.join( ',' ).prepend( '[' ).append( ']' ); |
| 462 | + } |
| 463 | + |
| 464 | + default: |
| 465 | + break; |
| 466 | + } |
| 467 | + |
| 468 | + return QgsProcessingUtils::stringToPythonLiteral( value.toString() ); |
| 469 | +} |
| 470 | + |
392 | 471 | QString QgsProcessingUtils::stringToPythonLiteral( const QString &string )
|
393 | 472 | {
|
394 | 473 | QString s = string;
|
|
0 commit comments