29   QString 
type = element.attribute( QStringLiteral( 
"type" ) );
 
   30   if ( 
type == QLatin1String( 
"rule-based" ) )
 
   34   else if ( 
type == QLatin1String( 
"simple" ) )
 
   87   return QStringLiteral( 
"simple" );
 
   97   QDomElement elem = doc.createElement( QStringLiteral( 
"labeling" ) );
 
   98   elem.setAttribute( QStringLiteral( 
"type" ), QStringLiteral( 
"simple" ) );
 
   99   elem.appendChild( mSettings->writeXml( doc, context ) );
 
  105   Q_UNUSED( providerId )
 
  114     if ( !visitor->
visit( &entity ) )
 
  122   return mSettings->containsAdvancedEffects();
 
  127   QDomElement settingsElem = element.firstChildElement( QStringLiteral( 
"settings" ) );
 
  128   if ( !settingsElem.isNull() )
 
  140   double quadOffsetX = 0.5, quadOffsetY = 0.5;
 
  143   switch ( quadrantPosition )
 
  181   return QPointF( quadOffsetX, quadOffsetY );
 
  187 void appendSimpleFunction( QDomDocument &doc, QDomElement &parent, 
const QString &name, 
const QString &attribute )
 
  189   QDomElement 
function = doc.createElement( QStringLiteral( 
"ogc:Function" ) );
 
  190   function.setAttribute( QStringLiteral( 
"name" ), name );
 
  191   parent.appendChild( 
function );
 
  192   QDomElement 
property = doc.createElement( QStringLiteral( 
"ogc:PropertyName" ) );
 
  193   property.appendChild( doc.createTextNode( attribute ) );
 
  194   function.appendChild( property );
 
  199   std::unique_ptr<QgsMarkerSymbolLayer> layer;
 
  200   switch ( settings.
type() )
 
  228       switch ( settings.
type() )
 
  246       layer.reset( marker );
 
  249   layer->setEnabled( 
true );
 
  251   QSizeF size = settings.
size();
 
  252   layer->setSize( std::max( 1., std::max( size.width(), size.height() ) ) );
 
  253   layer->setSizeUnit( settings.
sizeUnit() );
 
  259     int alpha = std::round( settings.
opacity() * 255 );
 
  260     fillColor.setAlpha( alpha );
 
  261     strokeColor.setAlpha( alpha );
 
  263   layer->setFillColor( fillColor );
 
  264   layer->setStrokeColor( strokeColor );
 
  268     layer->setAngle( settings.
rotation() );
 
  271   layer->setOffset( settings.
offset() );
 
  272   layer->setOffsetUnit( settings.
offsetUnit() );
 
  279   QDomDocument doc = parent.ownerDocument();
 
  282   QDomElement textSymbolizerElement = doc.createElement( QStringLiteral( 
"se:TextSymbolizer" ) );
 
  283   parent.appendChild( textSymbolizerElement );
 
  287   QFont font = format.
