QGIS API Documentation 3.43.0-Master (69d1901085b)
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"
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
36class QPainter;
37class QSize;
38class QPolygonF;
39
40class QgsDxfExport;
41class QgsExpression;
43class QgsPaintEffect;
46
47#ifndef SIP_RUN
48typedef QMap<QString, QString> QgsStringMap;
49#endif
50
56class CORE_EXPORT QgsSymbolLayer
57{
58 //SIP_TYPEHEADER_INCLUDE( "qgslinesymbollayer.h" );
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 if ( sipCpp->layerType() == "LinearReferencing" )
104 sipType = sipType_QgsLinearReferencingSymbolLayer;
105 else if ( sipCpp->layerType() == "FilledLine" )
106 sipType = sipType_QgsFilledLineSymbolLayer;
107 else
108 sipType = sipType_QgsLineSymbolLayer;
109 break;
110
112 if ( sipCpp->layerType() == "SimpleFill" )
113 sipType = sipType_QgsSimpleFillSymbolLayer;
114 else if ( sipCpp->layerType() == "LinePatternFill" )
115 sipType = sipType_QgsLinePatternFillSymbolLayer;
116 else if ( sipCpp->layerType() == "PointPatternFill" )
117 sipType = sipType_QgsPointPatternFillSymbolLayer;
118 else if ( sipCpp->layerType() == "SVGFill" )
119 sipType = sipType_QgsSVGFillSymbolLayer;
120 else if ( sipCpp->layerType() == "RasterFill" )
121 sipType = sipType_QgsRasterFillSymbolLayer;
122 else if ( sipCpp->layerType() == "CentroidFill" )
123 sipType = sipType_QgsCentroidFillSymbolLayer;
124 else if ( sipCpp->layerType() == "GradientFill" )
125 sipType = sipType_QgsGradientFillSymbolLayer;
126 else if ( sipCpp->layerType() == "ShapeburstFill" )
127 sipType = sipType_QgsShapeburstFillSymbolLayer;
128 else if ( sipCpp->layerType() == "RandomMarkerFill" )
129 sipType = sipType_QgsRandomMarkerFillSymbolLayer;
130 else
131 sipType = sipType_QgsFillSymbolLayer;
132 break;
133
135 sipType = sipType_QgsGeometryGeneratorSymbolLayer;
136 break;
137 }
138 SIP_END
139#endif
140 public:
141
142 // *INDENT-OFF*
143
148 {
149 Size SIP_MONKEYPATCH_COMPAT_NAME( PropertySize ) = 0,
150 Angle SIP_MONKEYPATCH_COMPAT_NAME( PropertyAngle ),
151 Name SIP_MONKEYPATCH_COMPAT_NAME( PropertyName ),
152 FillColor SIP_MONKEYPATCH_COMPAT_NAME( PropertyFillColor ),
153 StrokeColor SIP_MONKEYPATCH_COMPAT_NAME( PropertyStrokeColor ),
154 StrokeWidth SIP_MONKEYPATCH_COMPAT_NAME( PropertyStrokeWidth ),
155 StrokeStyle SIP_MONKEYPATCH_COMPAT_NAME( PropertyStrokeStyle ),
156 Offset SIP_MONKEYPATCH_COMPAT_NAME( PropertyOffset ),
157 Character SIP_MONKEYPATCH_COMPAT_NAME( PropertyCharacter ),
158 Width SIP_MONKEYPATCH_COMPAT_NAME( PropertyWidth ),
159 Height SIP_MONKEYPATCH_COMPAT_NAME( PropertyHeight ),
160 PreserveAspectRatio SIP_MONKEYPATCH_COMPAT_NAME( PropertyPreserveAspectRatio ),
161 FillStyle SIP_MONKEYPATCH_COMPAT_NAME( PropertyFillStyle ),
162 JoinStyle SIP_MONKEYPATCH_COMPAT_NAME( PropertyJoinStyle ),
163 SecondaryColor SIP_MONKEYPATCH_COMPAT_NAME( PropertySecondaryColor ),
164 LineAngle SIP_MONKEYPATCH_COMPAT_NAME( PropertyLineAngle ),
165 LineDistance SIP_MONKEYPATCH_COMPAT_NAME( PropertyLineDistance ),
166 GradientType SIP_MONKEYPATCH_COMPAT_NAME( PropertyGradientType ),
167 CoordinateMode SIP_MONKEYPATCH_COMPAT_NAME( PropertyCoordinateMode ),
168 GradientSpread SIP_MONKEYPATCH_COMPAT_NAME( PropertyGradientSpread ),
169 GradientReference1X SIP_MONKEYPATCH_COMPAT_NAME( PropertyGradientReference1X ),
170 GradientReference1Y SIP_MONKEYPATCH_COMPAT_NAME( PropertyGradientReference1Y ),
171 GradientReference2X SIP_MONKEYPATCH_COMPAT_NAME( PropertyGradientReference2X ),
172 GradientReference2Y SIP_MONKEYPATCH_COMPAT_NAME( PropertyGradientReference2Y ),
173 GradientReference1IsCentroid SIP_MONKEYPATCH_COMPAT_NAME( PropertyGradientReference1IsCentroid ),
174 GradientReference2IsCentroid SIP_MONKEYPATCH_COMPAT_NAME( PropertyGradientReference2IsCentroid ),
175 BlurRadius SIP_MONKEYPATCH_COMPAT_NAME( PropertyBlurRadius ),
176 ShapeburstUseWholeShape SIP_MONKEYPATCH_COMPAT_NAME( PropertyShapeburstUseWholeShape ),
177 ShapeburstMaxDistance SIP_MONKEYPATCH_COMPAT_NAME( PropertyShapeburstMaxDistance ),
178 ShapeburstIgnoreRings SIP_MONKEYPATCH_COMPAT_NAME( PropertyShapeburstIgnoreRings ),
179 File SIP_MONKEYPATCH_COMPAT_NAME( PropertyFile ),
180 DistanceX SIP_MONKEYPATCH_COMPAT_NAME( PropertyDistanceX ),
181 DistanceY SIP_MONKEYPATCH_COMPAT_NAME( PropertyDistanceY ),
182 DisplacementX SIP_MONKEYPATCH_COMPAT_NAME( PropertyDisplacementX ),
183 DisplacementY SIP_MONKEYPATCH_COMPAT_NAME( PropertyDisplacementY ),
184 Opacity SIP_MONKEYPATCH_COMPAT_NAME( PropertyOpacity ),
185 CustomDash SIP_MONKEYPATCH_COMPAT_NAME( PropertyCustomDash ),
186 CapStyle SIP_MONKEYPATCH_COMPAT_NAME( PropertyCapStyle ),
187 Placement SIP_MONKEYPATCH_COMPAT_NAME( PropertyPlacement ),
188 Interval SIP_MONKEYPATCH_COMPAT_NAME( PropertyInterval ),
189 OffsetAlongLine SIP_MONKEYPATCH_COMPAT_NAME( PropertyOffsetAlongLine ),
190 AverageAngleLength SIP_MONKEYPATCH_COMPAT_NAME( PropertyAverageAngleLength ),
191 HorizontalAnchor SIP_MONKEYPATCH_COMPAT_NAME( PropertyHorizontalAnchor ),
192 VerticalAnchor SIP_MONKEYPATCH_COMPAT_NAME( PropertyVerticalAnchor ),
193 LayerEnabled SIP_MONKEYPATCH_COMPAT_NAME( PropertyLayerEnabled ),
194 ArrowWidth SIP_MONKEYPATCH_COMPAT_NAME( PropertyArrowWidth ),
195 ArrowStartWidth SIP_MONKEYPATCH_COMPAT_NAME( PropertyArrowStartWidth ),
196 ArrowHeadLength SIP_MONKEYPATCH_COMPAT_NAME( PropertyArrowHeadLength ),
197 ArrowHeadThickness SIP_MONKEYPATCH_COMPAT_NAME( PropertyArrowHeadThickness ),
198 ArrowHeadType SIP_MONKEYPATCH_COMPAT_NAME( PropertyArrowHeadType ),
199 ArrowType SIP_MONKEYPATCH_COMPAT_NAME( PropertyArrowType ),
200 OffsetX SIP_MONKEYPATCH_COMPAT_NAME( PropertyOffsetX ),
201 OffsetY SIP_MONKEYPATCH_COMPAT_NAME( PropertyOffsetY ),
202 PointCount SIP_MONKEYPATCH_COMPAT_NAME( PropertyPointCount ),
203 RandomSeed SIP_MONKEYPATCH_COMPAT_NAME( PropertyRandomSeed ),
204 ClipPoints SIP_MONKEYPATCH_COMPAT_NAME( PropertyClipPoints ),
205 DensityArea SIP_MONKEYPATCH_COMPAT_NAME( PropertyDensityArea ),
206 FontFamily SIP_MONKEYPATCH_COMPAT_NAME( PropertyFontFamily ),
207 FontStyle SIP_MONKEYPATCH_COMPAT_NAME( PropertyFontStyle ),
208 DashPatternOffset SIP_MONKEYPATCH_COMPAT_NAME( PropertyDashPatternOffset ),
209 TrimStart SIP_MONKEYPATCH_COMPAT_NAME( PropertyTrimStart ),
210 TrimEnd SIP_MONKEYPATCH_COMPAT_NAME( PropertyTrimEnd ),
211 LineStartWidthValue SIP_MONKEYPATCH_COMPAT_NAME( PropertyLineStartWidthValue ),
212 LineEndWidthValue SIP_MONKEYPATCH_COMPAT_NAME( PropertyLineEndWidthValue ),
213 LineStartColorValue SIP_MONKEYPATCH_COMPAT_NAME( PropertyLineStartColorValue ),
214 LineEndColorValue SIP_MONKEYPATCH_COMPAT_NAME( PropertyLineEndColorValue ),
215 MarkerClipping SIP_MONKEYPATCH_COMPAT_NAME( PropertyMarkerClipping ),
216 RandomOffsetX SIP_MONKEYPATCH_COMPAT_NAME( PropertyRandomOffsetX ),
217 RandomOffsetY SIP_MONKEYPATCH_COMPAT_NAME( PropertyRandomOffsetY ),
218 LineClipping SIP_MONKEYPATCH_COMPAT_NAME( PropertyLineClipping ),
219 SkipMultiples,
220 ShowMarker,
221 };
222 // *INDENT-ON*
223
227 static const QgsPropertiesDefinition &propertyDefinitions();
228
230
231 QgsSymbolLayer &operator=( const QgsSymbolLayer &other ) = delete;
232
238 virtual Qgis::SymbolLayerFlags flags() const;
239
244 bool enabled() const { return mEnabled; }
245
252 void setEnabled( bool enabled ) { mEnabled = enabled; }
253
260 Qgis::SymbolLayerUserFlags userFlags() const;
261
268 void setUserFlags( Qgis::SymbolLayerUserFlags flags );
269
284 virtual QColor color() const;
285
297 virtual void setColor( const QColor &color );
298
309 virtual void setStrokeColor( const QColor &color );
310
322 virtual QColor strokeColor() const;
323
334 virtual void setFillColor( const QColor &color );
335
347 virtual QColor fillColor() const;
348
353 virtual QString layerType() const = 0;
354
367 virtual void startRender( QgsSymbolRenderContext &context ) = 0;
368
380 virtual void stopRender( QgsSymbolRenderContext &context ) = 0;
381
400 virtual void startFeatureRender( const QgsFeature &feature, QgsRenderContext &context );
401
420 virtual void stopFeatureRender( const QgsFeature &feature, QgsRenderContext &context );
421
425 virtual QgsSymbolLayer *clone() const = 0 SIP_FACTORY;
426
432 Q_DECL_DEPRECATED virtual void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const SIP_DEPRECATED;
433
441 virtual bool toSld( QDomDocument &doc, QDomElement &element, QgsSldExportContext &context ) const;
442
443 virtual QString ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const { Q_UNUSED( mmScaleFactor ) Q_UNUSED( mapUnitScaleFactor ); return QString(); }
444
450 virtual QVariantMap properties() const = 0;
451
452 virtual void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) = 0;
453
457 virtual QgsSymbol *subSymbol();
458
460 virtual bool setSubSymbol( QgsSymbol *symbol SIP_TRANSFER );
461
462 Qgis::SymbolType type() const { return mType; }
463
465 virtual bool isCompatibleWithSymbol( QgsSymbol *symbol ) const;
466
475 virtual bool canCauseArtifactsBetweenAdjacentTiles() const;
476
484 void setLocked( bool locked ) { mLocked = locked; }
485
491 bool isLocked() const { return mLocked; }
492
500 virtual double estimateMaxBleed( const QgsRenderContext &context ) const { Q_UNUSED( context ) return 0; }
501
510 virtual void setOutputUnit( Qgis::RenderUnit unit ) { Q_UNUSED( unit ) }
511
521
527 virtual bool usesMapUnits() const;
528
529 virtual void setMapUnitScale( const QgsMapUnitScale &scale ) { Q_UNUSED( scale ) }
530 virtual QgsMapUnitScale mapUnitScale() const { return QgsMapUnitScale(); }
531
538 void setRenderingPass( int renderingPass );
539
546 int renderingPass() const;
547
552 virtual QSet<QString> usedAttributes( const QgsRenderContext &context ) const;
553
560 virtual void setDataDefinedProperty( Property key, const QgsProperty &property );
561
563 virtual bool writeDxf( QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, QgsSymbolRenderContext &context, QPointF shift = QPointF( 0.0, 0.0 ) ) const;
564
566 virtual double dxfWidth( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const;
567
569 virtual double dxfSize( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const;
570
572 virtual double dxfOffset( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const;
573
575 virtual QColor dxfColor( QgsSymbolRenderContext &context ) const;
576
578 virtual double dxfAngle( QgsSymbolRenderContext &context ) const;
579
581 virtual QVector<qreal> dxfCustomDashPattern( Qgis::RenderUnit &unit ) const;
582
584 virtual Qt::PenStyle dxfPenStyle() const;
585
587 virtual QColor dxfBrushColor( QgsSymbolRenderContext &context ) const;
588
590 virtual Qt::BrushStyle dxfBrushStyle() const;
591
597 QgsPaintEffect *paintEffect() const;
598
604 void setPaintEffect( QgsPaintEffect *effect SIP_TRANSFER );
605
611 virtual void prepareExpressions( const QgsSymbolRenderContext &context );
612
618 QgsPropertyCollection &dataDefinedProperties() { return mDataDefinedProperties; }
619
624 const QgsPropertyCollection &dataDefinedProperties() const SIP_SKIP { return mDataDefinedProperties; }
625
631 void setDataDefinedProperties( const QgsPropertyCollection &collection ) { mDataDefinedProperties = collection; }
632
638 virtual bool hasDataDefinedProperties() const;
639
645 virtual QList<QgsSymbolLayerReference> masks() const;
646
654 virtual void prepareMasks( const QgsSymbolRenderContext &context );
655
661 void setId( const QString &id );
662
668 QString id() const;
669
685 bool installMasks( QgsRenderContext &context, bool recursive, const QRectF &rect = QRectF() );
686
687 protected:
688 QgsSymbolLayer( const QgsSymbolLayer &other ) SIP_SKIP;
689
695 QgsSymbolLayer( Qgis::SymbolType type, bool locked = false );
696
698
700 bool mEnabled = true;
701
704
705 bool mLocked = false;
706 QColor mColor;
707 int mRenderingPass = 0;
708 QString mId;
710
711 std::unique_ptr< QgsPaintEffect > mPaintEffect;
713
714 // clip path to be used during rendering
715 QPainterPath mClipPath;
716
717 // Configuration of selected symbology implementation
719 static const bool SELECTION_IS_OPAQUE = true;
721 static const bool SELECT_FILL_BORDER = false;
723 static const bool SELECT_FILL_STYLE = false;
724
728 void restoreOldDataDefinedProperties( const QVariantMap &stringMap );
729
734 void copyDataDefinedProperties( QgsSymbolLayer *destLayer ) const;
735
740 void copyPaintEffect( QgsSymbolLayer *destLayer ) const;
741
749 void removeMasks( QgsRenderContext &context, bool recursive );
750
757 bool shouldRenderUsingSelectionColor( const QgsSymbolRenderContext &context ) const;
758
759 private:
760 static void initPropertyDefinitions();
761
763 static QgsPropertiesDefinition sPropertyDefinitions;
764
765#ifdef SIP_RUN
766 QgsSymbolLayer( const QgsSymbolLayer &other );
767#endif
768
769};
770
772
778class CORE_EXPORT QgsMarkerSymbolLayer : public QgsSymbolLayer
779{
780 public:
781
783
784 void startRender( QgsSymbolRenderContext &context ) override;
785
786 void stopRender( QgsSymbolRenderContext &context ) override;
787
794 virtual void renderPoint( QPointF point, QgsSymbolRenderContext &context ) = 0;
795
796 void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
797
804 void setAngle( double angle ) { mAngle = angle; }
805
810 double angle() const { return mAngle; }
811
820 void setLineAngle( double lineAngle ) { mLineAngle = lineAngle; }
821
829 virtual void setSize( double size ) { mSize = size; }
830
837 double size() const { return mSize; }
838
846 void setSizeUnit( Qgis::RenderUnit unit ) { mSizeUnit = unit; }
847
854 Qgis::RenderUnit sizeUnit() const { return mSizeUnit; }
855
863 void setSizeMapUnitScale( const QgsMapUnitScale &scale ) { mSizeMapUnitScale = scale; }
864
871 const QgsMapUnitScale &sizeMapUnitScale() const { return mSizeMapUnitScale; }
872
878 void setScaleMethod( Qgis::ScaleMethod scaleMethod ) { mScaleMethod = scaleMethod; }
879
884 Qgis::ScaleMethod scaleMethod() const { return mScaleMethod; }
885
894 void setOffset( QPointF offset ) { mOffset = offset; }
895
903 QPointF offset() const { return mOffset; }
904
912 void setOffsetUnit( Qgis::RenderUnit unit ) { mOffsetUnit = unit; }
913
920 Qgis::RenderUnit offsetUnit() const { return mOffsetUnit; }
921
929 void setOffsetMapUnitScale( const QgsMapUnitScale &scale ) { mOffsetMapUnitScale = scale; }
930
937 const QgsMapUnitScale &offsetMapUnitScale() const { return mOffsetMapUnitScale; }
938
946 void setHorizontalAnchorPoint( Qgis::HorizontalAnchorPoint h ) { mHorizontalAnchorPoint = h; }
947
954 Qgis::HorizontalAnchorPoint horizontalAnchorPoint() const { return mHorizontalAnchorPoint; }
955
963 void setVerticalAnchorPoint( Qgis::VerticalAnchorPoint v ) { mVerticalAnchorPoint = v; }
964
971 Qgis::VerticalAnchorPoint verticalAnchorPoint() const { return mVerticalAnchorPoint; }
972
973 bool toSld( QDomDocument &doc, QDomElement &element, QgsSldExportContext &context ) const override;
974
982 Q_DECL_DEPRECATED virtual void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const SIP_DEPRECATED;
983
991 virtual bool writeSldMarker( QDomDocument &doc, QDomElement &element, QgsSldExportContext &context ) const;
992
993 void setOutputUnit( Qgis::RenderUnit unit ) override;
994 Qgis::RenderUnit outputUnit() const override;
995 void setMapUnitScale( const QgsMapUnitScale &scale ) override;
996 QgsMapUnitScale mapUnitScale() const override;
997 virtual double dxfSize( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const override;
998 virtual double dxfAngle( QgsSymbolRenderContext &context ) const override;
999
1005 virtual QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) = 0;
1006
1007 protected:
1008
1010
1015 QgsMarkerSymbolLayer( bool locked = false );
1016
1024 void markerOffset( QgsSymbolRenderContext &context, double &offsetX, double &offsetY ) const;
1025
1036 void markerOffset( QgsSymbolRenderContext &context, double width, double height, double &offsetX, double &offsetY ) const SIP_PYNAME( markerOffsetWithWidthAndHeight );
1037
1051 void markerOffset( QgsSymbolRenderContext &context, double width, double height,
1052 Qgis::RenderUnit widthUnit, Qgis::RenderUnit heightUnit,
1053 double &offsetX, double &offsetY,
1054 const QgsMapUnitScale &widthMapUnitScale, const QgsMapUnitScale &heightMapUnitScale ) const SIP_PYNAME( markerOffset2 );
1055
1062 static QPointF _rotatedOffset( QPointF offset, double angle );
1063
1065 double mAngle = 0;
1067 double mLineAngle = 0;
1069 double mSize = 2.0;
1075 QPointF mOffset;
1086
1087 private:
1088 static Qgis::HorizontalAnchorPoint decodeHorizontalAnchorPoint( const QString &str );
1089 static Qgis::VerticalAnchorPoint decodeVerticalAnchorPoint( const QString &str );
1090
1091#ifdef SIP_RUN
1093#endif
1094};
1095
1102class CORE_EXPORT QgsLineSymbolLayer : public QgsSymbolLayer
1103{
1104 public:
1105
1113
1114 QgsLineSymbolLayer( const QgsLineSymbolLayer &other ) = delete;
1116
1117 void setOutputUnit( Qgis::RenderUnit unit ) override;
1118 Qgis::RenderUnit outputUnit() const override;
1119 void setMapUnitScale( const QgsMapUnitScale &scale ) override;
1120 QgsMapUnitScale mapUnitScale() const override;
1121 void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
1122 double dxfWidth( const QgsDxfExport &e, QgsSymbolRenderContext &context ) const override;
1123
1128 virtual void renderPolyline( const QPolygonF &points, QgsSymbolRenderContext &context ) = 0;
1129
1138 virtual void renderPolygonStroke( const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context );
1139
1153 virtual void setWidth( double width ) { mWidth = width; }
1154
1164 virtual double width() const { return mWidth; }
1165
1176 virtual double width( const QgsRenderContext &context ) const;
1177
1187 double offset() const { return mOffset; }
1188
1198 void setOffset( double offset ) { mOffset = offset; }
1199
1206 void setOffsetUnit( Qgis::RenderUnit unit ) { mOffsetUnit = unit; }
1207
1214 Qgis::RenderUnit offsetUnit() const { return mOffsetUnit; }
1215
1222 void setOffsetMapUnitScale( const QgsMapUnitScale &scale ) { mOffsetMapUnitScale = scale; }
1223
1230 const QgsMapUnitScale &offsetMapUnitScale() const { return mOffsetMapUnitScale; }
1231
1232 // TODO QGIS 4.0 - setWidthUnit(), widthUnit(), setWidthUnitScale(), widthUnitScale()
1233 // only apply to simple line symbol layers and do not belong here.
1234
1240 void setWidthUnit( Qgis::RenderUnit unit ) { mWidthUnit = unit; }
1241
1246 Qgis::RenderUnit widthUnit() const { return mWidthUnit; }
1247
1248 void setWidthMapUnitScale( const QgsMapUnitScale &scale ) { mWidthMapUnitScale = scale; }
1249 const QgsMapUnitScale &widthMapUnitScale() const { return mWidthMapUnitScale; }
1250
1261 RenderRingFilter ringFilter() const;
1262
1273 void setRingFilter( QgsLineSymbolLayer::RenderRingFilter filter );
1274
1275 protected:
1276 QgsLineSymbolLayer( bool locked = false );
1277
1278 double mWidth = 0;
1281 double mOffset = 0;
1284
1285 RenderRingFilter mRingFilter = AllRings;
1286
1287 private:
1288#ifdef SIP_RUN
1289 QgsLineSymbolLayer( const QgsLineSymbolLayer &other );
1290#endif
1291};
1292
1298class CORE_EXPORT QgsFillSymbolLayer : public QgsSymbolLayer
1299{
1300 public:
1301
1302 QgsFillSymbolLayer( const QgsFillSymbolLayer &other ) = delete;
1304
1310 virtual void renderPolygon( const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context ) = 0;
1311
1312 void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override;
1313
1321 void setAngle( double angle ) { mAngle = angle; }
1322
1330 double angle() const { return mAngle; }
1331
1342 virtual QImage toTiledPatternImage( ) const;
1343
1344 protected:
1345 QgsFillSymbolLayer( bool locked = false );
1347 void _renderPolygon( QPainter *p, const QPolygonF &points, const QVector<QPolygonF> *rings, QgsSymbolRenderContext &context );
1348
1349 double mAngle = 0.0;
1350
1351 private:
1352#ifdef SIP_RUN
1353 QgsFillSymbolLayer( const QgsFillSymbolLayer &other );
1354#endif
1355};
1356
1357class QgsSymbolLayerWidget; // why does SIP fail, when this isn't here
1358
1359#endif
ScaleMethod
Scale methods.
Definition qgis.h:588
@ ScaleDiameter
Calculate scale by the diameter.
QFlags< SymbolLayerFlag > SymbolLayerFlags
Symbol layer flags.
Definition qgis.h:851
QFlags< SymbolLayerUserFlag > SymbolLayerUserFlags
Symbol layer user flags.
Definition qgis.h:874
VerticalAnchorPoint
Marker symbol vertical anchor points.
Definition qgis.h:778
@ Center
Align to vertical center of symbol.
RenderUnit
Rendering size units.
Definition qgis.h:5029
@ Millimeters
Millimeters.
@ Unknown
Mixed or unknown units.
SymbolType
Symbol types.
Definition qgis.h:574
@ Marker
Marker symbol.
@ Line
Line symbol.
@ Fill
Fill symbol.
@ Hybrid
Hybrid symbol.
HorizontalAnchorPoint
Marker symbol horizontal anchor points.
Definition qgis.h:764
@ Center
Align to horizontal center of symbol.
Exports QGIS layers to the DXF format.
Handles 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:58
Container of fields for a vector layer.
Definition qgsfields.h:46
Abstract base class for fill symbol layers.
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
Returns the rotation angle of the fill symbol, in degrees clockwise.
void setAngle(double angle)
Sets the rotation angle of the pattern, in degrees clockwise.
QgsFillSymbolLayer & operator=(const QgsFillSymbolLayer &other)=delete
QgsFillSymbolLayer(const QgsFillSymbolLayer &other)=delete
Abstract base class for line symbol layers.
const QgsMapUnitScale & widthMapUnitScale() const
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.
QgsLineSymbolLayer & operator=(const QgsLineSymbolLayer &other)=delete
QgsMapUnitScale mWidthMapUnitScale
virtual void setWidth(double width)
Sets the width of the line symbol layer.
QgsLineSymbolLayer(const QgsLineSymbolLayer &other)=delete
void setWidthMapUnitScale(const QgsMapUnitScale &scale)
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.
void setOffsetUnit(Qgis::RenderUnit unit)
Sets the unit for the line's offset.
void setWidthUnit(Qgis::RenderUnit unit)
Sets 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 & offsetMapUnitScale() const
Returns the map unit scale for the line's offset.
Qgis::RenderUnit offsetUnit() const
Returns the units for the line's offset.
Qgis::RenderUnit widthUnit() const
Returns the units for the line's width.
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.
void setVerticalAnchorPoint(Qgis::VerticalAnchorPoint v)
Sets the vertical anchor point for positioning the symbol.
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...
void setOffsetUnit(Qgis::RenderUnit unit)
Sets the units for the symbol's offset.
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.
virtual void renderPoint(QPointF point, QgsSymbolRenderContext &context)=0
Renders a marker at the specified point.
QPointF mOffset
Marker offset.
const QgsMapUnitScale & sizeMapUnitScale() const
Returns the map unit scale for the symbol's size.
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.
void setLineAngle(double lineAngle)
Sets the line angle modification for the symbol's angle.
double size() const
Returns the symbol size.
Qgis::VerticalAnchorPoint verticalAnchorPoint() const
Returns the vertical anchor point for positioning the symbol.
QgsMapUnitScale mOffsetMapUnitScale
Offset map unit scale.
const QgsMapUnitScale & offsetMapUnitScale() const
Returns the map unit scale for the symbol's offset.
void setHorizontalAnchorPoint(Qgis::HorizontalAnchorPoint h)
Sets the horizontal anchor point for positioning the symbol.
Qgis::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.
Qgis::HorizontalAnchorPoint horizontalAnchorPoint() const
Returns the horizontal anchor point for positioning the symbol.
QgsMarkerSymbolLayer & operator=(const QgsMarkerSymbolLayer &other)=delete
QgsMapUnitScale mSizeMapUnitScale
Marker size map unit scale.
Qgis::RenderUnit sizeUnit() const
Returns the units for the symbol's size.
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units for the symbol's size.
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 an integer key value.
A store for object properties.
Contains information about the context of a rendering operation.
Holds SLD export options and other information related to SLD export of a QGIS layer style.
Type used to refer to a specific symbol layer in a symbol of a layer.
Abstract base class for widgets used to configure QgsSymbolLayer classes.
Abstract base class for symbol layers.
virtual QgsSymbolLayer * clone() const =0
Shall be reimplemented by subclasses to create a deep copy of the instance.
Qgis::SymbolType type() const
const QgsPropertyCollection & dataDefinedProperties() const
Returns a reference to the symbol layer's property collection, used for data defined overrides.
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
Property
Data definable properties.
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.
void setEnabled(bool enabled)
Sets whether symbol layer is enabled and should be drawn.
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 QString ogrFeatureStyle(double mmScaleFactor, double mapUnitScaleFactor) const
virtual Qgis::RenderUnit outputUnit() const
Returns the units to use for sizes and widths within the symbol layer.
Qgis::SymbolLayerUserFlags mUserFlags
User controlled flags.
void setLocked(bool locked)
Sets whether the layer's colors are locked.
virtual void setMapUnitScale(const QgsMapUnitScale &scale)
virtual ~QgsSymbolLayer()
virtual void setOutputUnit(Qgis::RenderUnit unit)
Sets the units to use for sizes and widths within the symbol layer.
virtual void drawPreviewIcon(QgsSymbolRenderContext &context, QSize size)=0
QgsPropertyCollection mDataDefinedProperties
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the symbol layer's property collection, used for data defined overrides.
QgsSymbolLayer & operator=(const QgsSymbolLayer &other)=delete
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the symbol layer's property collection, used for data defined overrides.
Encapsulates the context in which a symbol is being rendered.
Abstract base class for all rendered symbols.
Definition qgssymbol.h:231
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition qgis_sip.h:191
#define SIP_DEPRECATED
Definition qgis_sip.h:106
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_MONKEYPATCH_SCOPEENUM_UNNEST(OUTSIDE_CLASS, FORMERNAME)
Definition qgis_sip.h:271
#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:208
#define SIP_MONKEYPATCH_COMPAT_NAME(FORMERNAME)
Definition qgis_sip.h:273
QMap< int, QgsPropertyDefinition > QgsPropertiesDefinition
Definition of available properties.
QMap< QString, QString > QgsStringMap