Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create new "Embedded Symbol" renderer
This renderer will draw features using their embedded feature symbology
- Loading branch information
1 parent
4dd6a89
commit 50082a3
Showing
13 changed files
with
406 additions
and
0 deletions.
There are no files selected for viewing
75 changes: 75 additions & 0 deletions
75
python/core/auto_generated/symbology/qgsembeddedsymbolrenderer.sip.in
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/core/symbology/qgsembeddedsymbolrenderer.h * | ||
* * | ||
* Do not edit manually ! Edit header and run scripts/sipify.pl again * | ||
************************************************************************/ | ||
|
||
|
||
class QgsEmbeddedSymbolRenderer : QgsFeatureRenderer | ||
{ | ||
%Docstring | ||
|
||
A vector feature renderer which uses embedded feature symbology to render per-feature | ||
symbols. | ||
|
||
This renderer can be used for vector layers with a data provider which supports the | ||
:py:class:`QgsVectorDataProvider`.FeatureSymbology capability, where the dataset has embedded information | ||
on how each feature should be rendered. | ||
|
||
.. versionadded:: 3.20 | ||
%End | ||
|
||
%TypeHeaderCode | ||
#include "qgsembeddedsymbolrenderer.h" | ||
%End | ||
public: | ||
|
||
QgsEmbeddedSymbolRenderer(); | ||
%Docstring | ||
Constructor for QgsEmbeddedSymbolRenderer. | ||
%End | ||
~QgsEmbeddedSymbolRenderer(); | ||
|
||
virtual QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const; | ||
|
||
virtual QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const; | ||
|
||
virtual void startRender( QgsRenderContext &context, const QgsFields &fields ); | ||
|
||
virtual bool renderFeature( const QgsFeature &feature, QgsRenderContext &context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) throw( QgsCsException ); | ||
|
||
virtual void stopRender( QgsRenderContext &context ); | ||
|
||
virtual QSet<QString> usedAttributes( const QgsRenderContext &context ) const; | ||
|
||
virtual bool usesEmbeddedSymbols() const; | ||
|
||
virtual QgsEmbeddedSymbolRenderer *clone() const /Factory/; | ||
|
||
virtual QgsFeatureRenderer::Capabilities capabilities(); | ||
|
||
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ); | ||
|
||
|
||
static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) /Factory/; | ||
%Docstring | ||
Creates a new embedded symbol renderer from an XML ``element``, using the supplied read/write ``context``. | ||
|
||
The caller takes ownership of the returned renderer. | ||
%End | ||
|
||
private: | ||
QgsEmbeddedSymbolRenderer( const QgsEmbeddedSymbolRenderer & ); | ||
QgsEmbeddedSymbolRenderer &operator=( const QgsEmbeddedSymbolRenderer & ); | ||
}; | ||
|
||
|
||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/core/symbology/qgsembeddedsymbolrenderer.h * | ||
* * | ||
* Do not edit manually ! Edit header and run scripts/sipify.pl again * | ||
************************************************************************/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
/*************************************************************************** | ||
qgsembeddedsymbolrenderer.cpp | ||
--------------------- | ||
begin : March 2021 | ||
copyright : (C) 2021 by Nyall Dawson | ||
email : nyall dot dawson at gmail dot com | ||
*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
#include "qgsembeddedsymbolrenderer.h" | ||
#include "qgspainteffectregistry.h" | ||
|
||
QgsEmbeddedSymbolRenderer::QgsEmbeddedSymbolRenderer() | ||
: QgsFeatureRenderer( QStringLiteral( "embeddedSymbol" ) ) | ||
{ | ||
} | ||
|
||
QgsEmbeddedSymbolRenderer::~QgsEmbeddedSymbolRenderer() = default; | ||
|
||
QgsSymbol *QgsEmbeddedSymbolRenderer::symbolForFeature( const QgsFeature &feature, QgsRenderContext & ) const | ||
{ | ||
return const_cast< QgsSymbol * >( feature.embeddedSymbol() ); | ||
} | ||
|
||
QgsSymbol *QgsEmbeddedSymbolRenderer::originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const | ||
{ | ||
Q_UNUSED( context ) | ||
return const_cast< QgsSymbol * >( feature.embeddedSymbol() ); | ||
} | ||
|
||
void QgsEmbeddedSymbolRenderer::startRender( QgsRenderContext &context, const QgsFields &fields ) | ||
{ | ||
QgsFeatureRenderer::startRender( context, fields ); | ||
} | ||
|
||
bool QgsEmbeddedSymbolRenderer::renderFeature( const QgsFeature &feature, QgsRenderContext &context, int layer, bool selected, bool drawVertexMarker ) | ||
{ | ||
if ( const QgsSymbol *symbol = feature.embeddedSymbol() ) | ||
{ | ||
std::unique_ptr< QgsSymbol > clone( symbol->clone() ); | ||
|
||
clone->startRender( context ); | ||
renderFeatureWithSymbol( feature, clone.get(), context, layer, selected, drawVertexMarker ); | ||
clone->stopRender( context ); | ||
return true; | ||
} | ||
else | ||
{ | ||
return false; | ||
} | ||
return true; | ||
} | ||
|
||
void QgsEmbeddedSymbolRenderer::stopRender( QgsRenderContext &context ) | ||
{ | ||
QgsFeatureRenderer::stopRender( context ); | ||
} | ||
|
||
QSet<QString> QgsEmbeddedSymbolRenderer::usedAttributes( const QgsRenderContext & ) const | ||
{ | ||
return QSet<QString>(); | ||
} | ||
|
||
bool QgsEmbeddedSymbolRenderer::usesEmbeddedSymbols() const | ||
{ | ||
return true; | ||
} | ||
|
||
QgsEmbeddedSymbolRenderer *QgsEmbeddedSymbolRenderer::clone() const | ||
{ | ||
QgsEmbeddedSymbolRenderer *r = new QgsEmbeddedSymbolRenderer(); | ||
r->setUsingSymbolLevels( usingSymbolLevels() ); | ||
copyRendererData( r ); | ||
return r; | ||
} | ||
|
||
QgsFeatureRenderer::Capabilities QgsEmbeddedSymbolRenderer::capabilities() | ||
{ | ||
return SymbolLevels; | ||
} | ||
|
||
QgsFeatureRenderer *QgsEmbeddedSymbolRenderer::create( QDomElement &, const QgsReadWriteContext & ) | ||
{ | ||
QgsEmbeddedSymbolRenderer *r = new QgsEmbeddedSymbolRenderer(); | ||
return r; | ||
} | ||
|
||
QDomElement QgsEmbeddedSymbolRenderer::save( QDomDocument &doc, const QgsReadWriteContext & ) | ||
{ | ||
QDomElement rendererElem = doc.createElement( RENDERER_TAG_NAME ); | ||
rendererElem.setAttribute( QStringLiteral( "type" ), QStringLiteral( "embeddedSymbol" ) ); | ||
rendererElem.setAttribute( QStringLiteral( "symbollevels" ), ( mUsingSymbolLevels ? QStringLiteral( "1" ) : QStringLiteral( "0" ) ) ); | ||
rendererElem.setAttribute( QStringLiteral( "forceraster" ), ( mForceRaster ? QStringLiteral( "1" ) : QStringLiteral( "0" ) ) ); | ||
|
||
if ( mPaintEffect && !QgsPaintEffectRegistry::isDefaultStack( mPaintEffect ) ) | ||
mPaintEffect->saveProperties( doc, rendererElem ); | ||
|
||
if ( !mOrderBy.isEmpty() ) | ||
{ | ||
QDomElement orderBy = doc.createElement( QStringLiteral( "orderby" ) ); | ||
mOrderBy.save( orderBy ); | ||
rendererElem.appendChild( orderBy ); | ||
} | ||
rendererElem.setAttribute( QStringLiteral( "enableorderby" ), ( mOrderByEnabled ? QStringLiteral( "1" ) : QStringLiteral( "0" ) ) ); | ||
|
||
return rendererElem; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
/*************************************************************************** | ||
qgsembeddedsymbolrenderer.h | ||
--------------------- | ||
begin : March 2021 | ||
copyright : (C) 2021 by Nyall Dawson | ||
email : nyall dot dawson at gmail dot com | ||
*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
#ifndef QGSEMBEDDEDSYMBOLRENDERER_H | ||
#define QGSEMBEDDEDSYMBOLRENDERER_H | ||
|
||
#include "qgis_core.h" | ||
#include "qgis.h" | ||
#include "qgsrenderer.h" | ||
|
||
/** | ||
* \ingroup core | ||
* \class QgsEmbeddedSymbolRenderer | ||
* | ||
* \brief A vector feature renderer which uses embedded feature symbology to render per-feature | ||
* symbols. | ||
* | ||
* This renderer can be used for vector layers with a data provider which supports the | ||
* QgsVectorDataProvider::FeatureSymbology capability, where the dataset has embedded information | ||
* on how each feature should be rendered. | ||
* | ||
* \since QGIS 3.20 | ||
*/ | ||
class CORE_EXPORT QgsEmbeddedSymbolRenderer : public QgsFeatureRenderer | ||
{ | ||
public: | ||
|
||
/** | ||
* Constructor for QgsEmbeddedSymbolRenderer. | ||
*/ | ||
QgsEmbeddedSymbolRenderer(); | ||
~QgsEmbeddedSymbolRenderer() override; | ||
|
||
QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override; | ||
QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const override; | ||
void startRender( QgsRenderContext &context, const QgsFields &fields ) override; | ||
bool renderFeature( const QgsFeature &feature, QgsRenderContext &context, int layer = -1, bool selected = false, bool drawVertexMarker = false ) SIP_THROW( QgsCsException ) override; | ||
void stopRender( QgsRenderContext &context ) override; | ||
QSet<QString> usedAttributes( const QgsRenderContext &context ) const override; | ||
bool usesEmbeddedSymbols() const override; | ||
QgsEmbeddedSymbolRenderer *clone() const override SIP_FACTORY; | ||
QgsFeatureRenderer::Capabilities capabilities() override; | ||
QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ) override; | ||
|
||
/** | ||
* Creates a new embedded symbol renderer from an XML \a element, using the supplied read/write \a context. | ||
* | ||
* The caller takes ownership of the returned renderer. | ||
*/ | ||
static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) SIP_FACTORY; | ||
|
||
private: | ||
#ifdef SIP_RUN | ||
QgsEmbeddedSymbolRenderer( const QgsEmbeddedSymbolRenderer & ); | ||
QgsEmbeddedSymbolRenderer &operator=( const QgsEmbeddedSymbolRenderer & ); | ||
#endif | ||
|
||
}; | ||
|
||
|
||
#endif // QGSEMBEDDEDSYMBOLRENDERER_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.