font();
 
  288   QDomElement labelElement = doc.createElement( QStringLiteral( 
"se:Label" ) );
 
  289   textSymbolizerElement.appendChild( labelElement );
 
  292     labelElement.appendChild( doc.createComment( QStringLiteral( 
"SE Export for %1 not implemented yet" ).arg( 
settings.
getLabelExpression()->
dump() ) ) );
 
  293     labelElement.appendChild( doc.createTextNode( 
"Placeholder" ) );
 
  314       QDomElement propertyNameElement = doc.createElement( QStringLiteral( 
"ogc:PropertyName" ) );
 
  316       labelElement.appendChild( propertyNameElement );
 
  321   QDomElement fontElement = doc.createElement( QStringLiteral( 
"se:Font" ) );
 
  322   textSymbolizerElement.appendChild( fontElement );
 
  326   if ( format.
font().italic() )
 
  330   if ( format.
font().bold() )
 
  336   QDomElement labelPlacement = doc.createElement( QStringLiteral( 
"se:LabelPlacement" ) );
 
  337   textSymbolizerElement.appendChild( labelPlacement );
 
  338   double maxDisplacement = 0;
 
  339   double repeatDistance = 0;
 
  344       QDomElement pointPlacement = doc.createElement( 
"se:PointPlacement" );
 
  345       labelPlacement.appendChild( pointPlacement );
 
  360         QDomElement rotation = doc.createElement( 
"se:Rotation" );
 
  361         pointPlacement.appendChild( rotation );
 
  369       QDomElement pointPlacement = doc.createElement( 
"se:PointPlacement" );
 
  370       labelPlacement.appendChild( pointPlacement );
 
  377       double offset = std::sqrt( radius * radius / 2 ); 
 
  378       maxDisplacement = radius + 1; 
 
  387       QDomElement pointPlacement = doc.createElement( 
"se:PointPlacement" );
 
  388       labelPlacement.appendChild( pointPlacement );
 
  399       QDomElement linePlacement = doc.createElement( 
"se:LinePlacement" );
 
  400       labelPlacement.appendChild( linePlacement );
 
  407         QDomElement perpendicular = doc.createElement( 
"se:PerpendicularOffset" );
 
  408         linePlacement.appendChild( perpendicular );
 
  415         QDomElement repeat = doc.createElement( 
"se:Repeat" );
 
  416         linePlacement.appendChild( repeat );
 
  417         repeat.appendChild( doc.createTextNode( QStringLiteral( 
"true" ) ) );
 
  418         QDomElement gap = doc.createElement( 
"se:Gap" );
 
  419         linePlacement.appendChild( gap );
 
  425       QDomElement generalize = doc.createElement( 
"se:GeneralizeLine" );
 
  426       linePlacement.appendChild( generalize );
 
  427       generalize.appendChild( doc.createTextNode( QStringLiteral( 
"true" ) ) );
 
  436     QDomElement haloElement = doc.createElement( QStringLiteral( 
"se:Halo" ) );
 
  437     textSymbolizerElement.appendChild( haloElement );
 
  439     QDomElement radiusElement = doc.createElement( QStringLiteral( 
"se:Radius" ) );
 
  440     haloElement.appendChild( radiusElement );
 
  445     QDomElement fillElement = doc.createElement( QStringLiteral( 
"se:Fill" ) );
 
  446     haloElement.appendChild( fillElement );
 
  455   QDomElement fillElement = doc.createElement( QStringLiteral( 
"se:Fill" ) );
 
  456   textSymbolizerElement.appendChild( fillElement );
 
  468     layer->writeSldMarker( doc, textSymbolizerElement, props );
 
  475     QDomElement priorityElement = doc.createElement( QStringLiteral( 
"se:Priority" ) );
 
  476     textSymbolizerElement.appendChild( priorityElement );
 
  483     priorityElement.appendChild( doc.createTextNode( QString::number( priority ) ) );
 
  487   if ( font.underline() )
 
  490     textSymbolizerElement.appendChild( vo );
 
  492   if ( font.strikeOut() )
 
  495     textSymbolizerElement.appendChild( vo );
 
  498   if ( maxDisplacement > 0 )
 
  501     textSymbolizerElement.appendChild( vo );
 
  506     textSymbolizerElement.appendChild( vo );
 
  512       textSymbolizerElement.appendChild( vo );
 
  515   if ( repeatDistance > 0 )
 
  518     textSymbolizerElement.appendChild( vo );
 
  524     textSymbolizerElement.appendChild( vo );
 
  529     textSymbolizerElement.appendChild( vo );
 
  534     textSymbolizerElement.appendChild( vo );
 
  538       textSymbolizerElement.appendChild( vo );
 
  552           resizeType = QStringLiteral( 
"stretch" );
 
  556           resizeType = QStringLiteral( 
"proportional" );
 
  559         textSymbolizerElement.appendChild( voResize );
 
  562         QSizeF size = background.
