40 QString QgsExtractLabelsAlgorithm::name()
const
42 return QStringLiteral(
"extractlabels" );
45 QString QgsExtractLabelsAlgorithm::displayName()
const
47 return QObject::tr(
"Extract labels" );
50 QStringList QgsExtractLabelsAlgorithm::tags()
const
52 return QObject::tr(
"map themes,font,position" ).split(
',' );
55 QgsProcessingAlgorithm::Flags QgsExtractLabelsAlgorithm::flags()
const
60 QString QgsExtractLabelsAlgorithm::group()
const
62 return QObject::tr(
"Cartography" );
65 QString QgsExtractLabelsAlgorithm::groupId()
const
67 return QStringLiteral(
"cartography" );
70 void QgsExtractLabelsAlgorithm::initAlgorithm(
const QVariantMap & )
73 QStringLiteral(
"EXTENT" ),
74 QObject::tr(
"Map extent" ) ) );
77 QStringLiteral(
"SCALE" ),
78 QObject::tr(
"Map scale" ) ) );
80 std::unique_ptr<QgsProcessingParameterMapTheme> mapThemeParameter = std::make_unique<QgsProcessingParameterMapTheme>(
81 QStringLiteral(
"MAP_THEME" ),
82 QObject::tr(
"Map theme" ),
84 mapThemeParameter->setHelp( QObject::tr(
"This parameter is optional. When left unset, the algorithm will fallback to extracting labels from all currently visible layers in the project." ) );
85 addParameter( mapThemeParameter.release() );
88 QStringLiteral(
"INCLUDE_UNPLACED" ),
89 QObject::tr(
"Include unplaced labels" ),
90 QVariant(
true ),
true ) );
92 std::unique_ptr<QgsProcessingParameterNumber> dpiParameter = std::make_unique<QgsProcessingParameterNumber>(
93 QStringLiteral(
"DPI" ),
94 QObject::tr(
"Map resolution (in DPI)" ),
96 QVariant( 96.0 ),
true );
98 addParameter( dpiParameter.release() );
101 QStringLiteral(
"OUTPUT" ),
102 QObject::tr(
"Extracted labels" ),
106 QString QgsExtractLabelsAlgorithm::shortDescription()
const
108 return QObject::tr(
"Converts map labels to a point layer with relevant details saved as attributes." );
111 QString QgsExtractLabelsAlgorithm::shortHelpString()
const
113 return QObject::tr(
"This algorithm extracts label information from a rendered map at a given extent and scale.\n\n"
114 "If a map theme is provided, the rendered map will match the visibility and symbology of that theme. If left blank, all visible layers from the project will be used.\n\n"
115 "Extracted label information include: position (served as point geometries), the associated layer name and feature ID, label text, rotation (in degree, clockwise), multiline alignment, and font details." );
118 QgsExtractLabelsAlgorithm *QgsExtractLabelsAlgorithm::createInstance()
const
120 return new QgsExtractLabelsAlgorithm();
127 : mMapLayerNames( mapLayerNames )
128 , mFeedback( feedback )
134 processLabel( layerId, context, label, settings,
false );
139 processLabel( layerId, context, label, settings,
true );
144 if ( mFeedback->isCanceled() )
153 if ( !mCurvedWarningPushed.contains( layerId ) )
155 mCurvedWarningPushed << layerId;
156 mFeedback->pushWarning( QObject::tr(
"Curved placement not supported, skipping labels from layer %1" ).arg( mMapLayerNames.value( layerId ) ) );
166 const QMap< QgsPalLayerSettings::Property, QVariant > &dataDefinedValues = labelFeature->
dataDefinedValues();
177 labelSettings.wrapChar,
178 labelSettings.autoWrapLength,
179 labelSettings.useMaxLineLengthForAutoWrap ).join(
'\n' );
181 QString labelAlignment;
186 switch ( labelSettings.multilineAlign )
188 case QgsPalLayerSettings::QgsPalLayerSettings::MultiRight:
189 labelAlignment = QStringLiteral(
"right" );
192 case QgsPalLayerSettings::QgsPalLayerSettings::MultiCenter:
193 labelAlignment = QStringLiteral(
"center" );
196 case QgsPalLayerSettings::QgsPalLayerSettings::MultiLeft:
197 labelAlignment = QStringLiteral(
"left" );
200 case QgsPalLayerSettings::QgsPalLayerSettings::MultiJustify:
201 labelAlignment = QStringLiteral(
"justify" );
210 labelAlignment = QStringLiteral(
"right" );
216 labelAlignment = QStringLiteral(
"center" );
222 labelAlignment = QStringLiteral(
"left" );
229 ? -( label->
getAlpha() * 180 / M_PI ) + 360
233 const QString fontFamily = font.family();
234 const QString fontStyle = font.styleName();
235 const double fontSize =
static_cast<double>( font.pixelSize() ) * 72 / context.
painter()->device()->logicalDpiX();
236 const bool fontItalic = font.italic();
237 const bool fontBold = font.bold();
238 const bool fontUnderline = font.underline();
239 const double fontLetterSpacing = font.letterSpacing();
240 const double fontWordSpacing = font.wordSpacing();
260 const QString formatColor = format.
color().name();
261 const double formatOpacity = format.
opacity() * 100;
262 const double formatLineHeight = format.
lineHeight();
269 const bool bufferDraw = buffer.
enabled();
270 double bufferSize = 0.0;
272 double bufferOpacity = 0.0;
291 bufferSize = bufferSize * 72 / context.
painter()->device()->logicalDpiX();
292 bufferColor = buffer.
color().name();
293 bufferOpacity = buffer.
opacity() * 100;
297 attributes << mMapLayerNames.value( layerId ) << fid
298 << labelText << label->
getWidth() << label->
getHeight() << labelRotation << unplacedLabel
299 << fontFamily << fontSize << fontItalic << fontBold << fontUnderline << fontStyle << fontLetterSpacing << fontWordSpacing
300 << labelAlignment << formatLineHeight << formatColor << formatOpacity
301 << bufferDraw << bufferSize << bufferColor << bufferOpacity;
303 double x = label->
getX();
304 double y = label->
getY();
313 QList<QgsFeature> features;
317 QMap<QString, QString> mMapLayerNames;
318 QList<QString> mCurvedWarningPushed;
325 const QgsRectangle extent = parameterAsExtent( parameters, QStringLiteral(
"EXTENT" ), context );
326 const double scale = parameterAsDouble( parameters, QStringLiteral(
"SCALE" ), context );
329 throw QgsProcessingException( QObject::tr(
"Invalid scale value, a number greater than 0 is required" ) );
331 double dpi = parameterAsDouble( parameters, QStringLiteral(
"DPI" ), context );
343 fields.
append(
QgsField( QStringLiteral(
"Layer" ), QVariant::String, QString(), 0, 0 ) );
344 fields.
append(
QgsField( QStringLiteral(
"FeatureID" ), QVariant::LongLong, QString(), 20 ) );
345 fields.
append(
QgsField( QStringLiteral(
"LabelText" ), QVariant::String, QString(), 0, 0 ) );
346 fields.
append(
QgsField( QStringLiteral(
"LabelWidth" ), QVariant::Double, QString(), 20, 8 ) );
347 fields.
append(
QgsField( QStringLiteral(
"LabelHeight" ), QVariant::Double, QString(), 20, 8 ) );
348 fields.
append(
QgsField( QStringLiteral(
"LabelRotation" ), QVariant::Double, QString(), 20, 2 ) );
349 fields.
append(
QgsField( QStringLiteral(
"LabelUnplaced" ), QVariant::Bool, QString(), 1, 0 ) );
350 fields.
append(
QgsField( QStringLiteral(
"Family" ), QVariant::String, QString(), 0, 0 ) );
351 fields.
append(
QgsField( QStringLiteral(
"Size" ), QVariant::Double, QString(), 20, 4 ) );
352 fields.
append(
QgsField( QStringLiteral(
"Italic" ), QVariant::Bool, QString(), 1, 0 ) );
353 fields.
append(
QgsField( QStringLiteral(
"Bold" ), QVariant::Bool, QString(), 1, 0 ) );
354 fields.
append(
QgsField( QStringLiteral(
"Underline" ), QVariant::Bool, QString(), 1, 0 ) );
355 fields.
append(
QgsField( QStringLiteral(
"FontStyle" ), QVariant::String, QString(), 0, 0 ) );
356 fields.
append(
QgsField( QStringLiteral(
"FontLetterSpacing" ), QVariant::Double, QString(), 20, 4 ) );
357 fields.
append(
QgsField( QStringLiteral(
"FontWordSpacing" ), QVariant::Double, QString(), 20, 4 ) );
358 fields.
append(
QgsField( QStringLiteral(
"MultiLineAlignment" ), QVariant::String, QString(), 0, 0 ) );
359 fields.
append(
QgsField( QStringLiteral(
"MultiLineHeight" ), QVariant::Double, QString(), 20, 2 ) );
360 fields.
append(
QgsField( QStringLiteral(
"Color" ), QVariant::String, QString(), 7, 0 ) );
361 fields.
append(
QgsField( QStringLiteral(
"FontOpacity" ), QVariant::Double, QString(), 20, 1 ) );
362 fields.
append(
QgsField( QStringLiteral(
"BufferDraw" ), QVariant::Bool, QString(), 1, 0 ) );
363 fields.
append(
QgsField( QStringLiteral(
"BufferSize" ), QVariant::Double, QString(), 20, 4 ) );
364 fields.
append(
QgsField( QStringLiteral(
"BufferColor" ), QVariant::String, QString(), 7, 0 ) );
365 fields.
append(
QgsField( QStringLiteral(
"BufferOpacity" ), QVariant::Double, QString(), 20, 1 ) );
393 nullPaintDevice.
setOutputDpi(
static_cast< int >( std::round( dpi ) ) );
394 QPainter painter( &nullPaintDevice );
397 ExtractLabelSink labelSink( mMapLayerNames, feedback );
398 renderJob.setLabelSink( &labelSink );
400 feedback->
pushInfo( QObject::tr(
"Extracting labels" ) );
403 multiStepFeedback.setCurrentStep( 0 );
408 int labelsCollectedFromLayers = 0;
411 multiStepFeedback.pushInfo( QObject::tr(
"Collecting labelled features from %1" ).arg( mMapLayerNames.value( layerId ) ) );
412 multiStepFeedback.setProgress( 100.0 *
static_cast< double >( labelsCollectedFromLayers ) / mMapLayers.size() );
413 labelsCollectedFromLayers++;
418 multiStepFeedback.setCurrentStep( 1 );
419 multiStepFeedback.pushInfo( QObject::tr(
"Registering labels" ) );
424 multiStepFeedback.setCurrentStep( 2 );
425 if ( !provider->layerId().isEmpty() )
427 multiStepFeedback.pushInfo( QObject::tr(
"Adding labels from %1" ).arg( mMapLayerNames.value( provider->layerId() ) ) );
432 multiStepFeedback.setCurrentStep( 3 );
433 if ( !provider->layerId().isEmpty() )
435 multiStepFeedback.pushInfo( QObject::tr(
"Generating label placement candidates for %1" ).arg( mMapLayerNames.value( provider->layerId() ) ) );
440 multiStepFeedback.setCurrentStep( 4 );
441 multiStepFeedback.setProgressText( QObject::tr(
"Calculating obstacle costs" ) );
445 multiStepFeedback.setCurrentStep( 5 );
446 multiStepFeedback.setProgressText( QObject::tr(
"Calculating label conflicts" ) );
450 multiStepFeedback.setCurrentStep( 6 );
451 multiStepFeedback.setProgressText( QObject::tr(
"Finalizing candidates" ) );
455 multiStepFeedback.setCurrentStep( 7 );
456 multiStepFeedback.setProgressText( QObject::tr(
"Reducing problem" ) );
460 multiStepFeedback.setCurrentStep( 8 );
461 multiStepFeedback.setProgressText( QObject::tr(
"Determining optimal label placements" ) );
465 multiStepFeedback.setProgressText( QObject::tr(
"Labeling complete" ) );
470 multiStepFeedback.setProgress( progress );
477 qDeleteAll( mMapLayers );
480 multiStepFeedback.setCurrentStep( 9 );
481 feedback->
pushInfo( QObject::tr(
"Writing %n label(s) to output layer",
"", labelSink.features.count() ) );
482 const double step = !labelSink.features.empty() ? 100.0 / labelSink.features.count() : 1;
483 long long index = -1;
484 for (
QgsFeature &feature : labelSink.features )
487 multiStepFeedback.setProgress( step * index );
499 vl->renderer()->setReferenceScale( scale );
504 settings.
fieldName = QStringLiteral(
"LabelText" );
513 textFormat.
setColor( QColor( 0, 0, 0 ) );
541 vl->setLabeling( labeling );
542 vl->setLabelsEnabled(
true );
544 QString errorMessage;
545 vl->saveStyleToDatabase( QString(), QString(),
true, QString(), errorMessage );
549 outputs.insert( QStringLiteral(
"OUTPUT" ), dest );
557 const QString mapTheme = parameterAsString( parameters, QStringLiteral(
"MAP_THEME" ), context );
565 mMapLayers.push_back( l->clone() );
570 if ( mMapLayers.isEmpty() )
572 QList<QgsMapLayer *> layers;
574 const QList<QgsLayerTreeLayer *> layerTreeLayers = root->
findLayers();
575 layers.reserve( layerTreeLayers.size() );
579 if ( nodeLayer->isVisible() && root->
layerOrder().contains( layer ) )
583 for (
const QgsMapLayer *l : std::as_const( layers ) )
586 mMapLayers.push_back( l->clone() );
590 for (
const QgsMapLayer *l : std::as_const( mMapLayers ) )
592 mMapLayerNames.insert( l->id(), l->name() );
595 mCrs = parameterAsExtentCrs( parameters, QStringLiteral(
"EXTENT" ), context );
596 if ( !mCrs.isValid() )
599 bool includeUnplaced = parameterAsBoolean( parameters, QStringLiteral(
"INCLUDE_UNPLACED" ), context );
@ UseRenderingOptimization
Enable vector simplification and other rendering optimizations.
@ DrawLabeling
Enable drawing of labels on top of the map.
@ SkipSymbolRendering
Disable symbol rendering while still drawing labels if enabled (since QGIS 3.24)
The QgsAbstractLabelProvider class is an interface class.
Abstract base class - its implementations define different approaches to the labeling of a vector lay...
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object.
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...
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
@ RegeneratePrimaryKey
This flag indicates, that a primary key field cannot be guaranteed to be unique and the sink should i...
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 progressChanged(double progress)
Emitted when the feedback object reports a progress change.
void canceled()
Internal routines can connect to this signal if they use event loop.
bool isCanceled() const SIP_HOLDGIL
Tells whether the operation has been canceled already.
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.
void setIsObstacle(bool isObstacle)
Sets whether features are obstacles to labels of other layers.
Abstract base class that can be used to intercept rendered labels from a labeling / rendering job.
virtual void drawUnplacedLabel(const QString &layerId, QgsRenderContext &context, pal::LabelPosition *label, const QgsPalLayerSettings &settings)
The drawLabel method is called for each unplaced label.
virtual void drawLabel(const QString &layerId, QgsRenderContext &context, pal::LabelPosition *label, const QgsPalLayerSettings &settings)=0
The drawLabel method is called for each label that is being drawn.
void obstacleCostingAboutToBegin()
Emitted when the obstacle costing is about to begin.
void solvingPlacementAboutToBegin()
Emitted when the problem solving step is about to begin.
void calculatingConflictsAboutToBegin()
Emitted when the conflict handling step is about to begin.
void reductionAboutToBegin()
Emitted when the candidate reduction step is about to begin.
void labelRegistrationAboutToBegin()
Emitted when the label registration is about to begin.
void solvingPlacementFinished()
Emitted when the problem solving step is finished.
void finalizingCandidatesAboutToBegin()
Emitted when the label candidates are about to be finalized.
void candidateCreationAboutToBegin(QgsAbstractLabelProvider *provider)
Emitted when the label candidate creation is about to begin for a provider.
void providerRegistrationAboutToBegin(QgsAbstractLabelProvider *provider)
Emitted when the label registration is about to begin for a provider.
@ CollectUnplacedLabels
Whether unplaced labels should be collected in the labeling results (regardless of whether they are b...
@ DrawUnplacedLabels
Whether to render unplaced labels as an indicator/warning for users.
void setFlag(Flag f, bool enabled=true)
Sets whether a particual flag is enabled.
QList< QgsLayerTreeLayer * > findLayers() const
Find all layer nodes.
Layer tree node points to a map layer.
Namespace with helper functions for layer tree operations.
QList< QgsMapLayer * > layerOrder() const
The order in which layers will be rendered on the canvas.
Base class for all map layer types.
Job implementation that renders everything sequentially using a custom painter.
void cancel() override
Stop the rendering job - does not return until the job has terminated.
void renderingLayersFinished()
Emitted when the layers are rendered.
void finished()
emitted when asynchronous rendering is finished (or canceled).
void layerRenderingStarted(const QString &layerId)
Emitted just before rendering starts for a particular layer.
The QgsMapSettings class contains configuration for rendering of the map.
void setLayers(const QList< QgsMapLayer * > &layers)
Sets the list of layers to render in the map.
void setOutputDpi(double dpi)
Sets the dpi (dots per inch) used for conversion between real world units (e.g.
void setLayerStyleOverrides(const QMap< QString, QString > &overrides)
Sets the map of map layer style overrides (key: layer ID, value: style name) where a different style ...
void setExtent(const QgsRectangle &rect, bool magnified=true)
Sets the coordinates of the rectangle which should be rendered.
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
void setLabelingEngineSettings(const QgsLabelingEngineSettings &settings)
Sets the global configuration of the labeling engine.
void setOutputSize(QSize size)
Sets the size of the resulting map image, in pixels.
void setFlag(Qgis::MapSettingsFlag flag, bool on=true)
Enable or disable a particular flag (other flags are not affected)
void setDestinationCrs(const QgsCoordinateReferenceSystem &crs)
Sets the destination crs (coordinate reference system) for the map render.
bool hasMapTheme(const QString &name) const
Returns whether a map theme with a matching name exists.
QList< QgsMapLayer * > mapThemeVisibleLayers(const QString &name) const
Returns the list of layers that are visible for the specified map theme.
QMap< QString, QString > mapThemeStyleOverrides(const QString &name)
Gets layer style overrides (for QgsMapSettings) of the visible layers for given map theme.
Null painter device that can be used for map renderer jobs which use custom painters.
void setOutputSize(const QSize &size)
Sets the size of the device in pixels.
void setOutputDpi(const int dpi)
Sets the dpi of the device.
static QStringList splitToLines(const QString &text, const QString &wrapCharacter, int autoWrapLength=0, bool useMaxLineLengthWhenAutoWrapping=true)
Splits a text string to a list of separate lines, using a specified wrap character (wrapCharacter).
Contains settings for how a map layer will be labeled.
void setFormat(const QgsTextFormat &format)
Sets the label text formatting settings, e.g., font settings, buffer settings, etc.
bool displayAll
If true, all features will be labelled even when overlaps occur.
QuadrantPosition quadOffset
Sets the quadrant in which to offset labels from feature.
@ PerimeterCurved
Arranges candidates following the curvature of a polygon's boundary. Applies to polygon layers only.
@ Curved
Arranges candidates following the curvature of a line feature. Applies to line layers only.
@ OverPoint
Arranges candidates over a point (or centroid of a polygon), or at a preset offset from the point....
@ LabelRotation
Label rotation.
@ Underline
Use underline.
@ FontLetterSpacing
Letter spacing.
@ BufferOpacity
Buffer opacity.
@ Italic
Use italic style.
@ FontWordSpacing
Word spacing.
@ FontOpacity
Text opacity.
const QgsLabelObstacleSettings & obstacleSettings() const
Returns the label obstacle settings.
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the label's property collection, used for data defined overrides.
QString fieldName
Name of field (or an expression) to use for label text.
Point geometry type, with support for z-dimension and m-values.
virtual Flags flags() const
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
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.
Custom exception class for processing related exceptions.
Base class for providing feedback from a processing algorithm.
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.
Processing feedback object for multi-step operations.
A boolean parameter for processing algorithms.
@ FlagAdvanced
Parameter is an advanced parameter which should be hidden from users by default.
A rectangular map extent parameter for processing algorithms.
A feature sink output for processing algorithms.
@ Double
Double/float values.
A double numeric parameter for map scale values.
static QgsMapLayer * mapLayerFromString(const QString &string, QgsProcessingContext &context, bool allowLoadingNewLayers=true, QgsProcessingUtils::LayerHint typeHint=QgsProcessingUtils::LayerHint::UnknownType)
Interprets a string as a map layer within the supplied context.
@ TypeVectorPoint
Vector point layers.
QgsMapThemeCollection * mapThemeCollection
QgsLayerTree * layerTreeRoot() const
Returns pointer to the root (invisible) node of the project's layer tree.
QgsCoordinateReferenceSystem crs
const QgsLabelingEngineSettings & labelingEngineSettings() const
Returns project's global labeling engine settings.
A grouped map of multiple QgsProperty objects, each referenced by a integer key value.
void setProperty(int key, const QgsProperty &property)
Adds a property to the collection and takes ownership of it.
static QgsProperty fromExpression(const QString &expression, bool isActive=true)
Returns a new ExpressionBasedProperty created from the specified expression.
static QgsProperty fromField(const QString &fieldName, bool isActive=true)
Returns a new FieldBasedProperty created from the specified field name.
A rectangle specified with double values.
Contains information about the context of a rendering operation.
void setRenderingStopped(bool stopped)
Sets whether the rendering operation has been stopped and any ongoing rendering should be canceled im...
QPainter * painter()
Returns the destination QPainter for the render operation.
double convertToPainterUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale(), Qgis::RenderSubcomponentProperty property=Qgis::RenderSubcomponentProperty::Generic) const
Converts a size from the specified units to painter units (pixels).
Calculates scale for a given combination of canvas size, map extent, and monitor dpi.
void setDpi(double dpi)
Sets the dpi (dots per inch) for the output resolution, to be used in scale calculations.
void setMapUnits(QgsUnitTypes::DistanceUnit mapUnits)
Set the map units.
QSizeF calculateImageSize(const QgsRectangle &mapExtent, double scale) const
Calculate the image size in pixel (physical) units.
Container for settings relating to a text buffer.
double size() const
Returns the size of the buffer.
void setColor(const QColor &color)
Sets the color for the buffer.
void setOpacity(double opacity)
Sets the buffer opacity.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
bool enabled() const
Returns whether the buffer is enabled.
double opacity() const
Returns the buffer opacity.
void setEnabled(bool enabled)
Sets whether the text buffer will be drawn.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the buffer size.
QColor color() const
Returns the color of the buffer.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units used for the buffer size.
void setSize(double size)
Sets the size of the buffer.
Container for all settings relating to text rendering.
void setColor(const QColor &color)
Sets the color that text will be rendered in.
void setSize(double size)
Sets the size for rendered text.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the size.
double lineHeight() const
Returns the line height for text.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the size of rendered text.
void setOpacity(double opacity)
Sets the text's opacity.
void setBuffer(const QgsTextBufferSettings &bufferSettings)
Sets the text's buffer settings.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the size of rendered text.
double opacity() const
Returns the text's opacity.
double size() const
Returns the size for rendered text.
QColor color() const
Returns the color that text will be rendered in.
QgsTextBufferSettings & buffer()
Returns a reference to the text buffer settings.
void setLineHeight(double height)
Sets the line height for text.
Class that adds extra information to QgsLabelFeature for text labels.
const QMap< QgsPalLayerSettings::Property, QVariant > & dataDefinedValues() const
Gets data-defined values.
QFont definedFont()
Font to be used for rendering.
QString text(int partId) const
Returns the text component corresponding to a specified label part.
@ RenderPercentage
Percentage of another measurement (e.g., canvas size, feature size)
@ RenderPoints
Points (e.g., for font sizes)
Basic implementation of the labeling interface.
Represents a vector layer which manages a vector based data sets.
QgsFeatureId featureId() const
Returns the unique ID of the feature.
QgsLabelFeature * feature()
Returns the parent feature.
LabelPosition is a candidate feature label position.
double getAlpha() const
Returns the angle to rotate text (in rad).
Quadrant getQuadrant() const
FeaturePart * getFeaturePart() const
Returns the feature corresponding to this labelposition.
double getX(int i=0) const
Returns the down-left x coordinate.
double getY(int i=0) const
Returns the down-left y coordinate.
@ VectorLayer
Vector layer.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features