QGIS API Documentation  3.27.0-Master (0e23467727)
qgsmarkersymbollayer.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmarkersymbollayer.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 
16 #ifndef QGSMARKERSYMBOLLAYER_H
17 #define QGSMARKERSYMBOLLAYER_H
18 
19 #include "qgis_core.h"
20 #include "qgis_sip.h"
21 #include "qgssymbollayer.h"
22 
23 #define DEFAULT_SIMPLEMARKER_NAME "circle"
24 #define DEFAULT_SIMPLEMARKER_COLOR QColor(255,0,0)
25 #define DEFAULT_SIMPLEMARKER_BORDERCOLOR QColor( 35, 35, 35 )
26 #define DEFAULT_SIMPLEMARKER_JOINSTYLE Qt::BevelJoin
27 #define DEFAULT_SIMPLEMARKER_SIZE DEFAULT_POINT_SIZE
28 #define DEFAULT_SIMPLEMARKER_ANGLE 0
29 
30 #include <QPen>
31 #include <QBrush>
32 #include <QPicture>
33 #include <QPolygonF>
34 #include <QFont>
35 
36 class QgsFillSymbol;
37 class QgsPathResolver;
38 
47 {
48 
49  public:
50 
52  static QList< Qgis::MarkerShape > availableShapes();
53 
59  static bool shapeIsFilled( Qgis::MarkerShape shape );
60 
69  double size = DEFAULT_SIMPLEMARKER_SIZE,
72 
74 
79  Qgis::MarkerShape shape() const { return mShape; }
80 
86  void setShape( Qgis::MarkerShape shape ) { mShape = shape; }
87 
96  static Qgis::MarkerShape decodeShape( const QString &name, bool *ok = nullptr );
97 
104  static QString encodeShape( Qgis::MarkerShape shape );
105 
106  void startRender( QgsSymbolRenderContext &context ) override;
107  void stopRender( QgsSymbolRenderContext &context ) override;
108  void renderPoint( QPointF point, QgsSymbolRenderContext &context ) override;
109  QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) override;
110 
111  protected:
112 
116  bool prepareMarkerShape( Qgis::MarkerShape shape );
117 
121  bool prepareMarkerPath( Qgis::MarkerShape symbol );
122 
129  bool shapeToPolygon( Qgis::MarkerShape shape, QPolygonF &polygon ) const;
130 
137  double calculateSize( QgsSymbolRenderContext &context, bool &hasDataDefinedSize ) const;
138 
147  void calculateOffsetAndRotation( QgsSymbolRenderContext &context, double scaledSize, bool &hasDataDefinedRotation, QPointF &offset, double &angle ) const;
148 
150  QPolygonF mPolygon;
151 
153  QPainterPath mPath;
154 
157 
158  private:
159 
168  virtual void draw( QgsSymbolRenderContext &context, Qgis::MarkerShape shape, const QPolygonF &polygon, const QPainterPath &path ) = 0 SIP_FORCE;
169 };
170 
177 {
178  public:
179 
191  double size = DEFAULT_SIMPLEMARKER_SIZE,
194  const QColor &color = DEFAULT_SIMPLEMARKER_COLOR,
195  const QColor &strokeColor = DEFAULT_SIMPLEMARKER_BORDERCOLOR,
196  Qt::PenJoinStyle penJoinStyle = DEFAULT_SIMPLEMARKER_JOINSTYLE );
197 
199 
200  // static methods
201 
207  static QgsSymbolLayer *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
208 
214  static QgsSymbolLayer *createFromSld( QDomElement &element ) SIP_FACTORY;
215 
216  // reimplemented from base classes
217 
218  QString layerType() const override;
219  void startRender( QgsSymbolRenderContext &context ) override;
220  void renderPoint( QPointF point, QgsSymbolRenderContext &context ) override;
221  QVariantMap properties() const override;
222  QgsSimpleMarkerSymbolLayer *clone() const override SIP_FACTORY;
223  void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
224  QString ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const override;
225  bool writeDxf( QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, QgsSymbolRenderContext &context, QPointF shift = QPointF( 0.0, 0.0 ) ) const override;
226  void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
227  QgsUnitTypes::RenderUnit outputUnit() const override;
228  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
229  QgsMapUnitScale mapUnitScale() const override;
230  bool usesMapUnits() const override;
231  QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) override;
232  QColor fillColor() const override { return mColor; }
233  void setFillColor( const QColor &color ) override { mColor = color; }
234  void setColor( const QColor &color ) override;
235  QColor color() const override;
236 
237  // new methods
238 
245  QColor strokeColor() const override { return mStrokeColor; }
246 
254  void setStrokeColor( const QColor &color ) override { mStrokeColor = color; }
255 
263  Qt::PenStyle strokeStyle() const { return mStrokeStyle; }
264 
273  void setStrokeStyle( Qt::PenStyle strokeStyle ) { mStrokeStyle = strokeStyle; }
274 
283  Qt::PenJoinStyle penJoinStyle() const { return mPenJoinStyle; }
284 
294  void setPenJoinStyle( Qt::PenJoinStyle style ) { mPenJoinStyle = style; }
295 
304  Qt::PenCapStyle penCapStyle() const { return mPenCapStyle; }
305 
314  void setPenCapStyle( Qt::PenCapStyle style ) { mPenCapStyle = style; }
315 
322  double strokeWidth() const { return mStrokeWidth; }
323 
331  void setStrokeWidth( double w ) { mStrokeWidth = w; }
332 
340  void setStrokeWidthUnit( QgsUnitTypes::RenderUnit u ) { mStrokeWidthUnit = u; }
341 
348  QgsUnitTypes::RenderUnit strokeWidthUnit() const { return mStrokeWidthUnit; }
349 
357  void setStrokeWidthMapUnitScale( const QgsMapUnitScale &scale ) { mStrokeWidthMapUnitScale = scale; }
358 
365  const QgsMapUnitScale &strokeWidthMapUnitScale() const { return mStrokeWidthMapUnitScale; }
366 
367  protected:
368 
375  void drawMarker( QPainter *p, QgsSymbolRenderContext &context );
376 
381  bool prepareCache( QgsSymbolRenderContext &context );
382 
384  QColor mStrokeColor;
386  Qt::PenStyle mStrokeStyle = Qt::SolidLine;
388  double mStrokeWidth = 0;
394  Qt::PenJoinStyle mPenJoinStyle;
396  Qt::PenCapStyle mPenCapStyle = Qt::SquareCap;
398  QPen mPen;
400  QBrush mBrush;
401 
403  QImage mCache;
405  QPen mSelPen;
407  QBrush mSelBrush;
409  QImage mSelCache;
410 
415  bool mUsingCache = false;
416 
418  static const int MAXIMUM_CACHE_WIDTH = 3000;
419 
420  private:
421  // cppcheck-suppress unusedPrivateFunction
422  void draw( QgsSymbolRenderContext &context, Qgis::MarkerShape shape, const QPolygonF &polygon, const QPainterPath &path ) override SIP_FORCE;
423 
424  double mCachedOpacity = 1.0;
425 
426 };
427 
436 {
437  public:
438 
447  double size = DEFAULT_SIMPLEMARKER_SIZE,
449  Qgis::ScaleMethod scaleMethod = DEFAULT_SCALE_METHOD );
450 
452 
458  static QgsSymbolLayer *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
459 
460  QString layerType() const override;
461  void startRender( QgsSymbolRenderContext &context ) override;
462  void stopRender( QgsSymbolRenderContext &context ) override;
463  QVariantMap properties() const override;
464  QgsFilledMarkerSymbolLayer *clone() const override SIP_FACTORY;
465  QgsSymbol *subSymbol() override;
466  bool setSubSymbol( QgsSymbol *symbol SIP_TRANSFER ) override;
467  double estimateMaxBleed( const QgsRenderContext &context ) const override;
468  QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
469  bool hasDataDefinedProperties() const override;
470  void setColor( const QColor &c ) override;
471  QColor color() const override;
472  bool usesMapUnits() const override;
473  void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
474 
475  private:
476 #ifdef SIP_RUN
478 #endif
479 
480  // cppcheck-suppress unusedPrivateFunction
481  void draw( QgsSymbolRenderContext &context, Qgis::MarkerShape shape, const QPolygonF &polygon, const QPainterPath &path ) override SIP_FORCE;
482 
484  std::unique_ptr< QgsFillSymbol > mFill;
485 };
486 
488 
489 #define DEFAULT_SVGMARKER_SIZE 2*DEFAULT_POINT_SIZE
490 #define DEFAULT_SVGMARKER_ANGLE 0
491 
497 {
498  public:
500  QgsSvgMarkerSymbolLayer( const QString &path,
501  double size = DEFAULT_SVGMARKER_SIZE,
503  Qgis::ScaleMethod scaleMethod = DEFAULT_SCALE_METHOD );
504 
506 
507  // static stuff
508 
510  static QgsSymbolLayer *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
511  static QgsSymbolLayer *createFromSld( QDomElement &element ) SIP_FACTORY;
512 
518  static void resolvePaths( QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving );
519 
520  // implemented from base classes
521 
522  QString layerType() const override;
523 
524  void startRender( QgsSymbolRenderContext &context ) override;
525 
526  void stopRender( QgsSymbolRenderContext &context ) override;
527 
528  void renderPoint( QPointF point, QgsSymbolRenderContext &context ) override;
529 
530  QVariantMap properties() const override;
531  bool usesMapUnits() const override;
532 
533  QgsSvgMarkerSymbolLayer *clone() const override SIP_FACTORY;
534 
535  void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
536 
541  QString path() const { return mPath; }
542 
548  void setPath( const QString &path );
549 
554  double defaultAspectRatio() const { return mDefaultAspectRatio; }
555 
561  double updateDefaultAspectRatio();
562 
567  bool preservedAspectRatio() const { return mFixedAspectRatio <= 0.0; }
568 
575  bool setPreservedAspectRatio( bool par );
576 
582  double fixedAspectRatio() const { return mFixedAspectRatio; }
583 
590  void setFixedAspectRatio( double ratio ) { mFixedAspectRatio = ratio; }
591 
592  QColor fillColor() const override { return color(); }
593  void setFillColor( const QColor &color ) override { setColor( color ); }
594 
595  QColor strokeColor() const override { return mStrokeColor; }
596  void setStrokeColor( const QColor &c ) override { mStrokeColor = c; }
597 
598  double strokeWidth() const { return mStrokeWidth; }
599  void setStrokeWidth( double w ) { mStrokeWidth = w; }
600 
605  QMap<QString, QgsProperty> parameters() const { return mParameters; }
606 
611  void setParameters( const QMap<QString, QgsProperty> &parameters );
612 
618  void setStrokeWidthUnit( QgsUnitTypes::RenderUnit unit ) { mStrokeWidthUnit = unit; }
619 
624  QgsUnitTypes::RenderUnit strokeWidthUnit() const { return mStrokeWidthUnit; }
625 
626  void setStrokeWidthMapUnitScale( const QgsMapUnitScale &scale ) { mStrokeWidthMapUnitScale = scale; }
627  const QgsMapUnitScale &strokeWidthMapUnitScale() const { return mStrokeWidthMapUnitScale; }
628 
629  void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
630  QgsUnitTypes::RenderUnit outputUnit() const override;
631 
632  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
633  QgsMapUnitScale mapUnitScale() const override;
634 
635  bool writeDxf( QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, QgsSymbolRenderContext &context, QPointF shift = QPointF( 0.0, 0.0 ) ) const override;
636 
637  QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) override;
638 
639  void prepareExpressions( const QgsSymbolRenderContext &context ) override;
640 
641  QSet<QString> usedAttributes( const QgsRenderContext &context ) const override;
642 
643  protected:
644 
651  double calculateAspectRatio( QgsSymbolRenderContext &context, double scaledSize, bool &hasDataDefinedAspectRatio ) const;
652 
653  QString mPath;
654 
656  double mDefaultAspectRatio = 0.0;
658  double mFixedAspectRatio = 0.0;
659  //param(fill), param(stroke), param(stroke-width) are going
660  //to be replaced in memory
661  bool mHasFillParam = false;
662  QColor mStrokeColor;
663  double mStrokeWidth;
664  QMap<QString, QgsProperty> mParameters;
665 
668 
669  private:
670  double calculateSize( QgsSymbolRenderContext &context, bool &hasDataDefinedSize ) const;
671  void calculateOffsetAndRotation( QgsSymbolRenderContext &context, double scaledWidth, double scaledHeight, QPointF &offset, double &angle ) const;
672 
673 };
674 
675 
677 
678 #define DEFAULT_RASTERMARKER_SIZE 2*DEFAULT_POINT_SIZE
679 #define DEFAULT_RASTERMARKER_ANGLE 0
680 
688 {
689  public:
691  QgsRasterMarkerSymbolLayer( const QString &path = QString(),
692  double size = DEFAULT_SVGMARKER_SIZE,
694  Qgis::ScaleMethod scaleMethod = DEFAULT_SCALE_METHOD );
695 
697 
698  // static stuff
699 
704  static QgsSymbolLayer *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
705 
711  static void resolvePaths( QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving );
712 
713  // implemented from base classes
714 
715  QString layerType() const override;
716 
717  void renderPoint( QPointF point, QgsSymbolRenderContext &context ) override;
718  QVariantMap properties() const override;
719  QgsRasterMarkerSymbolLayer *clone() const override SIP_FACTORY;
720  bool usesMapUnits() const override;
721  QColor color() const override;
722 
729  double calculateAspectRatio( QgsSymbolRenderContext &context, double scaledSize, bool &hasDataDefinedAspectRatio ) const;
730 
735  QString path() const { return mPath; }
736 
742  void setPath( const QString &path );
743 
749  double opacity() const { return mOpacity; }
750 
756  void setOpacity( double opacity ) { mOpacity = opacity; }
757 
762  double defaultAspectRatio() const { return mDefaultAspectRatio; }
763 
769  double updateDefaultAspectRatio();
770 
775  bool preservedAspectRatio() const { return mFixedAspectRatio <= 0.0; }
776 
783  bool setPreservedAspectRatio( bool par );
784 
790  double fixedAspectRatio() const { return mFixedAspectRatio; }
791 
798  void setFixedAspectRatio( double ratio ) { mFixedAspectRatio = ratio; }
799 
800  void setMapUnitScale( const QgsMapUnitScale &scale ) override;
801  QgsMapUnitScale mapUnitScale() const override;
802 
803  QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) override;
804 
805  protected:
806 
812  void setCommonProperties( const QVariantMap &properties );
813 
819  void copyCommonProperties( QgsRasterMarkerSymbolLayer *other ) const;
820 
826  virtual QImage fetchImage( QgsRenderContext &context, const QString &path, QSize size, bool preserveAspectRatio, double opacity ) const SIP_SKIP;
827 
828  QString mPath;
830  double mOpacity = 1.0;
832  double mDefaultAspectRatio = 0.0;
834  double mFixedAspectRatio = 0.0;
835 
836  private:
837  double calculateSize( QgsSymbolRenderContext &context, bool &hasDataDefinedSize ) const;
838  void calculateOffsetAndRotation( QgsSymbolRenderContext &context, double scaledWidth, double scaledHeight, QPointF &offset, double &angle ) const;
839 
840 };
841 
842 
844 
845 #define POINT2MM(x) ( (x) * 25.4 / 72 ) // point is 1/72 of inch
846 #define MM2POINT(x) ( (x) * 72 / 25.4 )
847 
848 #define DEFAULT_FONTMARKER_FONT "Dingbats"
849 #define DEFAULT_FONTMARKER_CHR QChar('A')
850 #define DEFAULT_FONTMARKER_SIZE POINT2MM(12)
851 #define DEFAULT_FONTMARKER_COLOR QColor( 35, 35, 35 )
852 #define DEFAULT_FONTMARKER_BORDERCOLOR QColor(Qt::white)
853 #define DEFAULT_FONTMARKER_JOINSTYLE Qt::MiterJoin
854 #define DEFAULT_FONTMARKER_ANGLE 0
855 
861 {
862  public:
863 
865  QgsFontMarkerSymbolLayer( const QString &fontFamily = DEFAULT_FONTMARKER_FONT,
866  QString chr = DEFAULT_FONTMARKER_CHR,
867  double pointSize = DEFAULT_FONTMARKER_SIZE,
868  const QColor &color = DEFAULT_FONTMARKER_COLOR,
869  double angle = DEFAULT_FONTMARKER_ANGLE );
870 
872 
873  // static stuff
874 
878  static QgsSymbolLayer *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
879 
883  static QgsSymbolLayer *createFromSld( QDomElement &element ) SIP_FACTORY;
884 
891  static void resolveFonts( const QVariantMap &properties, const QgsReadWriteContext &context );
892 
893  // implemented from base classes
894 
895  QString layerType() const override;
896 
897  void startRender( QgsSymbolRenderContext &context ) override;
898 
899  void stopRender( QgsSymbolRenderContext &context ) override;
900 
901  void renderPoint( QPointF point, QgsSymbolRenderContext &context ) override;
902 
903  QVariantMap properties() const override;
904 
905  QgsFontMarkerSymbolLayer *clone() const override SIP_FACTORY;
906 
907  void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
908  bool usesMapUnits() const override;
909  void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override;
910 
911  // new methods
912 
918  QString fontFamily() const { return mFontFamily; }
919 
925  void setFontFamily( const QString &family ) { mFontFamily = family; }
926 
933  QString fontStyle() const { return mFontStyle; }
934 
941  void setFontStyle( const QString &style ) { mFontStyle = style; }
942 
948  QString character() const { return mString; }
949 
955  void setCharacter( QString chr ) { mString = chr; }
956 
957  QColor strokeColor() const override { return mStrokeColor; }
958  void setStrokeColor( const QColor &color ) override { mStrokeColor = color; }
959 
969  double strokeWidth() const { return mStrokeWidth; }
970 
980  void setStrokeWidth( double width ) { mStrokeWidth = width; }
981 
991  QgsUnitTypes::RenderUnit strokeWidthUnit() const { return mStrokeWidthUnit; }
992 
1001  void setStrokeWidthUnit( QgsUnitTypes::RenderUnit unit ) { mStrokeWidthUnit = unit; }
1002 
1012  const QgsMapUnitScale &strokeWidthMapUnitScale() const { return mStrokeWidthMapUnitScale; }
1013 
1023  void setStrokeWidthMapUnitScale( const QgsMapUnitScale &scale ) { mStrokeWidthMapUnitScale = scale; }
1024 
1032  Qt::PenJoinStyle penJoinStyle() const { return mPenJoinStyle; }
1033 
1041  void setPenJoinStyle( Qt::PenJoinStyle style ) { mPenJoinStyle = style; }
1042 
1043  QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) override;
1044 
1045  private:
1046 
1047  QString mFontFamily;
1048  QString mFontStyle;
1049  QFont mFont;
1050  std::unique_ptr< QFontMetrics >mFontMetrics;
1051 
1052  QString mString;
1053 
1054  double mChrWidth = 0;
1055  QPointF mChrOffset;
1057  double mFontSizeScale = 1.0;
1058  double mOrigSize;
1059 
1060  QColor mStrokeColor;
1061  double mStrokeWidth;
1062  QgsUnitTypes::RenderUnit mStrokeWidthUnit;
1063  QgsMapUnitScale mStrokeWidthMapUnitScale;
1064  Qt::PenJoinStyle mPenJoinStyle;
1065 
1066  QPen mPen;
1067  QBrush mBrush;
1068 
1069  bool mUseCachedPath = false;
1070  QPainterPath mCachedPath;
1071 
1072  // If font has a zero (or nearly zero) size, we skip rendering altogether..
1073  bool mNonZeroFontSize = true;
1074 
1075  QString characterToRender( QgsSymbolRenderContext &context, QPointF &charOffset, double &charWidth );
1076  void calculateOffsetAndRotation( QgsSymbolRenderContext &context, double scaledSize, bool &hasDataDefinedRotation, QPointF &offset, double &angle ) const;
1077  double calculateSize( QgsSymbolRenderContext &context );
1078 };
1079 
1080 
1092 {
1093  public:
1094 
1098  QgsAnimatedMarkerSymbolLayer( const QString &path = QString(),
1099  double size = DEFAULT_RASTERMARKER_SIZE,
1100  double angle = DEFAULT_RASTERMARKER_ANGLE );
1101 
1103 
1104  // static stuff
1105 
1109  static QgsSymbolLayer *create( const QVariantMap &properties = QVariantMap() ) SIP_FACTORY;
1110 
1111  // implemented from base classes
1112 
1113  QString layerType() const override;
1114  QVariantMap properties() const override;
1115  QgsAnimatedMarkerSymbolLayer *clone() const override SIP_FACTORY;
1116 
1122  void setFrameRate( double rate ) { mFrameRateFps = rate; }
1123 
1129  double frameRate() const { return mFrameRateFps; }
1130 
1131  void startRender( QgsSymbolRenderContext &context ) override;
1132 
1133  protected:
1134  QImage fetchImage( QgsRenderContext &context, const QString &path, QSize size, bool preserveAspectRatio, double opacity ) const override SIP_SKIP;
1135 
1136  private:
1137  double mFrameRateFps = 10;
1138  bool mStaticPath = false;
1139  mutable QSet< QString > mPreparedPaths;
1140 
1141 };
1142 
1143 // clazy:excludeall=qstring-allocations
1144 
1145 #endif
1146 
1147 
ScaleMethod
Scale methods.
Definition: qgis.h:220
MarkerShape
Marker shapes.
Definition: qgis.h:1389
Animated marker symbol layer class.
~QgsAnimatedMarkerSymbolLayer() override
double frameRate() const
Returns the marker frame rate in frame per second.
Exports QGIS layers to the DXF format.
Definition: qgsdxfexport.h:65
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
Definition: qgsfillsymbol.h:30
Filled marker symbol layer, consisting of a shape which is rendered using a QgsFillSymbol.
~QgsFilledMarkerSymbolLayer() override
~QgsFontMarkerSymbolLayer() override
void setStrokeColor(const QColor &color) override
Sets the stroke color for the symbol layer.
void setStrokeWidthMapUnitScale(const QgsMapUnitScale &scale)
Sets the stroke width map unit scale.
double strokeWidth() const
Returns the marker's stroke width.
void setFontStyle(const QString &style)
Sets the font style for the font which will be used to render the point.
QString fontStyle() const
Returns the font style for the associated font which will be used to render the point.
QColor strokeColor() const override
Returns the stroke color for the symbol layer.
void setCharacter(QString chr)
Sets the character(s) used when rendering points.
QgsUnitTypes::RenderUnit strokeWidthUnit() const
Returns the stroke width unit.
void setStrokeWidthUnit(QgsUnitTypes::RenderUnit unit)
Sets the stroke width unit.
void setFontFamily(const QString &family)
Sets the font family for the font which will be used to render the point.
const QgsMapUnitScale & strokeWidthMapUnitScale() const
Returns the stroke width map unit scale.
void setStrokeWidth(double width)
Set's the marker's stroke width.
void setPenJoinStyle(Qt::PenJoinStyle style)
Sets the stroke join style.
Qt::PenJoinStyle penJoinStyle() const
Returns the stroke join style.
QString character() const
Returns the character(s) used when rendering points.
Struct for storing maximum and minimum scales for measurements in map units.
Abstract base class for marker symbol layers.
virtual QRectF bounds(QPointF point, QgsSymbolRenderContext &context)=0
Returns the approximate bounding box of the marker symbol layer, taking into account any data defined...
void setOutputUnit(QgsUnitTypes::RenderUnit unit) override
Sets the units to use for sizes and widths within the symbol layer.
virtual void renderPoint(QPointF point, QgsSymbolRenderContext &context)=0
Renders a marker at the specified point.
QgsMapUnitScale mapUnitScale() const override
void stopRender(QgsSymbolRenderContext &context) override
Called after a set of rendering operations has finished on the supplied render context.
QgsUnitTypes::RenderUnit outputUnit() const override
Returns the units to use for sizes and widths within the symbol layer.
void startRender(QgsSymbolRenderContext &context) override
Called before a set of rendering operations commences on the supplied render context.
void setMapUnitScale(const QgsMapUnitScale &scale) override
Resolves relative paths into absolute paths and vice versa.
Raster marker symbol layer class.
void setOpacity(double opacity)
Set the marker opacity.
double defaultAspectRatio() const
Returns the default marker aspect ratio between width and height, 0 if not yet calculated.
void setFixedAspectRatio(double ratio)
Set the marker aspect ratio between width and height to be used in rendering, if the value set is low...
bool preservedAspectRatio() const
Returns the preserved aspect ratio value, true if fixed aspect ratio has been lower or equal to 0.
~QgsRasterMarkerSymbolLayer() override
double fixedAspectRatio() const
Returns the marker aspect ratio between width and height to be used in rendering, if the value set is...
double opacity() const
Returns the marker opacity.
The class is used as a container of context for various read/write operations on other objects.
Contains information about the context of a rendering operation.
Abstract base class for simple marker symbol layers.
Qgis::MarkerShape mShape
Symbol shape.
QPainterPath mPath
Painter path representing shape. If mPolygon is empty then the shape is stored in mPath.
~QgsSimpleMarkerSymbolLayerBase() override
QPolygonF mPolygon
Polygon of points in shape. If polygon is empty then shape is using mPath.
Qgis::MarkerShape shape() const
Returns the shape for the rendered marker symbol.
void setShape(Qgis::MarkerShape shape)
Sets the rendered marker shape.
Simple marker symbol layer, consisting of a rendered shape with solid fill color and an stroke.
QPen mSelPen
QPen to use as stroke of selected symbols.
void setStrokeWidthUnit(QgsUnitTypes::RenderUnit u)
Sets the unit for the width of the marker's stroke.
QColor mStrokeColor
Stroke color.
QImage mSelCache
Cached image of selected marker, if using cached version.
QImage mCache
Cached image of marker, if using cached version.
QBrush mSelBrush
QBrush to use as fill of selected symbols.
void setFillColor(const QColor &color) override
Sets the fill color for the symbol layer.
Qt::PenJoinStyle penJoinStyle() const
Returns the marker's stroke join style (e.g., miter, bevel, etc).
QPen mPen
QPen corresponding to marker's stroke style.
~QgsSimpleMarkerSymbolLayer() override
Qt::PenCapStyle penCapStyle() const
Returns the marker's stroke cap style (e.g., flat, round, etc).
void setStrokeWidthMapUnitScale(const QgsMapUnitScale &scale)
Sets the map scale for the width of the marker's stroke.
void setStrokeStyle(Qt::PenStyle strokeStyle)
Sets the marker's stroke style (e.g., solid, dashed, etc)
const QgsMapUnitScale & strokeWidthMapUnitScale() const
Returns the map scale for the width of the marker's stroke.
QgsUnitTypes::RenderUnit strokeWidthUnit() const
Returns the unit for the width of the marker's stroke.
void setPenJoinStyle(Qt::PenJoinStyle style)
Sets the marker's stroke join style (e.g., miter, bevel, etc).
QColor strokeColor() const override
Returns the marker's stroke color.
QBrush mBrush
QBrush corresponding to marker's fill style.
void setStrokeWidth(double w)
Sets the width of the marker's stroke.
void setStrokeColor(const QColor &color) override
Sets the marker's stroke color.
Qt::PenStyle strokeStyle() const
Returns the marker's stroke style (e.g., solid, dashed, etc)
void setPenCapStyle(Qt::PenCapStyle style)
Sets the marker's stroke cap style (e.g., flat, round, etc).
QgsMapUnitScale mStrokeWidthMapUnitScale
Stroke width map unit scale.
double strokeWidth() const
Returns the width of the marker's stroke.
Qt::PenJoinStyle mPenJoinStyle
Stroke pen join style.
QColor fillColor() const override
Returns the fill color for the symbol layer.
QgsUnitTypes::RenderUnit mStrokeWidthUnit
void setStrokeWidthMapUnitScale(const QgsMapUnitScale &scale)
bool preservedAspectRatio() const
Returns the preserved aspect ratio value, true if fixed aspect ratio has been lower or equal to 0.
QMap< QString, QgsProperty > mParameters
QgsUnitTypes::RenderUnit strokeWidthUnit() const
Returns the units for the stroke width.
void setStrokeWidthUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the stroke width.
const QgsMapUnitScale & strokeWidthMapUnitScale() const
double fixedAspectRatio() const
Returns the marker aspect ratio between width and height to be used in rendering, if the value set is...
void setStrokeColor(const QColor &c) override
Sets the stroke color for the symbol layer.
QColor strokeColor() const override
Returns the stroke color for the symbol layer.
void setFillColor(const QColor &color) override
Sets the fill color for the symbol layer.
QMap< QString, QgsProperty > parameters() const
Returns the dynamic SVG parameters.
~QgsSvgMarkerSymbolLayer() override
QgsMapUnitScale mStrokeWidthMapUnitScale
void setFixedAspectRatio(double ratio)
Set the marker aspect ratio between width and height to be used in rendering, if the value set is low...
double defaultAspectRatio() const
Returns the default marker aspect ratio between width and height, 0 if not yet calculated.
virtual QSet< QString > usedAttributes(const QgsRenderContext &context) const
Returns the set of attributes referenced by the layer.
virtual void prepareExpressions(const QgsSymbolRenderContext &context)
Prepares all data defined property expressions for evaluation.
virtual void setColor(const QColor &color)
Sets the "representative" color for the symbol layer.
virtual QColor color() const
Returns the "representative" color of the symbol layer.
virtual bool writeDxf(QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, QgsSymbolRenderContext &context, QPointF shift=QPointF(0.0, 0.0)) const
write as DXF
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:93
Helper functions for various unit types.
Definition: qgsunittypes.h:39
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:168
@ 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
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
#define SIP_FORCE
Definition: qgis_sip.h:131
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define DEFAULT_RASTERMARKER_ANGLE
#define DEFAULT_RASTERMARKER_SIZE
#define DEFAULT_SVGMARKER_ANGLE
#define DEFAULT_SIMPLEMARKER_JOINSTYLE
#define DEFAULT_FONTMARKER_CHR
#define DEFAULT_SIMPLEMARKER_BORDERCOLOR
#define DEFAULT_SIMPLEMARKER_SIZE
#define DEFAULT_SIMPLEMARKER_ANGLE
#define DEFAULT_SVGMARKER_SIZE
#define DEFAULT_FONTMARKER_FONT
#define DEFAULT_FONTMARKER_ANGLE
#define DEFAULT_FONTMARKER_COLOR
#define DEFAULT_FONTMARKER_SIZE
#define DEFAULT_SIMPLEMARKER_COLOR
#define DEFAULT_SCALE_METHOD