size();
 
  563         if ( size.width() > 0 || size.height() > 0 )
 
  576           textSymbolizerElement.appendChild( voMargin );
 
  592   if ( mSettings->drawLabels )
 
  594     QDomDocument doc = parent.ownerDocument();
 
  596     QDomElement ruleElement = doc.createElement( QStringLiteral( 
"se:Rule" ) );
 
  597     parent.appendChild( ruleElement );
 
  600     if ( mSettings->scaleVisibility )
 
  602       QVariantMap scaleProps = QVariantMap();
 
  605       scaleProps.insert( 
"scaleMinDenom", 
qgsDoubleToString( mSettings->maximumScale ) );
 
  606       scaleProps.insert( 
"scaleMaxDenom", 
qgsDoubleToString( mSettings->minimumScale ) );
 
  618   Q_UNUSED( providerId )
 
Abstract base class - its implementations define different approaches to the labeling of a vector lay...
virtual bool accept(QgsStyleEntityVisitorInterface *visitor) const
Accepts the specified symbology visitor, causing it to visit all symbols associated with the labeling...
virtual void writeTextSymbolizer(QDomNode &parent, QgsPalLayerSettings &settings, const QVariantMap &props) const
Writes a TextSymbolizer element contents based on the provided labeling settings.
static QgsAbstractVectorLayerLabeling * create(const QDomElement &element, const QgsReadWriteContext &context)
Try to create instance of an implementation based on the XML data.
virtual QgsPalLayerSettings settings(const QString &providerId=QString()) const =0
Gets associated label settings.
static QgsPalLayerSettings defaultSettingsForLayer(const QgsVectorLayer *layer)
Returns the default layer settings to use for the specified vector layer.
virtual QString type() const =0
Unique type string of the labeling configuration implementation.
QString dump() const
Returns an expression string, constructed from the internal abstract syntax tree.
bool mergeLines() const
Returns true if connected line features with identical label text should be merged prior to generatin...
Abstract base class for marker symbol layers.
Contains settings for how a map layer will be labeled.
double yOffset
Vertical offset of label.
double maxCurvedCharAngleIn
Maximum angle between inside curved label characters (valid range 20.0 to 60.0).
double zIndex
Z-Index of label, where labels with a higher z-index are rendered on top of labels with a lower z-ind...
bool displayAll
If true, all features will be labelled even when overlaps occur.
double xOffset
Horizontal offset of label.
QgsExpression * getLabelExpression()
Returns the QgsExpression for this label settings.
QuadrantPosition quadOffset
Sets the quadrant in which to offset labels from feature.
@ ShowAll
Show upside down for all labels, including dynamic ones.
void readXml(const QDomElement &elem, const QgsReadWriteContext &context)
Read settings from a DOM element.
QgsUnitTypes::RenderUnit offsetUnits
Units for offsets of label.
double repeatDistance
Distance for repeating labels for a single 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.
@ Horizontal
Arranges horizontal candidates scattered throughout a polygon feature. Applies to polygon layers only...
@ Free
Arranges candidates scattered throughout a polygon feature. Candidates are rotated to respect the pol...
@ OverPoint
Arranges candidates over a point (or centroid of a polygon), or at a preset offset from the point....
@ AroundPoint
Arranges candidates in a circle around a point (or centroid of a polygon). Applies to point or polygo...
@ Line
Arranges candidates parallel to a generalised line representing the feature or parallel to a polygon'...
@ OrderedPositionsAroundPoint
Candidates are placed in predefined positions around a point. Preference is given to positions with g...
@ OutsidePolygons
Candidates are placed outside of polygon boundaries. Applies to polygon layers only....
int priority
Label priority.
bool labelPerPart
true if every part of a multi-part feature should be labeled.
QgsUnitTypes::RenderUnit distUnits
Units the distance from feature to the label.
QgsUnitTypes::RenderUnit repeatDistanceUnit
Units for repeating labels for a single feature.
OffsetType offsetType
Offset type for layer (only applies in certain placement modes)
double angleOffset
Label rotation, in degrees clockwise.
double maxCurvedCharAngleOut
Maximum angle between outside curved label characters (valid range -20.0 to -95.0)
const QgsLabelLineSettings & lineSettings() const
Returns the label line settings, which contain settings related to how the label engine places and fo...
@ FromSymbolBounds
Offset distance applies from rendered symbol bounds.
bool isExpression
true if this label is made from a expression string, e.g., FieldName || 'mm'
double dist
Distance from feature to the label.
const QgsTextFormat & format() const
Returns the label text formatting settings, e.g., font settings, buffer settings, etc.
UpsideDownLabels upsidedownLabels
Controls whether upside down labels are displayed and how they are handled.
QString fieldName
Name of field (or an expression) to use for label text.
The class is used as a container of context for various read/write operations on other objects.
static QgsRuleBasedLabeling * create(const QDomElement &element, const QgsReadWriteContext &context)
Create the instance from a DOM element with saved configuration.
void setShape(QgsSimpleMarkerSymbolLayerBase::Shape shape)
Sets the rendered marker shape.
Shape
Marker symbol shapes.
Simple marker symbol layer, consisting of a rendered shape with solid fill color and an stroke.
void setStrokeWidthUnit(QgsUnitTypes::RenderUnit u)
Sets the unit for the width of the marker's stroke.
void setStrokeWidth(double w)
Sets the width of the marker's stroke.
Capitalization
Capitalization options.
@ MixedCase
Mixed case, ie no change.
@ AllLowercase
Convert all characters to lowercase.
@ AllUppercase
Convert all characters to uppercase.
@ ForceFirstLetterToCapital
Convert just the first letter of each word to uppercase, leave the rest untouched.
An interface for classes which can visit style entity (e.g.
virtual bool visit(const QgsStyleEntityVisitorInterface::StyleLeaf &entity)
Called when the visitor will visit a style entity.
A label settings entity for QgsStyle databases.
void setStrokeWidth(double w)
void setStrokeWidthUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the stroke width.
static void createAnchorPointElement(QDomDocument &doc, QDomElement &element, QPointF anchor)
Creates a SE 1.1 anchor point element as a child of the specified element.
static void applyScaleDependency(QDomDocument &doc, QDomElement &ruleElem, QVariantMap &props)
Checks if the properties contain scaleMinDenom and scaleMaxDenom, if available, they are added into t...
static double rescaleUom(double size, QgsUnitTypes::RenderUnit unit, const QVariantMap &props)
Rescales the given size based on the uomScale found in the props, if any is found,...
static QDomElement createVendorOptionElement(QDomDocument &doc, const QString &name, const QString &value)
static void createDisplacementElement(QDomDocument &doc, QDomElement &element, QPointF offset)
static QDomElement createSvgParameterElement(QDomDocument &doc, const QString &name, const QString &value)
virtual QgsSymbolLayer * clone() const =0
Shall be reimplemented by subclasses to create a deep copy of the instance.
QgsSymbolLayer * symbolLayer(int layer)
Returns the symbol layer at the specified index.
int symbolLayerCount() const
Returns the total number of symbol layers contained in the symbol.
Container for settings relating to a text background object.
RotationType rotationType() const
Returns the method used for rotating the background shape.
QString svgFile() const
Returns the absolute path to the background SVG file, if set.
QSizeF size() const
Returns the size of the background shape.
QgsUnitTypes::RenderUnit strokeWidthUnit() const
Returns the units used for the shape's stroke width.
@ SizePercent
Shape size is determined by percent of text size.
@ SizeBuffer
Shape size is determined by adding a buffer margin around text.
bool enabled() const
Returns whether the background is enabled.
double opacity() const
Returns the background shape's opacity.
QgsUnitTypes::RenderUnit offsetUnit() const
Returns the units used for the shape's offset.
double rotation() const
Returns the rotation for the background shape, in degrees clockwise.
QColor fillColor() const
Returns the color used for filing the background shape.
SizeType sizeType() const
Returns the method used to determine the size of the background shape (e.g., fixed size or buffer aro...
ShapeType type() const
Returns the type of background shape (e.g., square, ellipse, SVG).
double strokeWidth() const
Returns the width of the shape's stroke (stroke).
@ ShapeMarkerSymbol
Marker symbol.
@ ShapeSquare
Square - buffered sizes only.
@ ShapeRectangle
Rectangle.
QColor strokeColor() const
Returns the color used for outlining the background shape.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units used for the shape's size.
@ RotationFixed
Shape rotation is a fixed angle.
QgsMarkerSymbol * markerSymbol() const
Returns the marker symbol to be rendered in the background.
QPointF offset() const
Returns the offset used for drawing the background shape.
Container for settings relating to a text buffer.
double size() const
Returns the size of the buffer.
bool enabled() const
Returns whether the buffer is enabled.
double opacity() const
Returns the buffer opacity.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the buffer size.
QColor color() const
Returns the color of the buffer.
Container for all settings relating to text rendering.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the size of rendered text.
QgsTextBackgroundSettings & background()
Returns a reference to the text background settings.
double opacity() const
Returns the text's opacity.
double size() const
Returns the size for rendered text.
QgsStringUtils::Capitalization capitalization() const
Returns the text capitalization style.
QColor color() const
Returns the color that text will be rendered in.
QFont font() const
Returns the font used for rendering text.
QgsTextBufferSettings & buffer()
Returns a reference to the text buffer settings.
RenderUnit
Rendering size units.
The QgsVectorLayerLabelProvider class implements a label provider for vector layers.
Basic implementation of the labeling interface.
QString type() const override
Unique type string of the labeling configuration implementation.
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified symbology visitor, causing it to visit all symbols associated with the labeling...
QgsPalLayerSettings settings(const QString &providerId=QString()) const override
Gets associated label settings.
QDomElement save(QDomDocument &doc, const QgsReadWriteContext &context) const override
Returns labeling configuration as XML element.
bool requiresAdvancedEffects() const override
Returns true if drawing labels requires advanced effects like composition modes, which could prevent ...
QgsVectorLayerSimpleLabeling(const QgsPalLayerSettings &settings)
Constructs simple labeling configuration with given initial settings.
void setSettings(QgsPalLayerSettings *settings, const QString &providerId=QString()) override
Set pal settings (takes ownership).
QgsVectorLayerLabelProvider * provider(QgsVectorLayer *layer) const override
static QgsVectorLayerSimpleLabeling * create(const QDomElement &element, const QgsReadWriteContext &context)
Create the instance from a DOM element with saved configuration.
QgsAbstractVectorLayerLabeling * clone() const override
Returns a new copy of the object.
void toSld(QDomNode &parent, const QVariantMap &props) const override
Writes the SE 1.1 TextSymbolizer element based on the current layer labeling settings.
Represents a vector layer which manages a vector based data sets.
Q_INVOKABLE QgsWkbTypes::GeometryType geometryType() const
Returns point, line or polygon.
QString displayField() const
This is a shorthand for accessing the displayExpression if it is a simple field.
double ANALYSIS_EXPORT angle(QgsPoint *p1, QgsPoint *p2, QgsPoint *p3, QgsPoint *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.
void appendSimpleFunction(QDomDocument &doc, QDomElement &parent, const QString &name, const QString &attribute)
QPointF quadOffsetToSldAnchor(QgsPalLayerSettings::QuadrantPosition quadrantPosition)
std::unique_ptr< QgsMarkerSymbolLayer > backgroundToMarkerLayer(const QgsTextBackgroundSettings &settings)