QGIS API Documentation  3.22.4-Białowieża (ce8e65e95e)
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 "qgsfields.h"
24 #include "qgspropertycollection.h"
25 #include "qgssymbolrendercontext.h"
26 
27 #include <QColor>
28 #include <QMap>
29 #include <QPointF>
30 #include <QSet>
31 #include <QDomDocument>
32 #include <QDomElement>
33 #include <QPainterPath>
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() == "HashLine" )
91  sipType = sipType_QgsHashedLineSymbolLayer;
92  else if ( sipCpp->layerType() == "ArrowLine" )
93  sipType = sipType_QgsArrowSymbolLayer;
94  else if ( sipCpp->layerType() == "InterpolatedLine" )
95  sipType = sipType_QgsInterpolatedLineSymbolLayer;
96  else
97  sipType = sipType_QgsLineSymbolLayer;
98  break;
99 
101  if ( sipCpp->layerType() == "SimpleFill" )
102  sipType = sipType_QgsSimpleFillSymbolLayer;
103  else if ( sipCpp->layerType() == "LinePatternFill" )
104  sipType = sipType_QgsLinePatternFillSymbolLayer;
105  else if ( sipCpp->layerType() == "PointPatternFill" )
106  sipType = sipType_QgsPointPatternFillSymbolLayer;
107  else if ( sipCpp->layerType() == "SVGFill" )
108  sipType = sipType_QgsSVGFillSymbolLayer;
109  else if ( sipCpp->layerType() == "RasterFill" )
110  sipType = sipType_QgsRasterFillSymbolLayer;
111  else if ( sipCpp->layerType() == "CentroidFill" )
112  sipType = sipType_QgsCentroidFillSymbolLayer;
113  else if ( sipCpp->layerType() == "GradientFill" )
114  sipType = sipType_QgsGradientFillSymbolLayer;
115  else if ( sipCpp->layerType() == "ShapeburstFill" )
116  sipType = sipType_QgsShapeburstFillSymbolLayer;
117  else if ( sipCpp->layerType() == "RandomMarkerFill" )
118  sipType = sipType_QgsRandomMarkerFillSymbolLayer;
119  else
120  sipType = sipType_QgsFillSymbolLayer;
121  break;
122 
124  sipType = sipType_QgsGeometryGeneratorSymbolLayer;
125  break;
126  }
127  SIP_END
128 #endif
129  public:
130 
135  enum Property
136  {
137  PropertySize = 0,
203  };
204 
209  static const QgsPropertiesDefinition &propertyDefinitions();
210 
211  virtual ~QgsSymbolLayer();
212 
214  QgsSymbolLayer( const QgsSymbolLayer &other ) = delete;
215 
217  QgsSymbolLayer &operator=( const QgsSymbolLayer &other ) = delete;
218 
224  virtual Qgis::SymbolLayerFlags flags() const;
225 
231  bool enabled() const { return mEnabled; }
232 
240  void setEnabled( bool enabled ) { mEnabled = enabled; }
241 
245  virtual QColor color() const { return mColor; }
246 
250  virtual void setColor( const QColor &color ) { mColor = color; }
251 
256  virtual void setStrokeColor( const QColor &color ) { Q_UNUSED( color ) }
257 
262  virtual QColor strokeColor() const { return QColor(); }
263 
268  virtual void setFillColor( const QColor &color ) { Q_UNUSED( color ) }
269 
274  virtual QColor fillColor() const { return QColor(); }
275 
280  virtual QString layerType() const = 0;
281 
294  virtual void startRender( QgsSymbolRenderContext &context ) = 0;
295 
307  virtual void stopRender( QgsSymbolRenderContext &context ) = 0;
308 
327  virtual void startFeatureRender( const QgsFeature &feature, QgsRenderContext &context );
328 
347  virtual void stopFeatureRender( const QgsFeature &feature, QgsRenderContext &context );
348 
352  virtual QgsSymbolLayer *clone() const = 0 SIP_FACTORY;
353 
355  virtual void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const
356  { Q_UNUSED( props ) element.appendChild( doc.createComment( QStringLiteral( "SymbolLayerV2 %1 not implemented yet" ).arg( layerType() ) ) ); }
357 
358  virtual QString ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const { Q_UNUSED( mmScaleFactor ) Q_UNUSED( mapUnitScaleFactor ); return QString(); }
359 
365  virtual QVariantMap properties() const = 0;
366 
367  virtual void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) = 0;
368 
372  virtual QgsSymbol *subSymbol();
373 
375  virtual bool setSubSymbol( QgsSymbol *symbol SIP_TRANSFER );
376 
377  Qgis::SymbolType type() const { return mType; }
378 
380  virtual bool isCompatibleWithSymbol( QgsSymbol *symbol ) const;
381 
390  virtual bool canCauseArtifactsBetweenAdjacentTiles() const;
391 
399  void setLocked( bool locked ) { mLocked = locked; }
400 
406  bool isLocked() const { return mLocked; }
407 
415  virtual double estimateMaxBleed( const QgsRenderContext &context ) const { Q_UNUSED( context ) return 0; }
416 
425  virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit ) { Q_UNUSED( unit ) }
426 
436 
442  virtual bool usesMapUnits() const;
443 
444  virtual void setMapUnitScale( const QgsMapUnitScale &scale ) { Q_UNUSED( scale ) }
445  virtual QgsMapUnitScale mapUnitScale() const { return QgsMapUnitScale(); }
446 
453  void setRenderingPass( int renderingPass );
454 
461  int renderingPass() const;
462 
467  virtual QSet<QString> usedAttributes( const QgsRenderContext &context ) const;
468 
476  virtual void setDataDefinedProperty( Property key, const QgsProperty &property );
477 
479  virtual bool writeDxf( QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, QgsSymbolRenderContext &context, QPointF shift = QPointF( 0.0, 0.0 ) ) const;
480 
482  virtual double dxfWidth( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const;
483 
485  virtual double dxfOffset( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const;
486 
488  virtual QColor dxfColor( QgsSymbolRenderContext &context ) const;
489 
491  virtual double dxfAngle( QgsSymbolRenderContext &context ) const;
492 
494  virtual QVector<qreal> dxfCustomDashPattern( QgsUnitTypes::RenderUnit &unit ) const;
495 
497  virtual Qt::PenStyle dxfPenStyle() const;
498 
500  virtual QColor dxfBrushColor( QgsSymbolRenderContext &context ) const;
501 
503  virtual Qt::BrushStyle dxfBrushStyle() const;
504 
511  QgsPaintEffect *paintEffect() const;
512 
519  void setPaintEffect( QgsPaintEffect *effect SIP_TRANSFER );
520 
527  virtual void prepareExpressions( const QgsSymbolRenderContext &context );
528 
535  QgsPropertyCollection &dataDefinedProperties() { return mDataDefinedProperties; }
536 
542  const QgsPropertyCollection &dataDefinedProperties() const { return mDataDefinedProperties; } SIP_SKIP
543 
550  void setDataDefinedProperties( const QgsPropertyCollection &collection ) { mDataDefinedProperties = collection; }
551 
557  virtual bool hasDataDefinedProperties() const;
558 
564  virtual QList<QgsSymbolLayerReference> masks() const;
565 
566  protected:
567 
573  QgsSymbolLayer( Qgis::SymbolType type, bool locked = false );
574 
576 
578  bool mEnabled = true;
579 
580  bool mLocked = false;
581  QColor mColor;
582  int mRenderingPass = 0;
583 
585 
586  std::unique_ptr< QgsPaintEffect > mPaintEffect;
588 
589  // Configuration of selected symbology implementation
591  static const bool SELECTION_IS_OPAQUE = true;
593  static const bool SELECT_FILL_BORDER = false;
595  static const bool SELECT_FILL_STYLE = false;
596 
601  void restoreOldDataDefinedProperties( const QVariantMap &stringMap );
602 
607  void copyDataDefinedProperties( QgsSymbolLayer *destLayer ) const;
608 
614  void copyPaintEffect( QgsSymbolLayer *destLayer ) const;
615 
616  private:
617  static void initPropertyDefinitions();
618 
620  static QgsPropertiesDefinition sPropertyDefinitions;
621 
622 #ifdef SIP_RUN
623  QgsSymbolLayer( const QgsSymbolLayer &other );
624 #endif
625 
626 };
627 
629 
635 class CORE_EXPORT QgsMarkerSymbolLayer : public QgsSymbolLayer
636 {
637  public:
638 
641  {
645  };
646 
649  {
650  Top,
653  };
654 
656  QgsMarkerSymbolLayer( const QgsMarkerSymbolLayer &other ) = delete;
657 
660 
661  void startRender( QgsSymbolRenderContext &context ) override;
662 
663  void stopRender( QgsSymbolRenderContext &context ) override;
664 
671  virtual void renderPoint( QPointF point, QgsSymbolRenderContext &context ) = 0;
672 
673  void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
674 
681  void setAngle( double angle ) { mAngle = angle; }
682 
687  double angle() const { return mAngle; }
688 
698  void setLineAngle( double lineAngle ) { mLineAngle = lineAngle; }
699 
707  virtual void setSize( double size ) { mSize = size; }
708 
715  double size() const { return mSize; }
716 
724  void setSizeUnit( QgsUnitTypes::RenderUnit unit ) { mSizeUnit = unit; }
725 
732  QgsUnitTypes::RenderUnit sizeUnit() const { return mSizeUnit; }
733 
741  void setSizeMapUnitScale( const QgsMapUnitScale &scale ) { mSizeMapUnitScale = scale; }
742 
749  const QgsMapUnitScale &sizeMapUnitScale() const { return mSizeMapUnitScale; }
750 
756  void setScaleMethod( Qgis::ScaleMethod scaleMethod ) { mScaleMethod = scaleMethod; }
757 
762  Qgis::ScaleMethod scaleMethod() const { return mScaleMethod; }
763 
772  void setOffset( QPointF offset ) { mOffset = offset; }
773 
781  QPointF offset() const { return mOffset; }
782 
790  void setOffsetUnit( QgsUnitTypes::RenderUnit unit ) { mOffsetUnit = unit; }
791 
798  QgsUnitTypes::RenderUnit offsetUnit() const { return mOffsetUnit; }
799 
807  void setOffsetMapUnitScale( const QgsMapUnitScale &scale ) { mOffsetMapUnitScale = scale; }
808 
815  const QgsMapUnitScale &offsetMapUnitScale() const { return mOffsetMapUnitScale; }
816 
824  void setHorizontalAnchorPoint( HorizontalAnchorPoint h ) { mHorizontalAnchorPoint = h; }
825 
832  HorizontalAnchorPoint horizontalAnchorPoint() const { return mHorizontalAnchorPoint; }
833 
841  void setVerticalAnchorPoint( VerticalAnchorPoint v ) { mVerticalAnchorPoint = v; }
842 
849  VerticalAnchorPoint verticalAnchorPoint() const { return mVerticalAnchorPoint; }
850 
851  void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
852 
859  virtual void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const
860  { Q_UNUSED( props ) element.appendChild( doc.createComment( QStringLiteral( "QgsMarkerSymbolLayer %1 not implemented yet" ).arg( layerType() ) ) ); }
861 
862  void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
863  QgsUnitTypes::RenderUnit outputUnit() const override;
864  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
865  QgsMapUnitScale mapUnitScale() const override;
866 
873  virtual QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) = 0;
874 
875  protected:
876 
881  QgsMarkerSymbolLayer( bool locked = false );
882 
890  void markerOffset( QgsSymbolRenderContext &context, double &offsetX, double &offsetY ) const;
891 
902  void markerOffset( QgsSymbolRenderContext &context, double width, double height, double &offsetX, double &offsetY ) const SIP_PYNAME( markerOffsetWithWidthAndHeight );
903 
905  void markerOffset( QgsSymbolRenderContext &context, double width, double height,
907  double &offsetX, double &offsetY,
908  const QgsMapUnitScale &widthMapUnitScale, const QgsMapUnitScale &heightMapUnitScale ) const SIP_PYNAME( markerOffset2 );
909 
916  static QPointF _rotatedOffset( QPointF offset, double angle );
917 
919  double mAngle = 0;
921  double mLineAngle = 0;
923  double mSize = 2.0;
929  QPointF mOffset;
937  HorizontalAnchorPoint mHorizontalAnchorPoint = HCenter;
939  VerticalAnchorPoint mVerticalAnchorPoint = VCenter;
940 
941  private:
942  static QgsMarkerSymbolLayer::HorizontalAnchorPoint decodeHorizontalAnchorPoint( const QString &str );
943  static QgsMarkerSymbolLayer::VerticalAnchorPoint decodeVerticalAnchorPoint( const QString &str );
944 
945 #ifdef SIP_RUN
947 #endif
948 };
949 
954 class CORE_EXPORT QgsLineSymbolLayer : public QgsSymbolLayer
955 {
956  public:
957 
960  {
964  };
965 
967  QgsLineSymbolLayer( const QgsLineSymbolLayer &other ) = delete;
968 
971 
972  void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
973  QgsUnitTypes::RenderUnit outputUnit() const override;
974  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
975  QgsMapUnitScale mapUnitScale() const override;
976  void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
977  double dxfWidth( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const override;
978 
983  virtual void renderPolyline( const QPolygonF &points, QgsSymbolRenderContext &context ) = 0;
984 
993  virtual void renderPolygonStroke( const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context );
994 
1008  virtual void setWidth( double width ) { mWidth = width; }
1009 
1019  virtual double width() const { return mWidth; }
1020 
1031  virtual double width( const QgsRenderContext &context ) const;
1032 
1042  double offset() const { return mOffset; }
1043 
1053  void setOffset( double offset ) { mOffset = offset; }
1054 
1061  void setOffsetUnit( QgsUnitTypes::RenderUnit unit ) { mOffsetUnit = unit; }
1062 
1069  QgsUnitTypes::RenderUnit offsetUnit() const { return mOffsetUnit; }
1070 
1077  void setOffsetMapUnitScale( const QgsMapUnitScale &scale ) { mOffsetMapUnitScale = scale; }
1078 
1085  const QgsMapUnitScale &offsetMapUnitScale() const { return mOffsetMapUnitScale; }
1086 
1087  // TODO QGIS 4.0 - setWidthUnit(), widthUnit(), setWidthUnitScale(), widthUnitScale()
1088  // only apply to simple line symbol layers and do not belong here.
1089 
1095  void setWidthUnit( QgsUnitTypes::RenderUnit unit ) { mWidthUnit = unit; }
1096 
1101  QgsUnitTypes::RenderUnit widthUnit() const { return mWidthUnit; }
1102 
1103  void setWidthMapUnitScale( const QgsMapUnitScale &scale ) { mWidthMapUnitScale = scale; }
1104  const QgsMapUnitScale &widthMapUnitScale() const { return mWidthMapUnitScale; }
1105 
1116  RenderRingFilter ringFilter() const;
1117 
1128  void setRingFilter( QgsLineSymbolLayer::RenderRingFilter filter );
1129 
1130  protected:
1131  QgsLineSymbolLayer( bool locked = false );
1132 
1133  double mWidth = 0;
1136  double mOffset = 0;
1139 
1140  RenderRingFilter mRingFilter = AllRings;
1141 
1142  private:
1143 #ifdef SIP_RUN
1144  QgsLineSymbolLayer( const QgsLineSymbolLayer &other );
1145 #endif
1146 };
1147 
1152 class CORE_EXPORT QgsFillSymbolLayer : public QgsSymbolLayer
1153 {
1154  public:
1155 
1157  QgsFillSymbolLayer( const QgsFillSymbolLayer &other ) = delete;
1158 
1161 
1167  virtual void renderPolygon( const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context ) = 0;
1168 
1169  void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
1170 
1171  void setAngle( double angle ) { mAngle = angle; }
1172  double angle() const { return mAngle; }
1173 
1174  protected:
1175  QgsFillSymbolLayer( bool locked = false );
1177  void _renderPolygon( QPainter *p, const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context );
1178 
1179  double mAngle = 0.0;
1180 
1181  private:
1182 #ifdef SIP_RUN
1183  QgsFillSymbolLayer( const QgsFillSymbolLayer &other );
1184 #endif
1185 };
1186 
1187 class QgsSymbolLayerWidget; // why does SIP fail, when this isn't here
1188 
1189 #endif
1190 
1191 
ScaleMethod
Scale methods.
Definition: qgis.h:183
@ ScaleDiameter
Calculate scale by the diameter.
SymbolType
Symbol types.
Definition: qgis.h:169
@ Marker
Marker symbol.
@ Line
Line symbol.
@ Fill
Fill symbol.
@ Hybrid
Hybrid symbol.
Exports QGIS layers to the DXF format.
Definition: qgsdxfexport.h:65
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.
@ PropertyLineEndWidthValue
End line width for interpolated line renderer (since QGIS 3.22)
@ PropertyLineEndColorValue
End line color for interpolated line renderer (since QGIS 3.22)
@ 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.
@ PropertyLineStartColorValue
Start line color for interpolated line renderer (since QGIS 3.22)
@ 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.
@ PropertyLineStartWidthValue
Start line width for interpolated line renderer (since QGIS 3.22)
@ 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