QGIS API Documentation  3.25.0-Master (dec16ba68b)
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 #include <QImage>
35 
36 class QPainter;
37 class QSize;
38 class QPolygonF;
39 
40 class QgsDxfExport;
41 class QgsExpression;
42 class QgsRenderContext;
43 class QgsPaintEffect;
45 
46 #ifndef SIP_RUN
47 typedef QMap<QString, QString> QgsStringMap;
48 #endif
49 
54 class CORE_EXPORT QgsSymbolLayer
55 {
56 #ifdef SIP_RUN
57 #include <qgslinesymbollayer.h>
58 #endif
59 
60 
61 #ifdef SIP_RUN
63  switch ( sipCpp->type() )
64  {
66  if ( sipCpp->layerType() == "EllipseMarker" )
67  sipType = sipType_QgsEllipseSymbolLayer;
68  else if ( sipCpp->layerType() == "FontMarker" )
69  sipType = sipType_QgsFontMarkerSymbolLayer;
70  else if ( sipCpp->layerType() == "SimpleMarker" )
71  sipType = sipType_QgsSimpleMarkerSymbolLayer;
72  else if ( sipCpp->layerType() == "FilledMarker" )
73  sipType = sipType_QgsFilledMarkerSymbolLayer;
74  else if ( sipCpp->layerType() == "SvgMarker" )
75  sipType = sipType_QgsSvgMarkerSymbolLayer;
76  else if ( sipCpp->layerType() == "RasterMarker" )
77  sipType = sipType_QgsRasterMarkerSymbolLayer;
78  else if ( sipCpp->layerType() == "AnimatedMarker" )
79  sipType = sipType_QgsAnimatedMarkerSymbolLayer;
80  else if ( sipCpp->layerType() == "VectorField" )
81  sipType = sipType_QgsVectorFieldSymbolLayer;
82  else if ( sipCpp->layerType() == "MaskMarker" )
83  sipType = sipType_QgsMaskMarkerSymbolLayer;
84  else
85  sipType = sipType_QgsMarkerSymbolLayer;
86  break;
87 
89  if ( sipCpp->layerType() == "MarkerLine" )
90  sipType = sipType_QgsMarkerLineSymbolLayer;
91  else if ( sipCpp->layerType() == "SimpleLine" )
92  sipType = sipType_QgsSimpleLineSymbolLayer;
93  else if ( sipCpp->layerType() == "HashLine" )
94  sipType = sipType_QgsHashedLineSymbolLayer;
95  else if ( sipCpp->layerType() == "ArrowLine" )
96  sipType = sipType_QgsArrowSymbolLayer;
97  else if ( sipCpp->layerType() == "InterpolatedLine" )
98  sipType = sipType_QgsInterpolatedLineSymbolLayer;
99  else if ( sipCpp->layerType() == "RasterLine" )
100  sipType = sipType_QgsRasterLineSymbolLayer;
101  else if ( sipCpp->layerType() == "Lineburst" )
102  sipType = sipType_QgsLineburstSymbolLayer;
103  else
104  sipType = sipType_QgsLineSymbolLayer;
105  break;
106 
108  if ( sipCpp->layerType() == "SimpleFill" )
109  sipType = sipType_QgsSimpleFillSymbolLayer;
110  else if ( sipCpp->layerType() == "LinePatternFill" )
111  sipType = sipType_QgsLinePatternFillSymbolLayer;
112  else if ( sipCpp->layerType() == "PointPatternFill" )
113  sipType = sipType_QgsPointPatternFillSymbolLayer;
114  else if ( sipCpp->layerType() == "SVGFill" )
115  sipType = sipType_QgsSVGFillSymbolLayer;
116  else if ( sipCpp->layerType() == "RasterFill" )
117  sipType = sipType_QgsRasterFillSymbolLayer;
118  else if ( sipCpp->layerType() == "CentroidFill" )
119  sipType = sipType_QgsCentroidFillSymbolLayer;
120  else if ( sipCpp->layerType() == "GradientFill" )
121  sipType = sipType_QgsGradientFillSymbolLayer;
122  else if ( sipCpp->layerType() == "ShapeburstFill" )
123  sipType = sipType_QgsShapeburstFillSymbolLayer;
124  else if ( sipCpp->layerType() == "RandomMarkerFill" )
125  sipType = sipType_QgsRandomMarkerFillSymbolLayer;
126  else
127  sipType = sipType_QgsFillSymbolLayer;
128  break;
129 
131  sipType = sipType_QgsGeometryGeneratorSymbolLayer;
132  break;
133  }
134  SIP_END
135 #endif
136  public:
137 
142  enum Property
143  {
144  PropertySize = 0,
214  };
215 
220  static const QgsPropertiesDefinition &propertyDefinitions();
221 
222  virtual ~QgsSymbolLayer();
223 
225  QgsSymbolLayer( const QgsSymbolLayer &other ) = delete;
226 
228  QgsSymbolLayer &operator=( const QgsSymbolLayer &other ) = delete;
229 
235  virtual Qgis::SymbolLayerFlags flags() const;
236 
242  bool enabled() const { return mEnabled; }
243 
251  void setEnabled( bool enabled ) { mEnabled = enabled; }
252 
267  virtual QColor color() const;
268 
280  virtual void setColor( const QColor &color );
281 
293  virtual void setStrokeColor( const QColor &color );
294 
307  virtual QColor strokeColor() const;
308 
320  virtual void setFillColor( const QColor &color );
321 
334  virtual QColor fillColor() const;
335 
340  virtual QString layerType() const = 0;
341 
354  virtual void startRender( QgsSymbolRenderContext &context ) = 0;
355 
367  virtual void stopRender( QgsSymbolRenderContext &context ) = 0;
368 
387  virtual void startFeatureRender( const QgsFeature &feature, QgsRenderContext &context );
388 
407  virtual void stopFeatureRender( const QgsFeature &feature, QgsRenderContext &context );
408 
412  virtual QgsSymbolLayer *clone() const = 0 SIP_FACTORY;
413 
415  virtual void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const
416  { Q_UNUSED( props ) element.appendChild( doc.createComment( QStringLiteral( "SymbolLayerV2 %1 not implemented yet" ).arg( layerType() ) ) ); }
417 
418  virtual QString ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const { Q_UNUSED( mmScaleFactor ) Q_UNUSED( mapUnitScaleFactor ); return QString(); }
419 
425  virtual QVariantMap properties() const = 0;
426 
427  virtual void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) = 0;
428 
432  virtual QgsSymbol *subSymbol();
433 
435  virtual bool setSubSymbol( QgsSymbol *symbol SIP_TRANSFER );
436 
437  Qgis::SymbolType type() const { return mType; }
438 
440  virtual bool isCompatibleWithSymbol( QgsSymbol *symbol ) const;
441 
450  virtual bool canCauseArtifactsBetweenAdjacentTiles() const;
451 
459  void setLocked( bool locked ) { mLocked = locked; }
460 
466  bool isLocked() const { return mLocked; }
467 
475  virtual double estimateMaxBleed( const QgsRenderContext &context ) const { Q_UNUSED( context ) return 0; }
476 
485  virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit ) { Q_UNUSED( unit ) }
486 
496 
502  virtual bool usesMapUnits() const;
503 
504  virtual void setMapUnitScale( const QgsMapUnitScale &scale ) { Q_UNUSED( scale ) }
505  virtual QgsMapUnitScale mapUnitScale() const { return QgsMapUnitScale(); }
506 
513  void setRenderingPass( int renderingPass );
514 
521  int renderingPass() const;
522 
527  virtual QSet<QString> usedAttributes( const QgsRenderContext &context ) const;
528 
536  virtual void setDataDefinedProperty( Property key, const QgsProperty &property );
537 
539  virtual bool writeDxf( QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, QgsSymbolRenderContext &context, QPointF shift = QPointF( 0.0, 0.0 ) ) const;
540 
542  virtual double dxfWidth( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const;
543 
545  virtual double dxfOffset( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const;
546 
548  virtual QColor dxfColor( QgsSymbolRenderContext &context ) const;
549 
551  virtual double dxfAngle( QgsSymbolRenderContext &context ) const;
552 
554  virtual QVector<qreal> dxfCustomDashPattern( QgsUnitTypes::RenderUnit &unit ) const;
555 
557  virtual Qt::PenStyle dxfPenStyle() const;
558 
560  virtual QColor dxfBrushColor( QgsSymbolRenderContext &context ) const;
561 
563  virtual Qt::BrushStyle dxfBrushStyle() const;
564 
571  QgsPaintEffect *paintEffect() const;
572 
579  void setPaintEffect( QgsPaintEffect *effect SIP_TRANSFER );
580 
587  virtual void prepareExpressions( const QgsSymbolRenderContext &context );
588 
595  QgsPropertyCollection &dataDefinedProperties() { return mDataDefinedProperties; }
596 
602  const QgsPropertyCollection &dataDefinedProperties() const { return mDataDefinedProperties; } SIP_SKIP
603 
610  void setDataDefinedProperties( const QgsPropertyCollection &collection ) { mDataDefinedProperties = collection; }
611 
617  virtual bool hasDataDefinedProperties() const;
618 
624  virtual QList<QgsSymbolLayerReference> masks() const;
625 
631  virtual void prepareMasks( const QgsSymbolRenderContext &context );
632 
633  protected:
634 
640  QgsSymbolLayer( Qgis::SymbolType type, bool locked = false );
641 
643 
645  bool mEnabled = true;
646 
647  bool mLocked = false;
648  QColor mColor;
649  int mRenderingPass = 0;
650 
652 
653  std::unique_ptr< QgsPaintEffect > mPaintEffect;
655 
656  // clip path to be used during rendering
657  QPainterPath mClipPath;
658 
659  // Configuration of selected symbology implementation
661  static const bool SELECTION_IS_OPAQUE = true;
663  static const bool SELECT_FILL_BORDER = false;
665  static const bool SELECT_FILL_STYLE = false;
666 
671  void restoreOldDataDefinedProperties( const QVariantMap &stringMap );
672 
677  void copyDataDefinedProperties( QgsSymbolLayer *destLayer ) const;
678 
684  void copyPaintEffect( QgsSymbolLayer *destLayer ) const;
685 
686  private:
687  static void initPropertyDefinitions();
688 
690  static QgsPropertiesDefinition sPropertyDefinitions;
691 
692 #ifdef SIP_RUN
693  QgsSymbolLayer( const QgsSymbolLayer &other );
694 #endif
695 
696 };
697 
699 
705 class CORE_EXPORT QgsMarkerSymbolLayer : public QgsSymbolLayer
706 {
707  public:
708 
711  {
715  };
716 
719  {
720  Top,
723  };
724 
726  QgsMarkerSymbolLayer( const QgsMarkerSymbolLayer &other ) = delete;
727 
730 
731  void startRender( QgsSymbolRenderContext &context ) override;
732 
733  void stopRender( QgsSymbolRenderContext &context ) override;
734 
741  virtual void renderPoint( QPointF point, QgsSymbolRenderContext &context ) = 0;
742 
743  void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
744 
751  void setAngle( double angle ) { mAngle = angle; }
752 
757  double angle() const { return mAngle; }
758 
768  void setLineAngle( double lineAngle ) { mLineAngle = lineAngle; }
769 
777  virtual void setSize( double size ) { mSize = size; }
778 
785  double size() const { return mSize; }
786 
794  void setSizeUnit( QgsUnitTypes::RenderUnit unit ) { mSizeUnit = unit; }
795 
802  QgsUnitTypes::RenderUnit sizeUnit() const { return mSizeUnit; }
803 
811  void setSizeMapUnitScale( const QgsMapUnitScale &scale ) { mSizeMapUnitScale = scale; }
812 
819  const QgsMapUnitScale &sizeMapUnitScale() const { return mSizeMapUnitScale; }
820 
826  void setScaleMethod( Qgis::ScaleMethod scaleMethod ) { mScaleMethod = scaleMethod; }
827 
832  Qgis::ScaleMethod scaleMethod() const { return mScaleMethod; }
833 
842  void setOffset( QPointF offset ) { mOffset = offset; }
843 
851  QPointF offset() const { return mOffset; }
852 
860  void setOffsetUnit( QgsUnitTypes::RenderUnit unit ) { mOffsetUnit = unit; }
861 
868  QgsUnitTypes::RenderUnit offsetUnit() const { return mOffsetUnit; }
869 
877  void setOffsetMapUnitScale( const QgsMapUnitScale &scale ) { mOffsetMapUnitScale = scale; }
878 
885  const QgsMapUnitScale &offsetMapUnitScale() const { return mOffsetMapUnitScale; }
886 
894  void setHorizontalAnchorPoint( HorizontalAnchorPoint h ) { mHorizontalAnchorPoint = h; }
895 
902  HorizontalAnchorPoint horizontalAnchorPoint() const { return mHorizontalAnchorPoint; }
903 
911  void setVerticalAnchorPoint( VerticalAnchorPoint v ) { mVerticalAnchorPoint = v; }
912 
919  VerticalAnchorPoint verticalAnchorPoint() const { return mVerticalAnchorPoint; }
920 
921  void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
922 
929  virtual void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const
930  { Q_UNUSED( props ) element.appendChild( doc.createComment( QStringLiteral( "QgsMarkerSymbolLayer %1 not implemented yet" ).arg( layerType() ) ) ); }
931 
932  void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
933  QgsUnitTypes::RenderUnit outputUnit() const override;
934  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
935  QgsMapUnitScale mapUnitScale() const override;
936 
943  virtual QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) = 0;
944 
945  protected:
946 
951  QgsMarkerSymbolLayer( bool locked = false );
952 
960  void markerOffset( QgsSymbolRenderContext &context, double &offsetX, double &offsetY ) const;
961 
972  void markerOffset( QgsSymbolRenderContext &context, double width, double height, double &offsetX, double &offsetY ) const SIP_PYNAME( markerOffsetWithWidthAndHeight );
973 
975  void markerOffset( QgsSymbolRenderContext &context, double width, double height,
977  double &offsetX, double &offsetY,
978  const QgsMapUnitScale &widthMapUnitScale, const QgsMapUnitScale &heightMapUnitScale ) const SIP_PYNAME( markerOffset2 );
979 
986  static QPointF _rotatedOffset( QPointF offset, double angle );
987 
989  double mAngle = 0;
991  double mLineAngle = 0;
993  double mSize = 2.0;
999  QPointF mOffset;
1007  HorizontalAnchorPoint mHorizontalAnchorPoint = HCenter;
1009  VerticalAnchorPoint mVerticalAnchorPoint = VCenter;
1010 
1011  private:
1012  static QgsMarkerSymbolLayer::HorizontalAnchorPoint decodeHorizontalAnchorPoint( const QString &str );
1013  static QgsMarkerSymbolLayer::VerticalAnchorPoint decodeVerticalAnchorPoint( const QString &str );
1014 
1015 #ifdef SIP_RUN
1017 #endif
1018 };
1019 
1024 class CORE_EXPORT QgsLineSymbolLayer : public QgsSymbolLayer
1025 {
1026  public:
1027 
1030  {
1034  };
1035 
1037  QgsLineSymbolLayer( const QgsLineSymbolLayer &other ) = delete;
1038 
1041 
1042  void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
1043  QgsUnitTypes::RenderUnit outputUnit() const override;
1044  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
1045  QgsMapUnitScale mapUnitScale() const override;
1046  void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
1047  double dxfWidth( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const override;
1048 
1053  virtual void renderPolyline( const QPolygonF &points, QgsSymbolRenderContext &context ) = 0;
1054 
1063  virtual void renderPolygonStroke( const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context );
1064 
1078  virtual void setWidth( double width ) { mWidth = width; }
1079 
1089  virtual double width() const { return mWidth; }
1090 
1101  virtual double width( const QgsRenderContext &context ) const;
1102 
1112  double offset() const { return mOffset; }
1113 
1123  void setOffset( double offset ) { mOffset = offset; }
1124 
1131  void setOffsetUnit( QgsUnitTypes::RenderUnit unit ) { mOffsetUnit = unit; }
1132 
1139  QgsUnitTypes::RenderUnit offsetUnit() const { return mOffsetUnit; }
1140 
1147  void setOffsetMapUnitScale( const QgsMapUnitScale &scale ) { mOffsetMapUnitScale = scale; }
1148 
1155  const QgsMapUnitScale &offsetMapUnitScale() const { return mOffsetMapUnitScale; }
1156 
1157  // TODO QGIS 4.0 - setWidthUnit(), widthUnit(), setWidthUnitScale(), widthUnitScale()
1158  // only apply to simple line symbol layers and do not belong here.
1159 
1165  void setWidthUnit( QgsUnitTypes::RenderUnit unit ) { mWidthUnit = unit; }
1166 
1171  QgsUnitTypes::RenderUnit widthUnit() const { return mWidthUnit; }
1172 
1173  void setWidthMapUnitScale( const QgsMapUnitScale &scale ) { mWidthMapUnitScale = scale; }
1174  const QgsMapUnitScale &widthMapUnitScale() const { return mWidthMapUnitScale; }
1175 
1186  RenderRingFilter ringFilter() const;
1187 
1198  void setRingFilter( QgsLineSymbolLayer::RenderRingFilter filter );
1199 
1200  protected:
1201  QgsLineSymbolLayer( bool locked = false );
1202 
1203  double mWidth = 0;
1206  double mOffset = 0;
1209 
1210  RenderRingFilter mRingFilter = AllRings;
1211 
1212  private:
1213 #ifdef SIP_RUN
1214  QgsLineSymbolLayer( const QgsLineSymbolLayer &other );
1215 #endif
1216 };
1217 
1222 class CORE_EXPORT QgsFillSymbolLayer : public QgsSymbolLayer
1223 {
1224  public:
1225 
1227  QgsFillSymbolLayer( const QgsFillSymbolLayer &other ) = delete;
1228 
1231 
1237  virtual void renderPolygon( const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context ) = 0;
1238 
1239  void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
1240 
1241  void setAngle( double angle ) { mAngle = angle; }
1242  double angle() const { return mAngle; }
1243 
1244  protected:
1245  QgsFillSymbolLayer( bool locked = false );
1247  void _renderPolygon( QPainter *p, const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context );
1248 
1249  double mAngle = 0.0;
1250 
1251  private:
1252 #ifdef SIP_RUN
1253  QgsFillSymbolLayer( const QgsFillSymbolLayer &other );
1254 #endif
1255 };
1256 
1257 class QgsSymbolLayerWidget; // why does SIP fail, when this isn't here
1258 
1259 #endif
ScaleMethod
Scale methods.
Definition: qgis.h:219
@ ScaleDiameter
Calculate scale by the diameter.
SymbolType
Symbol types.
Definition: qgis.h:205
@ 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:231
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.
@ PropertyLineClipping
Line clipping mode (since QGIS 3.24)
@ 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.
@ PropertyMarkerClipping
Marker clipping mode (since QGIS 3.24)
@ 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.
@ PropertyRandomOffsetY
Random offset Y (since QGIS 3.24)
@ 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.
@ PropertyRandomOffsetX
Random offset X (since QGIS 3.24)
@ 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
Qgis::SymbolType type() const
QgsSymbolLayer & operator=(const QgsSymbolLayer &other)=delete
QgsSymbolLayer cannot be copied.
QPainterPath mClipPath
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
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...
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 QString ogrFeatureStyle(double mmScaleFactor, double mapUnitScaleFactor) const
void setLocked(bool locked)
Sets whether the layer's colors are locked.
virtual void setMapUnitScale(const QgsMapUnitScale &scale)
virtual ~QgsSymbolLayer()
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:93
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:186
#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:203
QMap< int, QgsPropertyDefinition > QgsPropertiesDefinition
Definition of available properties.
QMap< QString, QString > QgsStringMap