37#include <QDomDocument>
76 mSymbol->startRender( context, fields );
91 QSet<QString> attributes;
93 attributes.unite(
mSymbol->usedAttributes( context ) );
120 return mSymbol ? QStringLiteral(
"SINGLE: %1" ).arg(
mSymbol->dump() ) : QString();
133 QVariantMap newProps = props;
135 QDomElement ruleElem = doc.createElement( QStringLiteral(
"se:Rule" ) );
136 element.appendChild( ruleElem );
138 QDomElement nameElem = doc.createElement( QStringLiteral(
"se:Name" ) );
139 nameElem.appendChild( doc.createTextNode( QStringLiteral(
"Single symbol" ) ) );
140 ruleElem.appendChild( nameElem );
158 QDomElement symbolsElem = element.firstChildElement( QStringLiteral(
"symbols" ) );
159 if ( symbolsElem.isNull() )
164 if ( !symbolMap.contains( QStringLiteral(
"0" ) ) )
172 const QDomElement rotationElem = element.firstChildElement( QStringLiteral(
"rotation" ) );
173 if ( !rotationElem.isNull() && !rotationElem.attribute( QStringLiteral(
"field" ) ).isEmpty() )
178 const QDomElement sizeScaleElem = element.firstChildElement( QStringLiteral(
"sizescale" ) );
179 if ( !sizeScaleElem.isNull() && !sizeScaleElem.attribute( QStringLiteral(
"field" ) ).isEmpty() )
183 sizeScaleElem.attribute( QStringLiteral(
"field" ) ) );
186 const QDomElement ddsLegendSizeElem = element.firstChildElement( QStringLiteral(
"data-defined-size-legend" ) );
187 if ( !ddsLegendSizeElem.isNull() )
201 const QDomElement ruleElem = element.firstChildElement( QStringLiteral(
"Rule" ) );
202 if ( ruleElem.isNull() )
204 QgsDebugError( QStringLiteral(
"no Rule elements found!" ) );
208 QString label, description;
212 QDomElement childElem = ruleElem.firstChildElement();
213 while ( !childElem.isNull() )
215 if ( childElem.localName() == QLatin1String(
"Name" ) )
219 if ( label.isEmpty() )
220 label = childElem.firstChild().nodeValue();
222 else if ( childElem.localName() == QLatin1String(
"Description" ) )
225 const QDomElement titleElem = childElem.firstChildElement( QStringLiteral(
"Title" ) );
226 if ( !titleElem.isNull() )
228 label = titleElem.firstChild().nodeValue();
231 const QDomElement abstractElem = childElem.firstChildElement( QStringLiteral(
"Abstract" ) );
232 if ( !abstractElem.isNull() )
234 description = abstractElem.firstChild().nodeValue();
237 else if ( childElem.localName() == QLatin1String(
"Abstract" ) )
240 description = childElem.firstChild().nodeValue();
242 else if ( childElem.localName() == QLatin1String(
"Title" ) )
245 label = childElem.firstChild().nodeValue();
247 else if ( childElem.localName().endsWith( QLatin1String(
"Symbolizer" ) ) )
253 childElem = childElem.nextSiblingElement();
256 if ( layers.isEmpty() )
260 std::unique_ptr< QgsSymbol >
symbol;
264 symbol = std::make_unique< QgsLineSymbol >( layers );
268 symbol = std::make_unique< QgsFillSymbol >( layers );
272 symbol = std::make_unique< QgsMarkerSymbol >( layers );
287 rendererElem.setAttribute( QStringLiteral(
"type" ), QStringLiteral(
"singleSymbol" ) );
292 rendererElem.appendChild( symbolsElem );
294 const QDomElement rotationElem = doc.createElement( QStringLiteral(
"rotation" ) );
295 rendererElem.appendChild( rotationElem );
297 const QDomElement sizeScaleElem = doc.createElement( QStringLiteral(
"sizescale" ) );
298 rendererElem.appendChild( sizeScaleElem );
302 QDomElement ddsLegendElem = doc.createElement( QStringLiteral(
"data-defined-size-legend" ) );
304 rendererElem.appendChild( ddsLegendElem );
335 return QSet< QString >() << QStringLiteral(
"0" );
340 if ( key == QLatin1String(
"0" ) )
343 return QStringLiteral(
"TRUE" );
361 if ( renderer->
type() == QLatin1String(
"singleSymbol" ) )
365 else if ( renderer->
type() == QLatin1String(
"pointDisplacement" ) || renderer->
type() == QLatin1String(
"pointCluster" ) )
368 if ( pointDistanceRenderer )
371 else if ( renderer->
type() == QLatin1String(
"invertedPolygonRenderer" ) )
374 if ( invertedPolygonRenderer )
QFlags< FeatureRendererFlag > FeatureRendererFlags
Flags controlling behavior of vector feature renderers.
@ AffectsLabeling
If present, indicates that the renderer will participate in the map labeling problem.
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
@ AffectsLabeling
If present, indicates that the symbol will participate in the map labeling problem.
Object that keeps configuration of appearance of marker symbol's data-defined size in legend.
static QgsDataDefinedSizeLegend * readXml(const QDomElement &elem, const QgsReadWriteContext &context) SIP_FACTORY
Creates instance from given element and returns it (caller takes ownership). Returns nullptr on error...
void updateFromSymbolAndProperty(const QgsMarkerSymbol *symbol, const QgsProperty &ddSize)
Updates the list of classes, source symbol and title label from given symbol and property.
QgsLegendSymbolList legendSymbolList() const
Generates legend symbol items according to the configuration.
Abstract base class for all 2D vector feature renderers.
virtual void stopRender(QgsRenderContext &context)
Must be called when a render cycle has finished, to allow the renderer to clean up.
void copyRendererData(QgsFeatureRenderer *destRenderer) const
Clones generic renderer data to another renderer.
static void convertSymbolRotation(QgsSymbol *symbol, const QString &field)
void saveRendererData(QDomDocument &doc, QDomElement &element, const QgsReadWriteContext &context)
Saves generic renderer data into the specified element.
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)
Must be called when a new render cycle is started.
static void convertSymbolSizeScale(QgsSymbol *symbol, Qgis::ScaleMethod method, const QString &field)
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Container of fields for a vector layer.
QgsInvertedPolygonRenderer is a polygon-only feature renderer used to display features inverted,...
The class stores information about one class/rule of a vector layer renderer in a unified way that ca...
A marker symbol type, for rendering Point and MultiPoint geometries.
const QgsFeatureRenderer * embeddedRenderer() const override
Returns the current embedded renderer (subrenderer) for this feature renderer.
An abstract base class for distance based point renderers (e.g., clusterer and displacement renderers...
const QgsFeatureRenderer * embeddedRenderer() const override
Returns the current embedded renderer (subrenderer) for this feature renderer.
A store for object properties.
bool isActive() const
Returns whether the property is currently active.
The class is used as a container of context for various read/write operations on other objects.
Contains information about the context of a rendering operation.
QSet< QString > usedAttributes(const QgsRenderContext &context) const override
Returns a list of attributes required by this renderer.
QDomElement save(QDomDocument &doc, const QgsReadWriteContext &context) override
Stores renderer properties to an XML element.
QgsSymbol * symbol() const
Returns the symbol which will be rendered for every feature.
Qgis::FeatureRendererFlags flags() const override
Returns flags associated with the renderer.
QString legendKeyToExpression(const QString &key, QgsVectorLayer *layer, bool &ok) const override
Attempts to convert the specified legend rule key to a QGIS expression matching the features displaye...
void setSymbol(QgsSymbol *s)
Sets the symbol which will be rendered for every feature.
static QgsFeatureRenderer * createFromSld(QDomElement &element, Qgis::GeometryType geomType)
Creates a new single symbol renderer from an SLD element.
std::unique_ptr< QgsSymbol > mSymbol
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified symbology visitor, causing it to visit all symbols associated with the renderer...
void setLegendSymbolItem(const QString &key, QgsSymbol *symbol) override
Sets the symbol to be used for a legend symbol item.
static QgsFeatureRenderer * create(QDomElement &element, const QgsReadWriteContext &context)
Creates a new single symbol renderer from an XML element, using the supplied read/write context.
~QgsSingleSymbolRenderer() override
QSet< QString > legendKeysForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns legend keys matching a specified feature.
void setDataDefinedSizeLegend(QgsDataDefinedSizeLegend *settings)
Configures appearance of legend when renderer is configured to use data-defined size for marker symbo...
void stopRender(QgsRenderContext &context) override
Must be called when a render cycle has finished, to allow the renderer to clean up.
QgsLegendSymbolList legendSymbolItems() const override
Returns a list of symbology items for the legend.
void startRender(QgsRenderContext &context, const QgsFields &fields) override
Must be called when a new render cycle is started.
QgsDataDefinedSizeLegend * dataDefinedSizeLegend() const
Returns configuration of appearance of legend when using data-defined size for marker symbols.
std::unique_ptr< QgsDataDefinedSizeLegend > mDataDefinedSizeLegend
QgsSymbol * originalSymbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
Returns symbol for feature.
static QgsSingleSymbolRenderer * convertFromRenderer(const QgsFeatureRenderer *renderer)
Creates a new single symbol renderer from an existing renderer.
QgsSymbol * symbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const override
To be overridden.
void toSld(QDomDocument &doc, QDomElement &element, const QVariantMap &props=QVariantMap()) const override
used from subclasses to create SLD Rule elements following SLD v1.1 specs
QgsSingleSymbolRenderer * clone() const override
Create a deep copy of this renderer.
QgsSymbolList symbols(QgsRenderContext &context) const override
Returns list of symbols used by the renderer.
QString dump() const override
Returns debug information about this renderer.
QgsSingleSymbolRenderer(QgsSymbol *symbol)
Constructor for QgsSingleSymbolRenderer.
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 symbol entity for QgsStyle databases.
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 bool createSymbolLayerListFromSld(QDomElement &element, Qgis::GeometryType geomType, QList< QgsSymbolLayer * > &layers)
Creates a symbol layer list from a DOM element.
static Qgis::ScaleMethod decodeScaleMethod(const QString &str)
Decodes a symbol scale method from a string.
static void clearSymbolMap(QgsSymbolMap &symbols)
static QgsSymbolMap loadSymbols(QDomElement &element, const QgsReadWriteContext &context)
Reads a collection of symbols from XML and returns them in a map. Caller is responsible for deleting ...
static QDomElement saveSymbols(QgsSymbolMap &symbols, const QString &tagName, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a collection of symbols to XML with specified tagName for the top-level element.
Abstract base class for all rendered symbols.
Represents a vector layer which manages a vector based data sets.
QString qgsEnumValueToKey(const T &value, bool *returnOk=nullptr)
Returns the value for the given key of an enum.
QList< QgsLegendSymbolItem > QgsLegendSymbolList
#define QgsDebugError(str)
#define RENDERER_TAG_NAME
QMap< QString, QgsSymbol * > QgsSymbolMap
QList< QgsSymbol * > QgsSymbolList
QList< QgsSymbolLayer * > QgsSymbolLayerList
Contains information relating to the style entity currently being visited.