QGIS API Documentation
3.26.3-Buenos Aires (65e4edfdad)
|
Go to the documentation of this file.
42 #include <QDomElement>
43 #include <QDomDocument>
93 return QSet< QString >();
101 mThread = QThread::currentThread();
105 Q_ASSERT_X( mThread == QThread::currentThread(),
"QgsFeatureRenderer::startRender",
"startRender called in a different thread - use a cloned renderer instead" );
113 Q_ASSERT_X( mThread == QThread::currentThread(),
"QgsFeatureRenderer::stopRender",
"stopRender called in a different thread - use a cloned renderer instead" );
130 Q_ASSERT_X( mThread == QThread::currentThread(),
"QgsFeatureRenderer::renderFeature",
"renderFeature called in a different thread - use a cloned renderer instead" );
148 return QStringLiteral(
"UNKNOWN RENDERER\n" );
161 if ( element.isNull() )
165 const QString rendererType = element.attribute( QStringLiteral(
"type" ) );
174 r->
setUsingSymbolLevels( element.attribute( QStringLiteral(
"symbollevels" ), QStringLiteral(
"0" ) ).toInt() );
175 r->
setForceRasterRender( element.attribute( QStringLiteral(
"forceraster" ), QStringLiteral(
"0" ) ).toInt() );
176 r->
setReferenceScale( element.attribute( QStringLiteral(
"referencescale" ), QStringLiteral(
"-1" ) ).toDouble() );
179 const QDomElement effectElem = element.firstChildElement( QStringLiteral(
"effect" ) );
180 if ( !effectElem.isNull() )
186 const QDomElement orderByElem = element.firstChildElement( QStringLiteral(
"orderby" ) );
188 r->
setOrderByEnabled( element.attribute( QStringLiteral(
"enableorderby" ), QStringLiteral(
"0" ) ).toInt() );
206 rendererElem.setAttribute( QStringLiteral(
"forceraster" ), (
mForceRaster ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) ) );
207 rendererElem.setAttribute( QStringLiteral(
"symbollevels" ), (
mUsingSymbolLevels ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) ) );
208 rendererElem.setAttribute( QStringLiteral(
"referencescale" ),
mReferenceScale );
215 QDomElement
orderBy = doc.createElement( QStringLiteral(
"orderby" ) );
217 rendererElem.appendChild(
orderBy );
219 rendererElem.setAttribute( QStringLiteral(
"enableorderby" ), (
mOrderByEnabled ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) ) );
224 const QDomElement element = node.toElement();
225 if ( element.isNull() )
229 const QDomElement userStyleElem = element.firstChildElement( QStringLiteral(
"UserStyle" ) );
230 if ( userStyleElem.isNull() )
233 errorMessage = QStringLiteral(
"Info: UserStyle element not found." );
238 QDomElement featTypeStyleElem = userStyleElem.firstChildElement( QStringLiteral(
"FeatureTypeStyle" ) );
239 if ( featTypeStyleElem.isNull() )
241 errorMessage = QStringLiteral(
"Info: FeatureTypeStyle element not found." );
246 QDomElement mergedFeatTypeStyle = featTypeStyleElem.cloneNode(
false ).toElement();
251 bool needRuleRenderer =
false;
254 while ( !featTypeStyleElem.isNull() )
256 QDomElement ruleElem = featTypeStyleElem.firstChildElement( QStringLiteral(
"Rule" ) );
257 while ( !ruleElem.isNull() )
261 bool hasRendererSymbolizer =
false;
262 bool hasRuleRenderer =
false;
263 QDomElement ruleChildElem = ruleElem.firstChildElement();
264 while ( !ruleChildElem.isNull() )
267 if ( ruleChildElem.localName() == QLatin1String(
"Filter" ) ||
268 ruleChildElem.localName() == QLatin1String(
"MinScaleDenominator" ) ||
269 ruleChildElem.localName() == QLatin1String(
"MaxScaleDenominator" ) )
271 hasRuleRenderer =
true;
274 else if ( ruleChildElem.localName().endsWith( QLatin1String(
"Symbolizer" ) ) &&
275 ruleChildElem.localName() != QLatin1String(
"TextSymbolizer" ) )
277 QgsDebugMsgLevel( QStringLiteral(
"Symbolizer element found and not a TextSymbolizer" ), 2 );
278 hasRendererSymbolizer =
true;
281 ruleChildElem = ruleChildElem.nextSiblingElement();
284 if ( hasRendererSymbolizer )
289 mergedFeatTypeStyle.appendChild( ruleElem.cloneNode().toElement() );
291 if ( hasRuleRenderer )
293 QgsDebugMsgLevel( QStringLiteral(
"Filter or Min/MaxScaleDenominator element found: need a RuleRenderer" ), 2 );
294 needRuleRenderer =
true;
301 QgsDebugMsgLevel( QStringLiteral(
"more Rule elements found: need a RuleRenderer" ), 2 );
302 needRuleRenderer =
true;
305 ruleElem = ruleElem.nextSiblingElement( QStringLiteral(
"Rule" ) );
307 featTypeStyleElem = featTypeStyleElem.nextSiblingElement( QStringLiteral(
"FeatureTypeStyle" ) );
310 QString rendererType;
311 if ( needRuleRenderer )
313 rendererType = QStringLiteral(
"RuleRenderer" );
317 rendererType = QStringLiteral(
"singleSymbol" );
319 QgsDebugMsgLevel( QStringLiteral(
"Instantiating a '%1' renderer..." ).arg( rendererType ), 2 );
325 errorMessage = QStringLiteral(
"Error: Unable to get metadata for '%1' renderer." ).arg( rendererType );
335 QDomElement userStyleElem = doc.createElement( QStringLiteral(
"UserStyle" ) );
337 QDomElement nameElem = doc.createElement( QStringLiteral(
"se:Name" ) );
338 nameElem.appendChild( doc.createTextNode( styleName ) );
339 userStyleElem.appendChild( nameElem );
341 QDomElement featureTypeStyleElem = doc.createElement( QStringLiteral(
"se:FeatureTypeStyle" ) );
342 toSld( doc, featureTypeStyleElem, props );
343 userStyleElem.appendChild( featureTypeStyleElem );
345 return userStyleElem;
403 const auto constPts = pts;
404 for (
const QPointF pt : constPts )
410 const auto constPts = pts;
411 for (
const QPointF pt : constPts )
416 const auto constRings = *rings;
417 for (
const QPolygonF &ring : constRings )
419 const auto constRing = ring;
420 for (
const QPointF pt : constRing )
430 if ( s ) lst.append( s );
444 if ( s ) lst.append( s );
522 ? QString::number( s->
angle() ) +
" + "
523 : QString() ) +
field );
void copyRendererData(QgsFeatureRenderer *destRenderer) const
Clones generic renderer data to another renderer.
virtual void setLegendSymbolItem(const QString &key, QgsSymbol *symbol)
Sets the symbol to be used for a legend symbol item.
static QgsRendererRegistry * rendererRegistry()
Returns the application's renderer registry, used for managing vector layer renderers.
static QgsFeatureRenderer * defaultRenderer(QgsWkbTypes::GeometryType geomType)
Returns a new renderer - used by default in vector layers.
virtual QgsSymbol * originalSymbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const
Returns symbol for feature.
void setDataDefinedAngle(const QgsProperty &property)
Set data defined angle for whole symbol (including all symbol layers).
QgsPaintEffect * mPaintEffect
double mCurrentVertexMarkerSize
The current size of editing marker.
static void drawVertexMarker(double x, double y, QPainter &p, Qgis::VertexMarkerType type, int markerSize)
Draws a vertex symbol at (painter) coordinates x, y.
A store for object properties.
virtual QDomElement writeSld(QDomDocument &doc, const QString &styleName, const QVariantMap &props=QVariantMap()) const
create the SLD UserStyle element following the SLD v1.1 specs with the given name
The class is used as a container of context for various read/write operations on other objects.
static QgsSymbol * defaultSymbol(QgsWkbTypes::GeometryType geomType)
Returns a new default symbol for the specified geometry type.
void setOrderByEnabled(bool enabled)
Sets whether custom ordering should be applied before features are processed by this renderer.
Point geometry type, with support for z-dimension and m-values.
double size() const
Returns the estimated size for the whole symbol, which is the maximum size of all marker symbol layer...
#define QgsDebugMsgLevel(str, level)
void CORE_EXPORT save(QDomElement &elem) const
Serialize to XML.
virtual bool accept(QgsStyleEntityVisitorInterface *visitor) const
Accepts the specified symbology visitor, causing it to visit all symbols associated with the renderer...
Qgis::VertexMarkerType mCurrentVertexMarkerType
The current type of editing marker.
static void convertSymbolSizeScale(QgsSymbol *symbol, Qgis::ScaleMethod method, const QString &field)
double width() const
Returns the estimated width for the whole symbol, which is the maximum width of all marker symbol lay...
Container of fields for a vector layer.
void renderFeatureWithSymbol(const QgsFeature &feature, QgsSymbol *symbol, QgsRenderContext &context, int layer, bool selected, bool drawVertexMarker) SIP_THROW(QgsCsException)
Render the feature with the symbol using context.
static void convertSymbolRotation(QgsSymbol *symbol, const QString &field)
Contains information about the context of a rendering operation.
An interface for classes which can visit style entity (e.g. symbol) nodes (using the visitor pattern)...
@ RenderMillimeters
Millimeters.
void setForceRasterRender(bool forceRaster)
Sets whether the renderer should be rendered to a raster destination.
virtual QgsLegendSymbolList legendSymbolItems() const
Returns a list of symbology items for the legend.
Abstract base class for all rendered symbols.
virtual void setEmbeddedRenderer(QgsFeatureRenderer *subRenderer)
Sets an embedded renderer (subrenderer) for this feature renderer.
static QgsProperty fromExpression(const QString &expression, bool isActive=true)
Returns a new ExpressionBasedProperty created from the specified expression.
double angle() const
Returns the marker angle for the whole symbol.
static QgsPaintEffect * defaultStack()
Returns a new effect stack consisting of a sensible selection of default effects.
static QgsFeatureRenderer * load(QDomElement &symbologyElem, const QgsReadWriteContext &context)
create a renderer from XML element
virtual ~QgsFeatureRenderer()
@ ScaleDiameter
Calculate scale by the diameter.
virtual bool saveProperties(QDomDocument &doc, QDomElement &element) const
Saves the current state of the effect to a DOM element.
A rectangle specified with double values.
int layer() const
The layer of this symbol level.
virtual void stopRender(QgsRenderContext &context)
Must be called when a render cycle has finished, to allow the renderer to clean up.
void setDataDefinedSize(const QgsProperty &property) const
Set data defined size for whole symbol (including all symbol layers).
QgsSymbol * symbol() const
The symbol of this symbol level.
virtual bool willRenderFeature(const QgsFeature &feature, QgsRenderContext &context) const
Returns whether the renderer will render a feature or not.
virtual bool legendSymbolItemChecked(const QString &key)
items of symbology items in legend is checked
QgsFeatureRequest::OrderBy orderBy() const
Gets the order in which features shall be processed by this renderer.
ScaleMethod
Scale methods.
virtual bool usesEmbeddedSymbols() const
Returns true if the renderer uses embedded symbols for features.
virtual bool legendSymbolItemsCheckable() const
items of symbology items in legend should be checkable
QgsFeatureRenderer(const QString &type)
virtual QDomElement save(QDomDocument &doc, const QgsReadWriteContext &context)
Stores renderer properties to an XML element.
static bool isDefaultStack(QgsPaintEffect *effect)
Tests whether a paint effect matches the default effects stack.
virtual bool filterNeedsGeometry() const
Returns true if this renderer requires the geometry to apply the filter.
virtual void checkLegendSymbolItem(const QString &key, bool state=true)
item in symbology was checked
void setUsingSymbolLevels(bool usingSymbolLevels)
static QPointF _getPoint(QgsRenderContext &context, const QgsPoint &point)
Creates a point in screen coordinates from a wkb string in map coordinates.
Qgis::SymbolType type() const
Returns the symbol's type.
VertexMarkerType
Editing vertex markers, used for showing vertices during a edit operation.
QList< QgsSymbol * > QgsSymbolList
A marker symbol type, for rendering Point and MultiPoint geometries.
void saveRendererData(QDomDocument &doc, QDomElement &element, const QgsReadWriteContext &context)
Saves generic renderer data into the specified element.
virtual QgsSymbolList originalSymbolsForFeature(const QgsFeature &feature, QgsRenderContext &context) const
Equivalent of originalSymbolsForFeature() call extended to support renderers that may use more symbol...
void CORE_EXPORT load(const QDomElement &elem)
Deserialize from XML.
virtual QgsPaintEffect * clone() const =0
Duplicates an effect by creating a deep copy of the effect.
virtual void toSld(QDomDocument &doc, QDomElement &element, const QVariantMap &props=QVariantMap()) const
used from subclasses to create SLD Rule elements following SLD v1.1 specs
#define RENDERER_TAG_NAME
virtual QgsSymbolList symbols(QgsRenderContext &context) const
Returns list of symbols used by the renderer.
A line symbol type, for rendering LineString and MultiLineString geometries.
virtual QgsSymbol * symbolForFeature(const QgsFeature &feature, QgsRenderContext &context) const =0
To be overridden.
void renderFeature(const QgsFeature &feature, QgsRenderContext &context, int layer=-1, bool selected=false, bool drawVertexMarker=false, Qgis::VertexMarkerType currentVertexMarkerType=Qgis::VertexMarkerType::SemiTransparentCircle, double currentVertexMarkerSize=0.0) SIP_THROW(QgsCsException)
Render a feature.
void setEnabled(bool enabled)
Sets whether the effect is enabled.
virtual void modifyRequestExtent(QgsRectangle &extent, QgsRenderContext &context)
Allows for a renderer to modify the extent of a feature request prior to rendering.
void setScaleMethod(Qgis::ScaleMethod scaleMethod) const
Sets the method to use for scaling the marker's size.
QgsFeatureRequest::OrderBy mOrderBy
virtual QString legendKeyToExpression(const QString &key, QgsVectorLayer *layer, bool &ok) const
Attempts to convert the specified legend rule key to a QGIS expression matching the features displaye...
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).
static QPointF _getPoint(QgsRenderContext &context, const QgsPoint &point)
Creates a point in screen coordinates from a QgsPoint in map coordinates.
void renderVertexMarkerPolyline(QPolygonF &pts, QgsRenderContext &context)
render editing vertex marker for a polyline
static QgsPaintEffectRegistry * paintEffectRegistry()
Returns the application's paint effect registry, used for managing paint effects.
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
Represents a list of OrderByClauses, with the most important first and the least important last.
Represents a vector layer which manages a vector based data sets.
bool orderByEnabled() const
Returns whether custom ordering will be applied before features are processed by this renderer.
void setReferenceScale(double scale)
Sets the symbology reference scale.
virtual bool renderFeature(const QgsFeature &feature, QgsRenderContext &context, int layer=-1, bool selected=false, bool drawVertexMarker=false) SIP_THROW(QgsCsException)
Render a feature using this renderer in the given context.
Base class for visual effects which can be applied to QPicture drawings.
@ ScaleArea
Calculate scale by the area.
void renderVertexMarker(QPointF pt, QgsRenderContext &context)
render editing vertex marker at specified point
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the renderer.
void setOrderBy(const QgsFeatureRequest::OrderBy &orderBy)
Define the order in which features shall be processed by this renderer.
void renderVertexMarkerPolygon(QPolygonF &pts, QList< QPolygonF > *rings, QgsRenderContext &context)
render editing vertex marker for a polygon
virtual QString dump() const
Returns debug information about this renderer.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
QgsPaintEffect * paintEffect() const
Returns the current paint effect for the renderer.
QPainter * painter()
Returns the destination QPainter for the render operation.
void setDataDefinedWidth(const QgsProperty &property) const
Set data defined width for whole symbol (including all symbol layers).
QList< QgsLegendSymbolItem > QgsLegendSymbolList
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)
Must be called when a new render cycle is started.
void setVertexMarkerAppearance(Qgis::VertexMarkerType type, double size)
Sets type and size of editing vertex markers for subsequent rendering.
static QgsFeatureRenderer * loadSld(const QDomNode &node, QgsWkbTypes::GeometryType geomType, QString &errorMessage)
Create a new renderer according to the information contained in the UserStyle element of a SLD style ...
virtual QgsSymbolList symbolsForFeature(const QgsFeature &feature, QgsRenderContext &context) const
Returns list of symbols used for rendering the feature.
QgsRendererAbstractMetadata * rendererMetadata(const QString &rendererName)
Returns the metadata for a specified renderer.
virtual const QgsFeatureRenderer * embeddedRenderer() const
Returns the current embedded renderer (subrenderer) for this feature renderer.
virtual QSet< QString > legendKeysForFeature(const QgsFeature &feature, QgsRenderContext &context) const
Returns legend keys matching a specified feature.