Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
[FEATURE] New "Merged feature" renderer for polygon and line layers
This renderer merges (or unions/dissolves) the line or polygon features from a layer prior to rendering them. It's useful for rendering a polygon layer with overlapping features as one single "coverage" feature, or a line layer consisting of many smaller component line features using a regularly spaced marker line or similar. Internally, this just moves the guts of the existing inverted polygons renderer to a new base class, as that renderer already had an option to merge features prior to rendering. Basically it just exposes a new renderer to users which is the inverted polygon renderer without the inversion step!
- Loading branch information
Showing
with
1,433 additions
and 582 deletions.
- +1 −64 python/core/auto_generated/symbology/qgsinvertedpolygonrenderer.sip.in
- +147 −0 python/core/auto_generated/symbology/qgsmergedfeaturerenderer.sip.in
- +1 −0 python/core/core_auto.sip
- +58 −0 python/gui/auto_generated/symbology/qgsmergedfeaturerendererwidget.sip.in
- +1 −0 python/gui/gui_auto.sip
- +2 −0 src/core/CMakeLists.txt
- +2 −1 src/core/symbology/qgsgraduatedsymbolrenderer.cpp
- +11 −422 src/core/symbology/qgsinvertedpolygonrenderer.cpp
- +4 −91 src/core/symbology/qgsinvertedpolygonrenderer.h
- +576 −0 src/core/symbology/qgsmergedfeaturerenderer.cpp
- +176 −0 src/core/symbology/qgsmergedfeaturerenderer.h
- +8 −0 src/core/symbology/qgsrendererregistry.cpp
- +7 −4 src/core/symbology/qgsrulebasedrenderer.cpp
- +2 −0 src/gui/CMakeLists.txt
- +147 −0 src/gui/symbology/qgsmergedfeaturerendererwidget.cpp
- +69 −0 src/gui/symbology/qgsmergedfeaturerendererwidget.h
- +2 −0 src/gui/symbology/qgsrendererpropertiesdialog.cpp
- +38 −0 src/ui/qgsmergedfeaturerendererwidgetbase.ui
- +1 −0 tests/src/python/CMakeLists.txt
- +176 −0 tests/src/python/test_qgsmergedfeaturerenderer.py
- BIN ...featurerenderer/expected_lines_categorized_subrenderer/expected_lines_categorized_subrenderer.png
- BIN ...ges/mergedfeaturerenderer/expected_lines_single_subrenderer/expected_lines_single_subrenderer.png
- BIN ...s/mergedfeaturerenderer/expected_polys_categorizedrenderer/expected_polys_categorizedrenderer.png
- BIN .../control_images/mergedfeaturerenderer/expected_single_subrenderer/expected_single_subrenderer.png
- +1 −0 tests/testdata/lines_touching.cpg
- BIN tests/testdata/lines_touching.dbf
- +1 −0 tests/testdata/lines_touching.prj
- BIN tests/testdata/lines_touching.shp
- BIN tests/testdata/lines_touching.shx
- +1 −0 tests/testdata/polys_overlapping_with_cat.cpg
- BIN tests/testdata/polys_overlapping_with_cat.dbf
- +1 −0 tests/testdata/polys_overlapping_with_cat.prj
- BIN tests/testdata/polys_overlapping_with_cat.shp
- BIN tests/testdata/polys_overlapping_with_cat.shx
@@ -0,0 +1,147 @@ | ||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/core/symbology/qgsmergedfeaturerenderer.h * | ||
* * | ||
* Do not edit manually ! Edit header and run scripts/sipify.pl again * | ||
************************************************************************/ | ||
|
||
|
||
class QgsMergedFeatureRenderer : QgsFeatureRenderer | ||
{ | ||
%Docstring | ||
QgsMergedFeatureRenderer is a polygon or line-only feature renderer used to | ||
renderer a set of features merged (or dissolved) into a single geometry. | ||
|
||
It is designed on top of another feature renderer, which is called "embedded" | ||
Most of the methods are then only proxies to the embedded renderer. E.g. if | ||
the embedded renderer is a categorized renderer, then all the matching features | ||
for each categorized class will be dissolved together. Features from different | ||
classes will NOT be dissolved together. | ||
|
||
.. versionadded:: 3.18 | ||
%End | ||
|
||
%TypeHeaderCode | ||
#include "qgsmergedfeaturerenderer.h" | ||
%End | ||
public: | ||
|
||
QgsMergedFeatureRenderer( QgsFeatureRenderer *embeddedRenderer /Transfer/ ); | ||
%Docstring | ||
Constructor for QgsMergedFeatureRenderer. | ||
|
||
:param embeddedRenderer: optional embeddedRenderer. Ownership will be transferred. | ||
%End | ||
|
||
|
||
static QgsFeatureRenderer *create( QDomElement &element, const QgsReadWriteContext &context ) /Factory/; | ||
%Docstring | ||
Creates a renderer out of an XML, for loading | ||
%End | ||
|
||
virtual QgsMergedFeatureRenderer *clone() const /Factory/; | ||
|
||
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 ); | ||
|
||
%Docstring | ||
Renders a given feature. | ||
This will here collect features. The actual rendering will be postponed to :py:func:`~QgsMergedFeatureRenderer.stopRender` | ||
|
||
:param feature: the feature to render | ||
:param context: the rendering context | ||
:param layer: the symbol layer to render, if that makes sense | ||
:param selected: whether this feature has been selected (this will add decorations) | ||
:param drawVertexMarker: whether this feature has vertex markers (in edit mode usually) | ||
|
||
:return: ``True`` if the rendering was OK | ||
%End | ||
|
||
virtual void stopRender( QgsRenderContext &context ); | ||
|
||
%Docstring | ||
The actual rendering will take place here. | ||
Features collected during :py:func:`~QgsMergedFeatureRenderer.renderFeature` are rendered using the embedded feature renderer | ||
%End | ||
|
||
virtual QString dump() const; | ||
|
||
virtual QSet<QString> usedAttributes( const QgsRenderContext &context ) const; | ||
|
||
virtual bool filterNeedsGeometry() const; | ||
|
||
virtual QgsFeatureRenderer::Capabilities capabilities(); | ||
|
||
virtual QgsSymbolList symbols( QgsRenderContext &context ) const; | ||
|
||
virtual QgsSymbol *symbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const; | ||
|
||
virtual QgsSymbol *originalSymbolForFeature( const QgsFeature &feature, QgsRenderContext &context ) const; | ||
|
||
virtual QgsSymbolList symbolsForFeature( const QgsFeature &feature, QgsRenderContext &context ) const; | ||
|
||
virtual QgsSymbolList originalSymbolsForFeature( const QgsFeature &feature, QgsRenderContext &context ) const; | ||
|
||
virtual QSet< QString > legendKeysForFeature( const QgsFeature &feature, QgsRenderContext &context ) const; | ||
|
||
virtual QgsLegendSymbolList legendSymbolItems() const; | ||
|
||
virtual bool willRenderFeature( const QgsFeature &feature, QgsRenderContext &context ) const; | ||
|
||
virtual QDomElement save( QDomDocument &doc, const QgsReadWriteContext &context ); | ||
|
||
virtual void setEmbeddedRenderer( QgsFeatureRenderer *subRenderer /Transfer/ ); | ||
|
||
virtual const QgsFeatureRenderer *embeddedRenderer() const; | ||
|
||
virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol ); | ||
|
||
virtual bool legendSymbolItemsCheckable() const; | ||
|
||
virtual bool legendSymbolItemChecked( const QString &key ); | ||
|
||
virtual void checkLegendSymbolItem( const QString &key, bool state = true ); | ||
|
||
virtual bool accept( QgsStyleEntityVisitorInterface *visitor ) const; | ||
|
||
|
||
static QgsMergedFeatureRenderer *convertFromRenderer( const QgsFeatureRenderer *renderer ) /Factory/; | ||
%Docstring | ||
Creates a QgsMergedFeatureRenderer by a conversion from an existing renderer. | ||
|
||
:return: a new renderer if the conversion was possible, otherwise 0. | ||
|
||
.. versionadded:: 2.5 | ||
%End | ||
|
||
protected: | ||
|
||
QgsMergedFeatureRenderer( const QString &type, QgsFeatureRenderer *embeddedRenderer /Transfer/ ); | ||
%Docstring | ||
Constructor for QgsMergedFeatureRenderer. | ||
|
||
:param embeddedRenderer: optional embeddedRenderer. Ownership will be transferred. | ||
%End | ||
|
||
enum GeometryOperation | ||
{ | ||
Merge, | ||
InvertOnly, | ||
MergeAndInvert, | ||
}; | ||
|
||
|
||
|
||
}; | ||
|
||
|
||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/core/symbology/qgsmergedfeaturerenderer.h * | ||
* * | ||
* Do not edit manually ! Edit header and run scripts/sipify.pl again * | ||
************************************************************************/ |
@@ -0,0 +1,58 @@ | ||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/gui/symbology/qgsmergedfeaturerendererwidget.h * | ||
* * | ||
* Do not edit manually ! Edit header and run scripts/sipify.pl again * | ||
************************************************************************/ | ||
|
||
|
||
|
||
class QgsMergedFeatureRendererWidget : QgsRendererWidget | ||
{ | ||
%Docstring | ||
A widget used represent options of a QgsMergedFeatureRenderer | ||
|
||
.. versionadded:: 3.18 | ||
%End | ||
|
||
%TypeHeaderCode | ||
#include "qgsmergedfeaturerendererwidget.h" | ||
%End | ||
public: | ||
|
||
static QgsRendererWidget *create( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer ) /Factory/; | ||
%Docstring | ||
Static creation method | ||
|
||
:param layer: the layer where this renderer is applied | ||
:param style: | ||
:param renderer: the merged feature renderer (will not take ownership) | ||
%End | ||
|
||
QgsMergedFeatureRendererWidget( QgsVectorLayer *layer, QgsStyle *style, QgsFeatureRenderer *renderer ); | ||
%Docstring | ||
Constructor | ||
|
||
:param layer: the layer where this renderer is applied | ||
:param style: | ||
:param renderer: the merged feature renderer (will not take ownership) | ||
%End | ||
|
||
virtual QgsFeatureRenderer *renderer(); | ||
|
||
virtual void setContext( const QgsSymbolWidgetContext &context ); | ||
|
||
virtual void setDockMode( bool dockMode ); | ||
|
||
|
||
}; | ||
|
||
|
||
/************************************************************************ | ||
* This file has been generated automatically from * | ||
* * | ||
* src/gui/symbology/qgsmergedfeaturerendererwidget.h * | ||
* * | ||
* Do not edit manually ! Edit header and run scripts/sipify.pl again * | ||
************************************************************************/ |
Oops, something went wrong.