2012-09-24 02:28:15 +02:00
|
|
|
typedef QMap<QString, QString> QgsStringMap;
|
|
|
|
|
2016-08-05 08:09:43 +02:00
|
|
|
typedef QList<QgsSymbol*> QgsSymbolList;
|
|
|
|
typedef QMap<QString, QgsSymbol* > QgsSymbolMap;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
|
|
|
typedef QList< QPair<QString, QPixmap> > QgsLegendSymbologyList;
|
2016-08-05 08:09:43 +02:00
|
|
|
typedef QList< QPair<QString, QgsSymbol*> > QgsLegendSymbolList;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2016-08-05 08:09:43 +02:00
|
|
|
class QgsSymbolLevelItem
|
2012-09-24 02:28:15 +02:00
|
|
|
{
|
|
|
|
%TypeHeaderCode
|
2016-08-07 17:33:22 +02:00
|
|
|
#include <qgsrenderer.h>
|
2012-09-24 02:28:15 +02:00
|
|
|
%End
|
|
|
|
public:
|
2017-05-01 18:13:15 +02:00
|
|
|
QgsSymbolLevelItem( QgsSymbol *symbol, int layer );
|
|
|
|
QgsSymbol *symbol();
|
2012-09-24 02:28:15 +02:00
|
|
|
int layer();
|
|
|
|
};
|
|
|
|
|
|
|
|
// every level has list of items: symbol + symbol layer num
|
2016-08-05 08:09:43 +02:00
|
|
|
// typedef QList< QgsSymbolLevelItem > QgsSymbolLevel;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
|
|
|
// this is a list of levels
|
2016-08-05 08:09:43 +02:00
|
|
|
// typedef QList< QgsSymbolLevel > QgsSymbolLevelOrder;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
//////////////
|
|
|
|
// renderers
|
|
|
|
|
2016-08-06 11:01:42 +02:00
|
|
|
class QgsFeatureRenderer
|
2012-09-24 02:28:15 +02:00
|
|
|
{
|
|
|
|
%TypeHeaderCode
|
2016-08-07 17:33:22 +02:00
|
|
|
#include <qgsrenderer.h>
|
2012-09-24 02:28:15 +02:00
|
|
|
%End
|
|
|
|
|
|
|
|
%ConvertToSubClassCode
|
|
|
|
if (sipCpp->type() == "singleSymbol")
|
2016-08-06 11:01:42 +02:00
|
|
|
sipType = sipType_QgsSingleSymbolRenderer;
|
2012-09-24 02:28:15 +02:00
|
|
|
else if (sipCpp->type() == "categorizedSymbol")
|
2016-08-06 11:01:42 +02:00
|
|
|
sipType = sipType_QgsCategorizedSymbolRenderer;
|
2012-09-24 02:28:15 +02:00
|
|
|
else if (sipCpp->type() == "graduatedSymbol")
|
2016-08-06 11:01:42 +02:00
|
|
|
sipType = sipType_QgsGraduatedSymbolRenderer;
|
2012-09-24 02:28:15 +02:00
|
|
|
else if (sipCpp->type() == "RuleRenderer")
|
2016-08-06 11:01:42 +02:00
|
|
|
sipType = sipType_QgsRuleBasedRenderer;
|
2015-01-20 22:36:36 +11:00
|
|
|
else if (sipCpp->type() == "heatmapRenderer")
|
2015-10-20 18:09:33 +02:00
|
|
|
sipType = sipType_QgsHeatmapRenderer;
|
2015-01-20 22:36:36 +11:00
|
|
|
else if (sipCpp->type() == "invertedPolygonRenderer")
|
2015-10-20 18:09:33 +02:00
|
|
|
sipType = sipType_QgsInvertedPolygonRenderer;
|
2016-08-15 12:04:17 +10:00
|
|
|
else if (sipCpp->type() == "pointCluster")
|
|
|
|
sipType = sipType_QgsPointClusterRenderer;
|
2015-01-20 22:36:36 +11:00
|
|
|
else if (sipCpp->type() == "pointDisplacement")
|
2015-10-20 18:09:33 +02:00
|
|
|
sipType = sipType_QgsPointDisplacementRenderer;
|
2016-03-03 20:22:49 +01:00
|
|
|
else if (sipCpp->type() == "25dRenderer")
|
|
|
|
sipType = sipType_Qgs25DRenderer;
|
2016-04-06 19:25:00 +10:00
|
|
|
else if (sipCpp->type() == "nullSymbol")
|
|
|
|
sipType = sipType_QgsNullSymbolRenderer;
|
2012-09-24 02:28:15 +02:00
|
|
|
else
|
2015-10-20 18:09:33 +02:00
|
|
|
sipType = 0;
|
2012-09-24 02:28:15 +02:00
|
|
|
%End
|
|
|
|
|
|
|
|
public:
|
|
|
|
// renderer takes ownership of its symbols!
|
|
|
|
|
|
|
|
//! return a new renderer - used by default in vector layers
|
2017-05-01 18:13:15 +02:00
|
|
|
static QgsFeatureRenderer *defaultRenderer( QgsWkbTypes::GeometryType geomType ) /Factory/;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
|
|
|
QString type() const;
|
|
|
|
|
2015-08-17 08:10:44 +10:00
|
|
|
/** To be overridden
|
2016-02-14 03:50:23 +01:00
|
|
|
*
|
|
|
|
* Must be called between startRender() and stopRender() calls.
|
2015-08-17 08:10:44 +10:00
|
|
|
* @param feature feature
|
|
|
|
* @param context render context
|
|
|
|
* @return returns pointer to symbol or 0 if symbol was not found
|
|
|
|
* @note added in QGIS 2.12
|
2014-09-25 12:00:45 +02:00
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual QgsSymbol *symbolForFeature( QgsFeature &feature, QgsRenderContext &context ) = 0;
|
2015-08-17 08:10:44 +10:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Return symbol for feature. The difference compared to symbolForFeature() is that it returns original
|
|
|
|
* symbol which can be used as an identifier for renderer's rule - the former may return a temporary replacement
|
|
|
|
* of a symbol for use in rendering.
|
|
|
|
* @note added in 2.12
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual QgsSymbol *originalSymbolForFeature( QgsFeature &feature, QgsRenderContext &context );
|
2014-09-25 12:00:45 +02:00
|
|
|
|
2016-01-28 21:43:09 +11:00
|
|
|
/**
|
|
|
|
* Return legend keys matching a specified feature.
|
|
|
|
* @note added in 2.14
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual QSet< QString > legendKeysForFeature( QgsFeature &feature, QgsRenderContext &context );
|
2016-01-28 21:43:09 +11:00
|
|
|
|
2016-01-25 13:05:36 +11:00
|
|
|
/**
|
2016-01-28 10:30:06 +01:00
|
|
|
* Needs to be called when a new render cycle is started
|
|
|
|
*
|
|
|
|
* @param context Additional information passed to the renderer about the job which will be rendered
|
|
|
|
* @param fields The fields available for rendering
|
|
|
|
* @return Information passed back from the renderer that can e.g. be used to reduce the amount of requested features
|
2016-01-25 13:05:36 +11:00
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual void startRender( QgsRenderContext &context, const QgsFields &fields ) = 0;
|
2013-12-05 18:27:45 +07:00
|
|
|
|
2016-01-28 12:20:20 +01:00
|
|
|
/**
|
|
|
|
* Needs to be called when a render cycle has finished to clean up.
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual void stopRender( QgsRenderContext &context ) = 0;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2015-12-04 07:28:31 +11:00
|
|
|
/**
|
|
|
|
* If a renderer does not require all the features this method may be overridden
|
|
|
|
* and return an expression used as where clause.
|
|
|
|
* This will be called once after {@link startRender()} and before the first call
|
|
|
|
* to {@link renderFeature()}.
|
|
|
|
* By default this returns a null string and all features will be requested.
|
|
|
|
* You do not need to specify the extent in here, this is taken care of separately and
|
|
|
|
* will be combined with a filter returned from this method.
|
|
|
|
*
|
|
|
|
* @return An expression used as where clause
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual QString filter( const QgsFields &fields = QgsFields() );
|
2015-07-22 10:46:13 +02:00
|
|
|
|
2016-01-28 10:30:06 +01:00
|
|
|
/**
|
|
|
|
* Returns a set of attributes required for this renderer.
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual QSet<QString> usedAttributes( const QgsRenderContext &context ) const = 0;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2016-06-06 13:58:09 +02:00
|
|
|
/**
|
|
|
|
* Returns true if this renderer requires the geometry to apply the filter.
|
|
|
|
*/
|
|
|
|
virtual bool filterNeedsGeometry() const;
|
|
|
|
|
2016-08-06 11:01:42 +02:00
|
|
|
virtual ~QgsFeatureRenderer();
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual QgsFeatureRenderer *clone() const = 0 /Factory/;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2016-01-28 12:20:20 +01:00
|
|
|
/**
|
|
|
|
* Render a feature using this renderer in the given context.
|
|
|
|
* Must be called between startRender() and stopRender() calls.
|
|
|
|
* Default implementation renders a symbol as determined by symbolForFeature() call.
|
|
|
|
* Returns true if the feature has been returned (this is used for example
|
|
|
|
* to determine whether the feature may be labelled).
|
|
|
|
*
|
|
|
|
* If layer is not -1, the renderer should draw only a particula layer from symbols
|
|
|
|
* (in order to support symbol level rendering).
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual bool renderFeature( QgsFeature &feature, QgsRenderContext &context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
|
2012-09-24 02:28:15 +02:00
|
|
|
|
|
|
|
//! for debugging
|
2013-07-22 21:41:44 +02:00
|
|
|
virtual QString dump() const;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2015-12-20 11:05:59 +01:00
|
|
|
enum Capability
|
2012-09-24 02:28:15 +02:00
|
|
|
{
|
2014-05-27 23:22:50 +02:00
|
|
|
SymbolLevels, // rendering with symbol levels (i.e. implements symbols(), symbolForFeature())
|
|
|
|
MoreSymbolsPerFeature, // may use more than one symbol to render a feature: symbolsForFeature() will return them
|
|
|
|
Filter, // features may be filtered, i.e. some features may not be rendered (categorized, rule based ...)
|
|
|
|
ScaleDependent // depends on scale if feature will be rendered (rule based )
|
2012-09-24 02:28:15 +02:00
|
|
|
};
|
|
|
|
|
2016-08-06 11:01:42 +02:00
|
|
|
typedef QFlags<QgsFeatureRenderer::Capability> Capabilities;
|
2015-12-20 11:05:59 +01:00
|
|
|
|
2012-09-24 02:28:15 +02:00
|
|
|
//! returns bitwise OR-ed capabilities of the renderer
|
2016-08-06 11:01:42 +02:00
|
|
|
virtual QgsFeatureRenderer::Capabilities capabilities();
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2015-10-08 23:47:51 +11:00
|
|
|
|
|
|
|
/** Returns list of symbols used by the renderer.
|
|
|
|
* @param context render context
|
|
|
|
* @note added in QGIS 2.12
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual QgsSymbolList symbols( QgsRenderContext &context );
|
2012-09-24 02:28:15 +02:00
|
|
|
|
|
|
|
bool usingSymbolLevels() const;
|
|
|
|
void setUsingSymbolLevels( bool usingSymbolLevels );
|
|
|
|
|
|
|
|
//! create a renderer from XML element
|
2017-05-12 17:31:01 +08:00
|
|
|
static QgsFeatureRenderer* load( QDomElement& symbologyElem, const QgsReadWriteContext &context ) /Factory/;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
|
|
|
//! store renderer info to XML element
|
2017-05-12 17:31:01 +08:00
|
|
|
virtual QDomElement save( QDomDocument& doc, const QgsReadWriteContext &context );
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2015-01-13 15:33:10 +07:00
|
|
|
//! create the SLD UserStyle element following the SLD v1.1 specs with the given name
|
|
|
|
//! @note added in 2.8
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual QDomElement writeSld( QDomDocument &doc, const QString &styleName ) const;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2015-07-29 11:52:14 +02:00
|
|
|
/** Create a new renderer according to the information contained in
|
2012-09-24 02:28:15 +02:00
|
|
|
* the UserStyle element of a SLD style document
|
|
|
|
* @param node the node in the SLD document whose the UserStyle element
|
|
|
|
* is a child
|
|
|
|
* @param geomType the geometry type of the features, used to convert
|
|
|
|
* Symbolizer elements
|
|
|
|
* @param errorMessage it will contain the error message if something
|
|
|
|
* went wrong
|
|
|
|
* @return the renderer
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
static QgsFeatureRenderer *loadSld( const QDomNode &node, QgsWkbTypes::GeometryType geomType, QString &errorMessage ) /Factory/;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
|
|
|
//! used from subclasses to create SLD Rule elements following SLD v1.1 specs
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual void toSld( QDomDocument &doc, QDomElement &element ) const;
|
2012-09-24 02:28:15 +02:00
|
|
|
|
|
|
|
//! return a list of symbology items for the legend
|
|
|
|
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
|
|
|
|
|
2014-07-04 20:49:26 +02:00
|
|
|
//! items of symbology items in legend should be checkable
|
2014-09-01 11:05:51 +07:00
|
|
|
//! @note added in 2.5
|
2014-07-04 20:49:26 +02:00
|
|
|
virtual bool legendSymbolItemsCheckable() const;
|
|
|
|
|
|
|
|
//! items of symbology items in legend is checked
|
2014-09-01 11:05:51 +07:00
|
|
|
//! @note added in 2.5
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual bool legendSymbolItemChecked( const QString &key );
|
2014-07-04 20:49:26 +02:00
|
|
|
|
|
|
|
//! item in symbology was checked
|
2014-09-01 11:05:51 +07:00
|
|
|
//! @note added in 2.5
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual void checkLegendSymbolItem( const QString &key, bool state = true );
|
2014-07-04 20:49:26 +02:00
|
|
|
|
2015-12-08 06:32:23 +11:00
|
|
|
/** Sets the symbol to be used for a legend symbol item.
|
|
|
|
* @param key rule key for legend symbol
|
|
|
|
* @param symbol new symbol for legend item. Ownership is transferred to renderer.
|
|
|
|
* @note added in QGIS 2.14
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual void setLegendSymbolItem( const QString &key, QgsSymbol *symbol /Transfer/ );
|
2015-12-08 06:32:23 +11:00
|
|
|
|
2012-09-24 02:28:15 +02:00
|
|
|
//! return a list of item text / symbol
|
2014-01-27 09:22:24 +01:00
|
|
|
//! @note not available in python bindings
|
2017-05-01 18:13:15 +02:00
|
|
|
// virtual QgsLegendSymbolList legendSymbolItems( double scaleDenominator = -1, const QString &rule = "" );
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2014-08-20 19:32:29 +07:00
|
|
|
//! Return a list of symbology items for the legend. Better choice than legendSymbolItems().
|
|
|
|
//! Default fallback implementation just uses legendSymbolItems() implementation
|
2014-09-01 11:05:51 +07:00
|
|
|
//! @note added in 2.6
|
2014-08-20 19:32:29 +07:00
|
|
|
virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const;
|
|
|
|
|
|
|
|
//! If supported by the renderer, return classification attribute for the use in legend
|
|
|
|
//! @note added in 2.6
|
|
|
|
virtual QString legendClassificationAttribute() const;
|
|
|
|
|
2012-09-24 02:28:15 +02:00
|
|
|
//! set type and size of editing vertex markers for subsequent rendering
|
|
|
|
void setVertexMarkerAppearance( int type, int size );
|
|
|
|
|
2015-08-17 08:10:44 +10:00
|
|
|
/** Returns whether the renderer will render a feature or not.
|
|
|
|
* Must be called between startRender() and stopRender() calls.
|
|
|
|
* Default implementation uses symbolForFeature().
|
|
|
|
* @note added in QGIS 2.12
|
2015-12-07 21:54:40 +11:00
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual bool willRenderFeature( QgsFeature &feat, QgsRenderContext &context );
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2015-10-12 21:50:49 +11:00
|
|
|
/** Returns list of symbols used for rendering the feature.
|
|
|
|
* For renderers that do not support MoreSymbolsPerFeature it is more efficient
|
|
|
|
* to use symbolForFeature()
|
|
|
|
* @note added in QGIS 2.12
|
2016-02-14 03:50:23 +01:00
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual QgsSymbolList symbolsForFeature( QgsFeature &feat, QgsRenderContext &context );
|
2015-08-17 08:10:44 +10:00
|
|
|
|
2015-12-07 21:54:40 +11:00
|
|
|
/** Equivalent of originalSymbolsForFeature() call
|
|
|
|
* extended to support renderers that may use more symbols per feature - similar to symbolsForFeature()
|
2016-09-12 16:50:14 +10:00
|
|
|
* @note added in 2.12 */
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual QgsSymbolList originalSymbolsForFeature( QgsFeature &feat, QgsRenderContext &context );
|
2014-09-25 12:00:45 +02:00
|
|
|
|
2015-07-29 11:52:14 +02:00
|
|
|
/** Allows for a renderer to modify the extent of a feature request prior to rendering
|
2014-11-22 13:03:54 +11:00
|
|
|
* @param extent reference to request's filter extent. Modify extent to change the
|
|
|
|
* extent of feature request
|
|
|
|
* @param context render context
|
|
|
|
* @note added in QGIS 2.7
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual void modifyRequestExtent( QgsRectangle &extent, QgsRenderContext &context );
|
2014-11-22 13:03:54 +11:00
|
|
|
|
2015-03-28 20:03:37 +11:00
|
|
|
/** Returns the current paint effect for the renderer.
|
|
|
|
* @returns paint effect
|
|
|
|
* @note added in QGIS 2.9
|
|
|
|
* @see setPaintEffect
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
QgsPaintEffect *paintEffect() const;
|
2015-03-28 20:03:37 +11:00
|
|
|
|
|
|
|
/** Sets the current paint effect for the renderer.
|
|
|
|
* @param effect paint effect. Ownership is transferred to the renderer.
|
|
|
|
* @note added in QGIS 2.9
|
|
|
|
* @see paintEffect
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
void setPaintEffect( QgsPaintEffect *effect /Transfer/);
|
2015-03-28 20:03:37 +11:00
|
|
|
|
2015-07-09 18:34:55 +10:00
|
|
|
/** Returns whether the renderer must render as a raster.
|
|
|
|
* @note added in QGIS 2.12
|
|
|
|
* @see setForceRasterRender
|
|
|
|
*/
|
|
|
|
bool forceRasterRender() const;
|
|
|
|
|
|
|
|
/** Sets whether the renderer should be rendered to a raster destination.
|
|
|
|
* @param forceRaster set to true if renderer must be drawn on a raster surface.
|
|
|
|
* This may be desirable for highly detailed layers where rendering as a vector
|
|
|
|
* would result in a large, complex vector output.
|
|
|
|
* @see forceRasterRender
|
|
|
|
* @note added in QGIS 2.12
|
|
|
|
*/
|
|
|
|
void setForceRasterRender( bool forceRaster );
|
|
|
|
|
2015-12-21 11:50:29 +01:00
|
|
|
/**
|
|
|
|
* Get the order in which features shall be processed by this renderer.
|
|
|
|
* @note added in QGIS 2.14
|
2016-02-19 10:11:43 +11:00
|
|
|
* @note this property has no effect if orderByEnabled() is false
|
|
|
|
* @see orderByEnabled()
|
2015-12-21 11:50:29 +01:00
|
|
|
*/
|
|
|
|
QgsFeatureRequest::OrderBy orderBy() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Define the order in which features shall be processed by this renderer.
|
2016-02-19 10:11:43 +11:00
|
|
|
* @note this property has no effect if orderByEnabled() is false
|
2015-12-21 11:50:29 +01:00
|
|
|
* @note added in QGIS 2.14
|
2016-02-19 10:11:43 +11:00
|
|
|
* @see setOrderByEnabled()
|
2015-12-21 11:50:29 +01:00
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
void setOrderBy( const QgsFeatureRequest::OrderBy &orderBy );
|
2015-12-21 11:50:29 +01:00
|
|
|
|
2016-02-19 10:11:43 +11:00
|
|
|
/**
|
|
|
|
* Returns whether custom ordering will be applied before features are processed by this renderer.
|
|
|
|
* @note added in QGIS 2.14
|
|
|
|
* @see orderBy()
|
|
|
|
* @see setOrderByEnabled()
|
|
|
|
*/
|
|
|
|
bool orderByEnabled() const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets whether custom ordering should be applied before features are processed by this renderer.
|
|
|
|
* @param enabled set to true to enable custom feature ordering
|
|
|
|
* @note added in QGIS 2.14
|
|
|
|
* @see setOrderBy()
|
|
|
|
* @see orderByEnabled()
|
|
|
|
*/
|
|
|
|
void setOrderByEnabled( bool enabled );
|
|
|
|
|
2016-06-07 14:49:45 +10:00
|
|
|
/** Sets an embedded renderer (subrenderer) for this feature renderer. The base class implementation
|
2016-12-19 10:52:29 +01:00
|
|
|
* does nothing with subrenderers, but individual derived classes can use these to modify their behavior.
|
2016-06-07 14:49:45 +10:00
|
|
|
* @param subRenderer the embedded renderer. Ownership will be transferred.
|
|
|
|
* @see embeddedRenderer()
|
|
|
|
* @note added in QGIS 2.16
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual void setEmbeddedRenderer( QgsFeatureRenderer *subRenderer /Transfer/ );
|
2016-06-07 14:49:45 +10:00
|
|
|
|
|
|
|
/** Returns the current embedded renderer (subrenderer) for this feature renderer. The base class
|
|
|
|
* implementation does not use subrenderers and will always return null.
|
|
|
|
* @see setEmbeddedRenderer()
|
|
|
|
* @note added in QGIS 2.16
|
|
|
|
*/
|
2017-05-01 18:13:15 +02:00
|
|
|
virtual const QgsFeatureRenderer *embeddedRenderer() const;
|
2016-06-07 14:49:45 +10:00
|
|
|
|
2012-09-24 02:28:15 +02:00
|
|
|
protected:
|
2017-05-01 18:13:15 +02:00
|
|
|
QgsFeatureRenderer( const QString &type );
|
2012-09-24 02:28:15 +02:00
|
|
|
|
|
|
|
void renderFeatureWithSymbol( QgsFeature& feature,
|
2016-08-05 08:09:43 +02:00
|
|
|
QgsSymbol* symbol,
|
2012-09-24 02:28:15 +02:00
|
|
|
QgsRenderContext& context,
|
|
|
|
int layer,
|
|
|
|
bool selected,
|
|
|
|
bool drawVertexMarker );
|
|
|
|
|
|
|
|
//! render editing vertex marker at specified point
|
2017-05-01 18:13:15 +02:00
|
|
|
void renderVertexMarker( QPointF pt, QgsRenderContext &context );
|
2012-09-24 02:28:15 +02:00
|
|
|
//! render editing vertex marker for a polyline
|
2017-05-01 18:13:15 +02:00
|
|
|
void renderVertexMarkerPolyline( QPolygonF &pts, QgsRenderContext &context );
|
2012-09-24 02:28:15 +02:00
|
|
|
//! render editing vertex marker for a polygon
|
2017-05-01 18:13:15 +02:00
|
|
|
void renderVertexMarkerPolygon( QPolygonF &pts, QList<QPolygonF> *rings, QgsRenderContext &context );
|
2012-09-24 02:28:15 +02:00
|
|
|
|
2016-05-15 05:18:16 +02:00
|
|
|
/**
|
|
|
|
* Creates a point in screen coordinates from a wkb string in map
|
|
|
|
* coordinates
|
|
|
|
*/
|
2017-06-01 12:18:43 +02:00
|
|
|
static QPointF _getPoint( QgsRenderContext &context, const QgsPoint &point );
|
2013-06-23 16:00:16 +02:00
|
|
|
|
2016-01-04 22:51:18 +11:00
|
|
|
/**
|
|
|
|
* Clones generic renderer data to another renderer.
|
|
|
|
* Currently clones
|
|
|
|
* * Order By
|
|
|
|
* * Paint Effect
|
|
|
|
*
|
|
|
|
* @param destRenderer destination renderer for copied effect
|
|
|
|
*/
|
2016-08-06 11:01:42 +02:00
|
|
|
void copyRendererData( QgsFeatureRenderer *destRenderer ) const;
|
2016-01-04 22:51:18 +11:00
|
|
|
|
2017-01-16 15:13:30 +01:00
|
|
|
/** @note this function is used to convert old sizeScale expressions to symbol
|
2016-01-04 22:51:18 +11:00
|
|
|
* level DataDefined size
|
|
|
|
*/
|
2017-05-03 07:45:22 +02:00
|
|
|
static void convertSymbolSizeScale( QgsSymbol *symbol, QgsSymbol::ScaleMethod method, const QString &field );
|
2017-01-16 15:13:30 +01:00
|
|
|
/** @note this function is used to convert old rotations expressions to symbol
|
2016-01-04 22:51:18 +11:00
|
|
|
* level DataDefined angle
|
|
|
|
*/
|
2017-05-03 07:45:22 +02:00
|
|
|
static void convertSymbolRotation( QgsSymbol *symbol, const QString &field );
|
2016-01-04 22:51:18 +11:00
|
|
|
|
2014-01-14 17:23:16 +01:00
|
|
|
private:
|
2016-08-06 11:01:42 +02:00
|
|
|
QgsFeatureRenderer( const QgsFeatureRenderer & );
|
2017-05-03 07:45:22 +02:00
|
|
|
QgsFeatureRenderer &operator=( const QgsFeatureRenderer & );
|
2014-05-27 23:22:50 +02:00
|
|
|
|
2012-09-24 02:28:15 +02:00
|
|
|
};
|