QGIS API Documentation  3.20.0-Odense (decaadbb31)
qgssymbollayer.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgssymbollayer.h
3  ---------------------
4  begin : November 2009
5  copyright : (C) 2009 by Martin Dobias
6  email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 #ifndef QGSSYMBOLLAYER_H
16 #define QGSSYMBOLLAYER_H
17 
18 #define DEG2RAD(x) ((x)*M_PI/180)
19 #define DEFAULT_SCALE_METHOD Qgis::ScaleMethod::ScaleDiameter
20 
21 #include "qgis_core.h"
22 #include "qgis.h"
23 #include <QColor>
24 #include <QMap>
25 #include <QPointF>
26 #include <QSet>
27 #include <QDomDocument>
28 #include <QDomElement>
29 #include <QPainterPath>
30 
31 #include "qgsfields.h"
32 #include "qgspropertycollection.h"
33 #include "qgssymbolrendercontext.h"
34 
35 class QPainter;
36 class QSize;
37 class QPolygonF;
38 
39 class QgsDxfExport;
40 class QgsExpression;
41 class QgsRenderContext;
42 class QgsPaintEffect;
44 
45 #ifndef SIP_RUN
46 typedef QMap<QString, QString> QgsStringMap;
47 #endif
48 
53 class CORE_EXPORT QgsSymbolLayer
54 {
55 #ifdef SIP_RUN
56 #include <qgslinesymbollayer.h>
57 #endif
58 
59 
60 #ifdef SIP_RUN
62  switch ( sipCpp->type() )
63  {
65  if ( sipCpp->layerType() == "EllipseMarker" )
66  sipType = sipType_QgsEllipseSymbolLayer;
67  else if ( sipCpp->layerType() == "FontMarker" )
68  sipType = sipType_QgsFontMarkerSymbolLayer;
69  else if ( sipCpp->layerType() == "SimpleMarker" )
70  sipType = sipType_QgsSimpleMarkerSymbolLayer;
71  else if ( sipCpp->layerType() == "FilledMarker" )
72  sipType = sipType_QgsFilledMarkerSymbolLayer;
73  else if ( sipCpp->layerType() == "SvgMarker" )
74  sipType = sipType_QgsSvgMarkerSymbolLayer;
75  else if ( sipCpp->layerType() == "RasterMarker" )
76  sipType = sipType_QgsRasterMarkerSymbolLayer;
77  else if ( sipCpp->layerType() == "VectorField" )
78  sipType = sipType_QgsVectorFieldSymbolLayer;
79  else if ( sipCpp->layerType() == "MaskMarker" )
80  sipType = sipType_QgsMaskMarkerSymbolLayer;
81  else
82  sipType = sipType_QgsMarkerSymbolLayer;
83  break;
84 
86  if ( sipCpp->layerType() == "MarkerLine" )
87  sipType = sipType_QgsMarkerLineSymbolLayer;
88  else if ( sipCpp->layerType() == "SimpleLine" )
89  sipType = sipType_QgsSimpleLineSymbolLayer;
90  else if ( sipCpp->layerType() == "ArrowLine" )
91  sipType = sipType_QgsArrowSymbolLayer;
92  else if ( sipCpp->layerType() == "InterpolatedLine" )
93  sipType = sipType_QgsInterpolatedLineSymbolLayer;
94  else
95  sipType = sipType_QgsLineSymbolLayer;
96  break;
97 
99  if ( sipCpp->layerType() == "SimpleFill" )
100  sipType = sipType_QgsSimpleFillSymbolLayer;
101  else if ( sipCpp->layerType() == "LinePatternFill" )
102  sipType = sipType_QgsLinePatternFillSymbolLayer;
103  else if ( sipCpp->layerType() == "PointPatternFill" )
104  sipType = sipType_QgsPointPatternFillSymbolLayer;
105  else if ( sipCpp->layerType() == "SVGFill" )
106  sipType = sipType_QgsSVGFillSymbolLayer;
107  else if ( sipCpp->layerType() == "RasterFill" )
108  sipType = sipType_QgsRasterFillSymbolLayer;
109  else if ( sipCpp->layerType() == "CentroidFill" )
110  sipType = sipType_QgsCentroidFillSymbolLayer;
111  else if ( sipCpp->layerType() == "GradientFill" )
112  sipType = sipType_QgsGradientFillSymbolLayer;
113  else if ( sipCpp->layerType() == "ShapeburstFill" )
114  sipType = sipType_QgsShapeburstFillSymbolLayer;
115  else if ( sipCpp->layerType() == "RandomMarkerFill" )
116  sipType = sipType_QgsRandomMarkerFillSymbolLayer;
117  else
118  sipType = sipType_QgsFillSymbolLayer;
119  break;
120 
122  sipType = sipType_QgsGeometryGeneratorSymbolLayer;
123  break;
124  }
125  SIP_END
126 #endif
127  public:
128 
133  enum Property
134  {
135  PropertySize = 0,
197  };
198 
203  static const QgsPropertiesDefinition &propertyDefinitions();
204 
205  virtual ~QgsSymbolLayer();
206 
208  QgsSymbolLayer( const QgsSymbolLayer &other ) = delete;
209 
211  QgsSymbolLayer &operator=( const QgsSymbolLayer &other ) = delete;
212 
218  bool enabled() const { return mEnabled; }
219 
227  void setEnabled( bool enabled ) { mEnabled = enabled; }
228 
232  virtual QColor color() const { return mColor; }
233 
237  virtual void setColor( const QColor &color ) { mColor = color; }
238 
243  virtual void setStrokeColor( const QColor &color ) { Q_UNUSED( color ) }
244 
249  virtual QColor strokeColor() const { return QColor(); }
250 
255  virtual void setFillColor( const QColor &color ) { Q_UNUSED( color ) }
256 
261  virtual QColor fillColor() const { return QColor(); }
262 
267  virtual QString layerType() const = 0;
268 
281  virtual void startRender( QgsSymbolRenderContext &context ) = 0;
282 
294  virtual void stopRender( QgsSymbolRenderContext &context ) = 0;
295 
314  virtual void startFeatureRender( const QgsFeature &feature, QgsRenderContext &context );
315 
334  virtual void stopFeatureRender( const QgsFeature &feature, QgsRenderContext &context );
335 
339  virtual QgsSymbolLayer *clone() const = 0 SIP_FACTORY;
340 
342  virtual void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const
343  { Q_UNUSED( props ) element.appendChild( doc.createComment( QStringLiteral( "SymbolLayerV2 %1 not implemented yet" ).arg( layerType() ) ) ); }
344 
345  virtual QString ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const { Q_UNUSED( mmScaleFactor ) Q_UNUSED( mapUnitScaleFactor ); return QString(); }
346 
352  virtual QVariantMap properties() const = 0;
353 
354  virtual void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) = 0;
355 
359  virtual QgsSymbol *subSymbol();
360 
362  virtual bool setSubSymbol( QgsSymbol *symbol SIP_TRANSFER );
363 
364  Qgis::SymbolType type() const { return mType; }
365 
367  virtual bool isCompatibleWithSymbol( QgsSymbol *symbol ) const;
368 
377  virtual bool canCauseArtifactsBetweenAdjacentTiles() const;
378 
386  void setLocked( bool locked ) { mLocked = locked; }
387 
393  bool isLocked() const { return mLocked; }
394 
402  virtual double estimateMaxBleed( const QgsRenderContext &context ) const { Q_UNUSED( context ) return 0; }
403 
412  virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit ) { Q_UNUSED( unit ) }
413 
423 
429  virtual bool usesMapUnits() const;
430 
431  virtual void setMapUnitScale( const QgsMapUnitScale &scale ) { Q_UNUSED( scale ) }
432  virtual QgsMapUnitScale mapUnitScale() const { return QgsMapUnitScale(); }
433 
440  void setRenderingPass( int renderingPass );
441 
448  int renderingPass() const;
449 
454  virtual QSet<QString> usedAttributes( const QgsRenderContext &context ) const;
455 
463  virtual void setDataDefinedProperty( Property key, const QgsProperty &property );
464 
466  virtual bool writeDxf( QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, QgsSymbolRenderContext &context, QPointF shift = QPointF( 0.0, 0.0 ) ) const;
467 
469  virtual double dxfWidth( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const;
470 
472  virtual double dxfOffset( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const;
473 
475  virtual QColor dxfColor( QgsSymbolRenderContext &context ) const;
476 
478  virtual double dxfAngle( QgsSymbolRenderContext &context ) const;
479 
481  virtual QVector<qreal> dxfCustomDashPattern( QgsUnitTypes::RenderUnit &unit ) const;
482 
484  virtual Qt::PenStyle dxfPenStyle() const;
485 
487  virtual QColor dxfBrushColor( QgsSymbolRenderContext &context ) const;
488 
490  virtual Qt::BrushStyle dxfBrushStyle() const;
491 
498  QgsPaintEffect *paintEffect() const;
499 
506  void setPaintEffect( QgsPaintEffect *effect SIP_TRANSFER );
507 
514  virtual void prepareExpressions( const QgsSymbolRenderContext &context );
515 
522  QgsPropertyCollection &dataDefinedProperties() { return mDataDefinedProperties; }
523 
529  const QgsPropertyCollection &dataDefinedProperties() const { return mDataDefinedProperties; } SIP_SKIP
530 
537  void setDataDefinedProperties( const QgsPropertyCollection &collection ) { mDataDefinedProperties = collection; }
538 
544  virtual bool hasDataDefinedProperties() const;
545 
551  virtual QList<QgsSymbolLayerReference> masks() const;
552 
553  protected:
554 
560  QgsSymbolLayer( Qgis::SymbolType type, bool locked = false );
561 
563 
565  bool mEnabled = true;
566 
567  bool mLocked = false;
568  QColor mColor;
569  int mRenderingPass = 0;
570 
572 
573  std::unique_ptr< QgsPaintEffect > mPaintEffect;
575 
576  // Configuration of selected symbology implementation
578  static const bool SELECTION_IS_OPAQUE = true;
580  static const bool SELECT_FILL_BORDER = false;
582  static const bool SELECT_FILL_STYLE = false;
583 
588  void restoreOldDataDefinedProperties( const QVariantMap &stringMap );
589 
594  void copyDataDefinedProperties( QgsSymbolLayer *destLayer ) const;
595 
601  void copyPaintEffect( QgsSymbolLayer *destLayer ) const;
602 
603  private:
604  static void initPropertyDefinitions();
605 
607  static QgsPropertiesDefinition sPropertyDefinitions;
608 
609 #ifdef SIP_RUN
610  QgsSymbolLayer( const QgsSymbolLayer &other );
611 #endif
612 
613 };
614 
616 
622 class CORE_EXPORT QgsMarkerSymbolLayer : public QgsSymbolLayer
623 {
624  public:
625 
628  {
632  };
633 
636  {
637  Top,
640  };
641 
643  QgsMarkerSymbolLayer( const QgsMarkerSymbolLayer &other ) = delete;
644 
647 
648  void startRender( QgsSymbolRenderContext &context ) override;
649 
650  void stopRender( QgsSymbolRenderContext &context ) override;
651 
658  virtual void renderPoint( QPointF point, QgsSymbolRenderContext &context ) = 0;
659 
660  void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
661 
668  void setAngle( double angle ) { mAngle = angle; }
669 
674  double angle() const { return mAngle; }
675 
685  void setLineAngle( double lineAngle ) { mLineAngle = lineAngle; }
686 
694  virtual void setSize( double size ) { mSize = size; }
695 
702  double size() const { return mSize; }
703 
711  void setSizeUnit( QgsUnitTypes::RenderUnit unit ) { mSizeUnit = unit; }
712 
719  QgsUnitTypes::RenderUnit sizeUnit() const { return mSizeUnit; }
720 
728  void setSizeMapUnitScale( const QgsMapUnitScale &scale ) { mSizeMapUnitScale = scale; }
729 
736  const QgsMapUnitScale &sizeMapUnitScale() const { return mSizeMapUnitScale; }
737 
743  void setScaleMethod( Qgis::ScaleMethod scaleMethod ) { mScaleMethod = scaleMethod; }
744 
749  Qgis::ScaleMethod scaleMethod() const { return mScaleMethod; }
750 
759  void setOffset( QPointF offset ) { mOffset = offset; }
760 
768  QPointF offset() const { return mOffset; }
769 
777  void setOffsetUnit( QgsUnitTypes::RenderUnit unit ) { mOffsetUnit = unit; }
778 
785  QgsUnitTypes::RenderUnit offsetUnit() const { return mOffsetUnit; }
786 
794  void setOffsetMapUnitScale( const QgsMapUnitScale &scale ) { mOffsetMapUnitScale = scale; }
795 
802  const QgsMapUnitScale &offsetMapUnitScale() const { return mOffsetMapUnitScale; }
803 
811  void setHorizontalAnchorPoint( HorizontalAnchorPoint h ) { mHorizontalAnchorPoint = h; }
812 
819  HorizontalAnchorPoint horizontalAnchorPoint() const { return mHorizontalAnchorPoint; }
820 
828  void setVerticalAnchorPoint( VerticalAnchorPoint v ) { mVerticalAnchorPoint = v; }
829 
836  VerticalAnchorPoint verticalAnchorPoint() const { return mVerticalAnchorPoint; }
837 
838  void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
839 
846  virtual void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const
847  { Q_UNUSED( props ) element.appendChild( doc.createComment( QStringLiteral( "QgsMarkerSymbolLayer %1 not implemented yet" ).arg( layerType() ) ) ); }
848 
849  void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
850  QgsUnitTypes::RenderUnit outputUnit() const override;
851  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
852  QgsMapUnitScale mapUnitScale() const override;
853 
860  virtual QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) = 0;
861 
862  protected:
863 
868  QgsMarkerSymbolLayer( bool locked = false );
869 
877  void markerOffset( QgsSymbolRenderContext &context, double &offsetX, double &offsetY ) const;
878 
889  void markerOffset( QgsSymbolRenderContext &context, double width, double height, double &offsetX, double &offsetY ) const SIP_PYNAME( markerOffsetWithWidthAndHeight );
890 
892  void markerOffset( QgsSymbolRenderContext &context, double width, double height,
894  double &offsetX, double &offsetY,
895  const QgsMapUnitScale &widthMapUnitScale, const QgsMapUnitScale &heightMapUnitScale ) const SIP_PYNAME( markerOffset2 );
896 
903  static QPointF _rotatedOffset( QPointF offset, double angle );
904 
906  double mAngle = 0;
908  double mLineAngle = 0;
910  double mSize = 2.0;
916  QPointF mOffset;
924  HorizontalAnchorPoint mHorizontalAnchorPoint = HCenter;
926  VerticalAnchorPoint mVerticalAnchorPoint = VCenter;
927 
928  private:
929  static QgsMarkerSymbolLayer::HorizontalAnchorPoint decodeHorizontalAnchorPoint( const QString &str );
930  static QgsMarkerSymbolLayer::VerticalAnchorPoint decodeVerticalAnchorPoint( const QString &str );
931 
932 #ifdef SIP_RUN
934 #endif
935 };
936 
941 class CORE_EXPORT QgsLineSymbolLayer : public QgsSymbolLayer
942 {
943  public:
944 
947  {
951  };
952 
954  QgsLineSymbolLayer( const QgsLineSymbolLayer &other ) = delete;
955 
958 
959  void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
960  QgsUnitTypes::RenderUnit outputUnit() const override;
961  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
962  QgsMapUnitScale mapUnitScale() const override;
963  void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
964  double dxfWidth( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const override;
965 
970  virtual void renderPolyline( const QPolygonF &points, QgsSymbolRenderContext &context ) = 0;
971 
980  virtual void renderPolygonStroke( const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context );
981 
995  virtual void setWidth( double width ) { mWidth = width; }
996 
1006  virtual double width() const { return mWidth; }
1007 
1018  virtual double width( const QgsRenderContext &context ) const;
1019 
1029  double offset() const { return mOffset; }
1030 
1040  void setOffset( double offset ) { mOffset = offset; }
1041 
1048  void setOffsetUnit( QgsUnitTypes::RenderUnit unit ) { mOffsetUnit = unit; }
1049 
1056  QgsUnitTypes::RenderUnit offsetUnit() const { return mOffsetUnit; }
1057 
1064  void setOffsetMapUnitScale( const QgsMapUnitScale &scale ) { mOffsetMapUnitScale = scale; }
1065 
1072  const QgsMapUnitScale &offsetMapUnitScale() const { return mOffsetMapUnitScale; }
1073 
1074  // TODO QGIS 4.0 - setWidthUnit(), widthUnit(), setWidthUnitScale(), widthUnitScale()
1075  // only apply to simple line symbol layers and do not belong here.
1076 
1082  void setWidthUnit( QgsUnitTypes::RenderUnit unit ) { mWidthUnit = unit; }
1083 
1088  QgsUnitTypes::RenderUnit widthUnit() const { return mWidthUnit; }
1089 
1090  void setWidthMapUnitScale( const QgsMapUnitScale &scale ) { mWidthMapUnitScale = scale; }
1091  const QgsMapUnitScale &widthMapUnitScale() const { return mWidthMapUnitScale; }
1092 
1103  RenderRingFilter ringFilter() const;
1104 
1115  void setRingFilter( QgsLineSymbolLayer::RenderRingFilter filter );
1116 
1117  protected:
1118  QgsLineSymbolLayer( bool locked = false );
1119 
1120  double mWidth = 0;
1123  double mOffset = 0;
1126 
1127  RenderRingFilter mRingFilter = AllRings;
1128 
1129  private:
1130 #ifdef SIP_RUN
1131  QgsLineSymbolLayer( const QgsLineSymbolLayer &other );
1132 #endif
1133 };
1134 
1139 class CORE_EXPORT QgsFillSymbolLayer : public QgsSymbolLayer
1140 {
1141  public:
1142 
1144  QgsFillSymbolLayer( const QgsFillSymbolLayer &other ) = delete;
1145 
1148 
1154  virtual void renderPolygon( const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context ) = 0;
1155 
1156  void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
1157 
1158  void setAngle( double angle ) { mAngle = angle; }
1159  double angle() const { return mAngle; }
1160 
1161  protected:
1162  QgsFillSymbolLayer( bool locked = false );
1164  void _renderPolygon( QPainter *p, const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context );
1165 
1166  double mAngle = 0.0;
1167 
1168  private:
1169 #ifdef SIP_RUN
1170  QgsFillSymbolLayer( const QgsFillSymbolLayer &other );
1171 #endif
1172 };
1173 
1174 class QgsSymbolLayerWidget; // why does SIP fail, when this isn't here
1175 
1176 #endif
1177 
1178 
ScaleMethod
Scale methods.
Definition: qgis.h:182
@ ScaleDiameter
Calculate scale by the diameter.
SymbolType
Symbol types.
Definition: qgis.h:168
@ Marker
Marker symbol.
@ Line
Line symbol.
@ Fill
Fill symbol.
@ Hybrid
Hybrid symbol.
Exports QGIS layers to the DXF format.
Definition: qgsdxfexport.h:64
Class for parsing and evaluation of expressions (formerly called "search strings").
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Container of fields for a vector layer.
Definition: qgsfields.h:45
virtual void renderPolygon(const QPolygonF &points, const QVector< QPolygonF > *rings, QgsSymbolRenderContext &context)=0
Renders the fill symbol layer for the polygon whose outer ring is defined by points,...
double angle() const
QgsFillSymbolLayer & operator=(const QgsFillSymbolLayer &other)=delete
QgsFillSymbolLayer cannot be copied.
void setAngle(double angle)
QgsFillSymbolLayer(const QgsFillSymbolLayer &other)=delete
QgsFillSymbolLayer cannot be copied.
RenderRingFilter
Options for filtering rings when the line symbol layer is being used to render a polygon's rings.
@ ExteriorRingOnly
Render the exterior ring only.
@ InteriorRingsOnly
Render the interior rings only.
@ AllRings
Render both exterior and interior rings.
QgsMapUnitScale mWidthMapUnitScale
QgsUnitTypes::RenderUnit offsetUnit() const
Returns the units for the line's offset.
virtual void setWidth(double width)
Sets the width of the line symbol layer.
const QgsMapUnitScale & offsetMapUnitScale() const
Returns the map unit scale for the line's offset.
QgsLineSymbolLayer(const QgsLineSymbolLayer &other)=delete
QgsLineSymbolLayer cannot be copied.
void setWidthMapUnitScale(const QgsMapUnitScale &scale)
void setWidthUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the line's width.
void setOffsetUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for the line's offset.
void setOffset(double offset)
Sets the line's offset.
virtual void renderPolyline(const QPolygonF &points, QgsSymbolRenderContext &context)=0
Renders the line symbol layer along the line joining points, using the given render context.
QgsUnitTypes::RenderUnit widthUnit() const
Returns the units for the line's width.
virtual double width() const
Returns the estimated width for the line symbol layer.
QgsMapUnitScale mOffsetMapUnitScale
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the line's offset.
double offset() const
Returns the line's offset.
const QgsMapUnitScale & widthMapUnitScale() const
QgsLineSymbolLayer & operator=(const QgsLineSymbolLayer &other)=delete
QgsLineSymbolLayer cannot be copied.
Struct for storing maximum and minimum scales for measurements in map units.
Abstract base class for marker symbol layers.
virtual void setSize(double size)
Sets the symbol size.
virtual QRectF bounds(QPointF point, QgsSymbolRenderContext &context)=0
Returns the approximate bounding box of the marker symbol layer, taking into account any data defined...
QPointF offset() const
Returns the marker's offset, which is the horizontal and vertical displacement which the rendered mar...
HorizontalAnchorPoint
Symbol horizontal anchor points.
@ Right
Align to right side of symbol.
@ HCenter
Align to horizontal center of symbol.
@ Left
Align to left side of symbol.
void setAngle(double angle)
Sets the rotation angle for the marker.
Qgis::ScaleMethod scaleMethod() const
Returns the method to use for scaling the marker's size.
QgsMarkerSymbolLayer & operator=(const QgsMarkerSymbolLayer &other)=delete
QgsMarkerSymbolLayer cannot be copied.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the symbol's size.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the symbol's size.
void setVerticalAnchorPoint(VerticalAnchorPoint v)
Sets the vertical anchor point for positioning the symbol.
virtual void renderPoint(QPointF point, QgsSymbolRenderContext &context)=0
Renders a marker at the specified point.
QPointF mOffset
Marker offset.
void setHorizontalAnchorPoint(HorizontalAnchorPoint h)
Sets the horizontal anchor point for positioning the symbol.
void setOffset(QPointF offset)
Sets the marker's offset, which is the horizontal and vertical displacement which the rendered marker...
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the symbol's size.
const QgsMapUnitScale & offsetMapUnitScale() const
Returns the map unit scale for the symbol's offset.
void setLineAngle(double lineAngle)
Sets the line angle modification for the symbol's angle.
double size() const
Returns the symbol size.
QgsMapUnitScale mOffsetMapUnitScale
Offset map unit scale.
QgsMarkerSymbolLayer(const QgsMarkerSymbolLayer &other)=delete
QgsMarkerSymbolLayer cannot be copied.
QgsUnitTypes::RenderUnit offsetUnit() const
Returns the units for the symbol's offset.
void setScaleMethod(Qgis::ScaleMethod scaleMethod)
Sets the method to use for scaling the marker's size.
VerticalAnchorPoint verticalAnchorPoint() const
Returns the vertical anchor point for positioning the symbol.
QgsMapUnitScale mSizeMapUnitScale
Marker size map unit scale.
HorizontalAnchorPoint horizontalAnchorPoint() const
Returns the horizontal anchor point for positioning the symbol.
VerticalAnchorPoint
Symbol vertical anchor points.
@ VCenter
Align to vertical center of symbol.
@ Bottom
Align to bottom of symbol.
@ Top
Align to top of symbol.
void setOffsetUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the symbol's offset.
const QgsMapUnitScale & sizeMapUnitScale() const
Returns the map unit scale for the symbol's size.
virtual void writeSldMarker(QDomDocument &doc, QDomElement &element, const QVariantMap &props) const
Writes the symbol layer definition as a SLD XML element.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the symbol's offset.
double angle() const
Returns the rotation angle for the marker, in degrees clockwise from north.
Base class for visual effects which can be applied to QPicture drawings.
A grouped map of multiple QgsProperty objects, each referenced by a integer key value.
A store for object properties.
Definition: qgsproperty.h:232
Contains information about the context of a rendering operation.
Type used to refer to a specific symbol layer in a symbol of a layer.
Property
Data definable properties.
@ PropertyGradientReference1X
Gradient reference point 1 x.
@ PropertyShapeburstIgnoreRings
Shapeburst ignore rings.
@ PropertyGradientReference2X
Gradient reference point 2 x.
@ PropertyStrokeStyle
Stroke style (eg solid, dashed)
@ PropertyPlacement
Line marker placement.
@ PropertyHorizontalAnchor
Horizontal anchor point.
@ PropertyPreserveAspectRatio
Preserve aspect ratio between width and height.
@ PropertyDistanceX
Horizontal distance between points.
@ PropertyFile
Filename, eg for svg files.
@ PropertyGradientType
Gradient fill type.
@ PropertyCapStyle
Line cap style.
@ PropertyAngle
Symbol angle.
@ PropertyDistanceY
Vertical distance between points.
@ PropertyDisplacementX
Horizontal displacement.
@ PropertyVerticalAnchor
Vertical anchor point.
@ PropertyGradientSpread
Gradient spread mode.
@ PropertyOffsetY
Vertical offset.
@ PropertyGradientReference1Y
Gradient reference point 1 y.
@ PropertyLineDistance
Distance between lines, or length of lines for hash line symbols.
@ PropertyOffsetAlongLine
Offset along line.
@ PropertyArrowStartWidth
Arrow tail start width.
@ PropertyBlurRadius
Shapeburst blur radius.
@ PropertyGradientReference2Y
Gradient reference point 2 y.
@ PropertyDensityArea
Density area.
@ PropertyArrowHeadLength
Arrow head length.
@ PropertyGradientReference1IsCentroid
Gradient reference point 1 is centroid.
@ PropertyCustomDash
Custom dash pattern.
@ PropertyShapeburstUseWholeShape
Shapeburst use whole shape.
@ PropertyArrowHeadThickness
Arrow head thickness.
@ PropertyOffsetX
Horizontal offset.
@ PropertyJoinStyle
Line join style.
@ PropertyTrimEnd
Trim distance from end of line (since QGIS 3.20)
@ PropertyOpacity
Opacity.
@ PropertySecondaryColor
Secondary color (eg for gradient fills)
@ PropertyCharacter
Character, eg for font marker symbol layers.
@ PropertyCoordinateMode
Gradient coordinate mode.
@ PropertyLineAngle
Line angle, or angle of hash lines for hash line symbols.
@ PropertyShapeburstMaxDistance
Shapeburst fill from edge distance.
@ PropertyTrimStart
Trim distance from start of line (since QGIS 3.20)
@ PropertyOffset
Symbol offset.
@ PropertyStrokeWidth
Stroke width.
@ PropertyDashPatternOffset
Dash pattern offset,.
@ PropertyFillColor
Fill color.
@ PropertyArrowHeadType
Arrow head type.
@ PropertyFontStyle
Font style.
@ PropertyHeight
Symbol height.
@ PropertyClipPoints
Whether markers should be clipped to polygon boundaries.
@ PropertyFontFamily
Font family.
@ PropertyPointCount
Point count.
@ PropertyRandomSeed
Random number seed.
@ PropertyLayerEnabled
Whether symbol layer is enabled.
@ PropertyName
Name, eg shape name for simple markers.
@ PropertyAverageAngleLength
Length to average symbol angles over.
@ PropertyInterval
Line marker interval.
@ PropertyFillStyle
Fill style (eg solid, dots)
@ PropertyArrowType
Arrow type.
@ PropertyDisplacementY
Vertical displacement.
@ PropertyStrokeColor
Stroke color.
@ PropertyGradientReference2IsCentroid
Gradient reference point 2 is centroid.
@ PropertyArrowWidth
Arrow tail width.
@ PropertyWidth
Symbol width.
virtual void setOutputUnit(QgsUnitTypes::RenderUnit unit)
Sets the units to use for sizes and widths within the symbol layer.
QgsFields mFields
virtual void setFillColor(const QColor &color)
Set fill color.
Qgis::SymbolType type() const
QgsSymbolLayer & operator=(const QgsSymbolLayer &other)=delete
QgsSymbolLayer cannot be copied.
bool isLocked() const
Returns true if the symbol layer colors are locked and the layer will ignore any symbol-level color c...
virtual QgsMapUnitScale mapUnitScale() const
virtual QColor color() const
The fill color.
Qgis::SymbolType mType
virtual void toSld(QDomDocument &doc, QDomElement &element, const QVariantMap &props) const
Saves the symbol layer as SLD.
virtual double estimateMaxBleed(const QgsRenderContext &context) const
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape when ...
virtual void startRender(QgsSymbolRenderContext &context)=0
Called before a set of rendering operations commences on the supplied render context.
QgsSymbolLayer(const QgsSymbolLayer &other)=delete
QgsSymbolLayer cannot be copied.
void setEnabled(bool enabled)
Sets whether symbol layer is enabled and should be drawn.
virtual QgsSymbolLayer * clone() const =0
Shall be reimplemented by subclasses to create a deep copy of the instance.
virtual QVariantMap properties() const =0
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
virtual QColor fillColor() const
Gets fill color.
std::unique_ptr< QgsPaintEffect > mPaintEffect
bool enabled() const
Returns true if symbol layer is enabled and will be drawn.
virtual QString layerType() const =0
Returns a string that represents this layer type.
virtual void stopRender(QgsSymbolRenderContext &context)=0
Called after a set of rendering operations has finished on the supplied render context.
virtual QgsUnitTypes::RenderUnit outputUnit() const
Returns the units to use for sizes and widths within the symbol layer.
virtual void setStrokeColor(const QColor &color)
Set stroke color.
virtual QString ogrFeatureStyle(double mmScaleFactor, double mapUnitScaleFactor) const
void setLocked(bool locked)
Sets whether the layer's colors are locked.
virtual QColor strokeColor() const
Gets stroke color.
virtual void setMapUnitScale(const QgsMapUnitScale &scale)
virtual ~QgsSymbolLayer()
virtual void setColor(const QColor &color)
The fill color.
const QgsPropertyCollection & dataDefinedProperties() const
Returns a reference to the symbol layer's property collection, used for data defined overrides.
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the symbol layer's property collection, used for data defined overrides.
virtual void drawPreviewIcon(QgsSymbolRenderContext &context, QSize size)=0
QgsPropertyCollection mDataDefinedProperties
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the symbol layer's property collection, used for data defined overrides.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:38
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:168
@ RenderUnknownUnit
Mixed or unknown units.
Definition: qgsunittypes.h:175
@ RenderMillimeters
Millimeters.
Definition: qgsunittypes.h:169
double ANALYSIS_EXPORT angle(QgsPoint *p1, QgsPoint *p2, QgsPoint *p3, QgsPoint *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
Definition: MathUtils.cpp:786
#define str(x)
Definition: qgis.cpp:37
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:177
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_END
Definition: qgis_sip.h:194
QMap< int, QgsPropertyDefinition > QgsPropertiesDefinition
Definition of available properties.
QMap< QString, QString > QgsStringMap