27 QString QgsLayoutMapExtentToLayerAlgorithm::name()
 const 
   29   return QStringLiteral( 
"printlayoutmapextenttolayer" );
 
   32 QString QgsLayoutMapExtentToLayerAlgorithm::displayName()
 const 
   34   return QObject::tr( 
"Print layout map extent to layer" );
 
   37 QStringList QgsLayoutMapExtentToLayerAlgorithm::tags()
 const 
   39   return QObject::tr( 
"layout,composer,composition,visible" ).split( 
',' );
 
   42 QString QgsLayoutMapExtentToLayerAlgorithm::group()
 const 
   44   return QObject::tr( 
"Cartography" );
 
   47 QString QgsLayoutMapExtentToLayerAlgorithm::groupId()
 const 
   49   return QStringLiteral( 
"cartography" );
 
   52 QString QgsLayoutMapExtentToLayerAlgorithm::shortDescription()
 const 
   54   return QObject::tr( 
"Creates a polygon layer containing the extent of a print layout map item." );
 
   57 void QgsLayoutMapExtentToLayerAlgorithm::initAlgorithm( 
const QVariantMap & )
 
   61   auto crsParam = std::make_unique< QgsProcessingParameterCrs >( QStringLiteral( 
"CRS" ), QObject::tr( 
"Override CRS" ), QVariant(), 
true );
 
   63   addParameter( crsParam.release() );
 
   71 QString QgsLayoutMapExtentToLayerAlgorithm::shortHelpString()
 const 
   73   return QObject::tr( 
"This algorithm creates a polygon layer containing the extent of a print layout map item (or items), " 
   74                       "with attributes specifying the map size (in layout units), scale and rotation.\n\n" 
   75                       "If the map item parameter is specified, then only the matching map extent will be exported. If it " 
   76                       "is not specified, all map extents from the layout will be exported.\n\n" 
   77                       "Optionally, a specific output CRS can be specified. If it is not specified, the original map " 
   78                       "item CRS will be used." );
 
   81 QgsLayoutMapExtentToLayerAlgorithm *QgsLayoutMapExtentToLayerAlgorithm::createInstance()
 const 
   83   return new QgsLayoutMapExtentToLayerAlgorithm();
 
   89   QgsPrintLayout *layout = parameterAsLayout( parameters, QStringLiteral( 
"LAYOUT" ), context );
 
   91     throw QgsProcessingException( QObject::tr( 
"Cannot find layout with name \"%1\"" ).arg( parameters.value( QStringLiteral( 
"LAYOUT" ) ).toString() ) );
 
   93   QgsLayoutItemMap *map = qobject_cast< QgsLayoutItemMap * >( parameterAsLayoutItem( parameters, QStringLiteral( 
"MAP" ), context, layout ) );
 
   94   if ( !map && parameters.value( QStringLiteral( 
"MAP" ) ).isValid() )
 
   95     throw QgsProcessingException( QObject::tr( 
"Cannot find matching map item with ID %1" ).arg( parameters.value( QStringLiteral( 
"MAP" ) ).toString() ) );
 
   97   QList< QgsLayoutItemMap *> maps;
 
  105   mFeatures.reserve( maps.size() );
 
  108     if ( !mCrs.isValid() )
 
  109       mCrs = !overrideCrs.
isValid() ? map->crs() : overrideCrs;
 
  112     if ( map->crs() != mCrs )
 
  120         feedback->
reportError( QObject::tr( 
"Error reprojecting map to destination CRS" ) );
 
  125     mWidth = map->rect().width();
 
  126     mHeight = map->rect().height();
 
  127     mScale = map->scale();
 
  128     mRotation = map->mapRotation();
 
  142   fields.
append( 
QgsField( QStringLiteral( 
"map" ), QVariant::String ) );
 
  143   fields.
append( 
QgsField( QStringLiteral( 
"width" ), QVariant::Double ) );
 
  144   fields.
append( 
QgsField( QStringLiteral( 
"height" ), QVariant::Double ) );
 
  145   fields.
append( 
QgsField( QStringLiteral( 
"scale" ), QVariant::Double ) );
 
  146   fields.
append( 
QgsField( QStringLiteral( 
"rotation" ), QVariant::Double ) );
 
  149   std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( 
"OUTPUT" ), context, dest, fields, 
QgsWkbTypes::Polygon, mCrs ) );
 
  159   outputs.insert( QStringLiteral( 
"OUTPUT" ), dest );
 
  161   outputs.insert( QStringLiteral( 
"WIDTH" ), mFeatures.size() == 1 ? mWidth : QVariant() );
 
  162   outputs.insert( QStringLiteral( 
"HEIGHT" ), mFeatures.size() == 1 ? mHeight : QVariant() );
 
  163   outputs.insert( QStringLiteral( 
"SCALE" ), mFeatures.size() == 1 ? mScale : QVariant() );
 
  164   outputs.insert( QStringLiteral( 
"ROTATION" ), mFeatures.size() == 1 ? mRotation : QVariant() );
 
This class represents a coordinate reference system (CRS).
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
Custom exception class for Coordinate Reference System related exceptions.
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
void setAttributes(const QgsAttributes &attrs)
Sets the feature's attributes.
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
void setProgress(double progress)
Sets the current progress for the feedback object.
Encapsulate a field in an attribute table or data source.
Container of fields for a vector layer.
bool append(const QgsField &field, FieldOrigin origin=OriginProvider, int originIndex=-1)
Appends a field. The field must have unique name, otherwise it is rejected (returns false)
A geometry is the spatial representation of a feature.
static QgsGeometry fromQPolygonF(const QPolygonF &polygon)
Construct geometry from a QPolygonF.
OperationResult transform(const QgsCoordinateTransform &ct, QgsCoordinateTransform::TransformDirection direction=QgsCoordinateTransform::ForwardTransform, bool transformZ=false) SIP_THROW(QgsCsException)
Transforms this geometry as described by the coordinate transform ct.
Layout graphical items for displaying a map.
void layoutItems(QList< T * > &itemList) const
Returns a list of layout items of a specific type.
Print layout, a QgsLayout subclass for static or atlas-based layouts.
Contains information about the context in which a processing algorithm is executed.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context.
Custom exception class for processing related exceptions.
Base class for providing feedback from a processing algorithm.
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
A numeric output for processing algorithms.
@ FlagAdvanced
Parameter is an advanced parameter which should be hidden from users by default.
A feature sink output for processing algorithms.
A print layout item parameter, allowing users to select a particular item from a print layout.
A print layout parameter, allowing users to select a print layout.
@ TypeVectorPolygon
Vector polygon layers.