15 #ifndef QGSSYMBOLLAYER_H
16 #define QGSSYMBOLLAYER_H
18 #define DEG2RAD(x) ((x)*M_PI/180)
19 #define DEFAULT_SCALE_METHOD Qgis::ScaleMethod::ScaleDiameter
21 #include "qgis_core.h"
31 #include <QDomDocument>
32 #include <QDomElement>
33 #include <QPainterPath>
62 switch ( sipCpp->type() )
65 if ( sipCpp->layerType() ==
"EllipseMarker" )
66 sipType = sipType_QgsEllipseSymbolLayer;
67 else if ( sipCpp->layerType() ==
"FontMarker" )
68 sipType = sipType_QgsFontMarkerSymbolLayer;
69 else if ( sipCpp->layerType() ==
"SimpleMarker" )
70 sipType = sipType_QgsSimpleMarkerSymbolLayer;
71 else if ( sipCpp->layerType() ==
"FilledMarker" )
72 sipType = sipType_QgsFilledMarkerSymbolLayer;
73 else if ( sipCpp->layerType() ==
"SvgMarker" )
74 sipType = sipType_QgsSvgMarkerSymbolLayer;
75 else if ( sipCpp->layerType() ==
"RasterMarker" )
76 sipType = sipType_QgsRasterMarkerSymbolLayer;
77 else if ( sipCpp->layerType() ==
"VectorField" )
78 sipType = sipType_QgsVectorFieldSymbolLayer;
79 else if ( sipCpp->layerType() ==
"MaskMarker" )
80 sipType = sipType_QgsMaskMarkerSymbolLayer;
82 sipType = sipType_QgsMarkerSymbolLayer;
86 if ( sipCpp->layerType() ==
"MarkerLine" )
87 sipType = sipType_QgsMarkerLineSymbolLayer;
88 else if ( sipCpp->layerType() ==
"SimpleLine" )
89 sipType = sipType_QgsSimpleLineSymbolLayer;
90 else if ( sipCpp->layerType() ==
"HashLine" )
91 sipType = sipType_QgsHashedLineSymbolLayer;
92 else if ( sipCpp->layerType() ==
"ArrowLine" )
93 sipType = sipType_QgsArrowSymbolLayer;
94 else if ( sipCpp->layerType() ==
"InterpolatedLine" )
95 sipType = sipType_QgsInterpolatedLineSymbolLayer;
96 else if ( sipCpp->layerType() ==
"RasterLine" )
97 sipType = sipType_QgsRasterLineSymbolLayer;
98 else if ( sipCpp->layerType() ==
"Lineburst" )
99 sipType = sipType_QgsLineburstSymbolLayer;
101 sipType = sipType_QgsLineSymbolLayer;
105 if ( sipCpp->layerType() ==
"SimpleFill" )
106 sipType = sipType_QgsSimpleFillSymbolLayer;
107 else if ( sipCpp->layerType() ==
"LinePatternFill" )
108 sipType = sipType_QgsLinePatternFillSymbolLayer;
109 else if ( sipCpp->layerType() ==
"PointPatternFill" )
110 sipType = sipType_QgsPointPatternFillSymbolLayer;
111 else if ( sipCpp->layerType() ==
"SVGFill" )
112 sipType = sipType_QgsSVGFillSymbolLayer;
113 else if ( sipCpp->layerType() ==
"RasterFill" )
114 sipType = sipType_QgsRasterFillSymbolLayer;
115 else if ( sipCpp->layerType() ==
"CentroidFill" )
116 sipType = sipType_QgsCentroidFillSymbolLayer;
117 else if ( sipCpp->layerType() ==
"GradientFill" )
118 sipType = sipType_QgsGradientFillSymbolLayer;
119 else if ( sipCpp->layerType() ==
"ShapeburstFill" )
120 sipType = sipType_QgsShapeburstFillSymbolLayer;
121 else if ( sipCpp->layerType() ==
"RandomMarkerFill" )
122 sipType = sipType_QgsRandomMarkerFillSymbolLayer;
124 sipType = sipType_QgsFillSymbolLayer;
128 sipType = sipType_QgsGeometryGeneratorSymbolLayer;
232 virtual Qgis::SymbolLayerFlags flags()
const;
264 virtual QColor color()
const;
277 virtual void setColor(
const QColor &color );
290 virtual void setStrokeColor(
const QColor &color );
304 virtual QColor strokeColor()
const;
317 virtual void setFillColor(
const QColor &color );
331 virtual QColor fillColor()
const;
412 virtual void toSld( QDomDocument &doc, QDomElement &element,
const QVariantMap &props )
const
413 { Q_UNUSED( props ) element.appendChild( doc.createComment( QStringLiteral(
"SymbolLayerV2 %1 not implemented yet" ).arg( layerType() ) ) ); }
415 virtual QString
ogrFeatureStyle(
double mmScaleFactor,
double mapUnitScaleFactor )
const { Q_UNUSED( mmScaleFactor ) Q_UNUSED( mapUnitScaleFactor );
return QString(); }
437 virtual bool isCompatibleWithSymbol(
QgsSymbol *symbol )
const;
447 virtual bool canCauseArtifactsBetweenAdjacentTiles()
const;
499 virtual bool usesMapUnits()
const;
510 void setRenderingPass(
int renderingPass );
518 int renderingPass()
const;
524 virtual QSet<QString> usedAttributes(
const QgsRenderContext &context )
const;
533 virtual void setDataDefinedProperty( Property key,
const QgsProperty &property );
536 virtual bool writeDxf(
QgsDxfExport &e,
double mmMapUnitScaleFactor,
const QString &layerName,
QgsSymbolRenderContext &context, QPointF shift = QPointF( 0.0, 0.0 ) )
const;
554 virtual Qt::PenStyle dxfPenStyle()
const;
560 virtual Qt::BrushStyle dxfBrushStyle()
const;
614 virtual bool hasDataDefinedProperties()
const;
621 virtual QList<QgsSymbolLayerReference> masks()
const;
635 bool mEnabled =
true;
637 bool mLocked =
false;
639 int mRenderingPass = 0;
648 static const bool SELECTION_IS_OPAQUE =
true;
650 static const bool SELECT_FILL_BORDER =
false;
652 static const bool SELECT_FILL_STYLE =
false;
658 void restoreOldDataDefinedProperties(
const QVariantMap &stringMap );
664 void copyDataDefinedProperties(
QgsSymbolLayer *destLayer )
const;
674 static void initPropertyDefinitions();
744 double angle()
const {
return mAngle; }
764 virtual void setSize(
double size ) { mSize = size; }
772 double size()
const {
return mSize; }
838 QPointF
offset()
const {
return mOffset; }
908 void toSld( QDomDocument &doc, QDomElement &element,
const QVariantMap &props )
const override;
916 virtual void writeSldMarker( QDomDocument &doc, QDomElement &element,
const QVariantMap &props )
const
917 { Q_UNUSED( props ) element.appendChild( doc.createComment( QStringLiteral(
"QgsMarkerSymbolLayer %1 not implemented yet" ).arg( layerType() ) ) ); }
959 void markerOffset(
QgsSymbolRenderContext &context,
double width,
double height,
double &offsetX,
double &offsetY )
const SIP_PYNAME( markerOffsetWithWidthAndHeight );
964 double &offsetX,
double &offsetY,
973 static QPointF _rotatedOffset( QPointF offset,
double angle );
978 double mLineAngle = 0;
1050 virtual void renderPolygonStroke(
const QPolygonF &points,
const QVector<QPolygonF> *rings,
QgsSymbolRenderContext &context );
1065 virtual void setWidth(
double width ) { mWidth = width; }
1076 virtual double width()
const {
return mWidth; }
1173 RenderRingFilter ringFilter()
const;
1234 void _renderPolygon( QPainter *p,
const QPolygonF &points,
const QVector<QPolygonF> *rings,
QgsSymbolRenderContext &context );
1236 double mAngle = 0.0;
ScaleMethod
Scale methods.
@ ScaleDiameter
Calculate scale by the diameter.
Exports QGIS layers to the DXF format.
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...
Container of fields for a vector layer.
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,...
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.
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.
Qgis::SymbolType type() const
QgsSymbolLayer & operator=(const QgsSymbolLayer &other)=delete
QgsSymbolLayer cannot be copied.
bool isLocked() const
Returns true if the symbol layer colors are locked and the layer will ignore any symbol-level color c...
virtual QgsMapUnitScale mapUnitScale() const
virtual 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.
RenderUnit
Rendering size units.
@ RenderUnknownUnit
Mixed or unknown units.
@ RenderMillimeters
Millimeters.
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)
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
QMap< int, QgsPropertyDefinition > QgsPropertiesDefinition
Definition of available properties.
QMap< QString, QString > QgsStringMap