16 #ifndef QGSMARKERSYMBOLLAYER_H 
   17 #define QGSMARKERSYMBOLLAYER_H 
   19 #include "qgis_core.h" 
   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 
   86     static QList< QgsSimpleMarkerSymbolLayerBase::Shape > availableShapes();
 
  150     bool prepareMarkerShape( Shape shape );
 
  155     bool prepareMarkerPath( Shape symbol );
 
  163     bool shapeToPolygon( Shape shape, QPolygonF &polygon ) 
const;
 
  181     void calculateOffsetAndRotation( 
QgsSymbolRenderContext &context, 
double scaledSize, 
bool &hasDataDefinedRotation, QPointF &offset, 
double &
angle ) 
const;
 
  252     QString layerType() const override;
 
  255     QVariantMap properties() const override;
 
  257     void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
 
  258     QString ogrFeatureStyle( 
double mmScaleFactor, 
double mapUnitScaleFactor ) const override;
 
  259     bool writeDxf( 
QgsDxfExport &e, 
double mmMapUnitScaleFactor, const QString &layerName, 
QgsSymbolRenderContext &context, QPointF shift = QPointF( 0.0, 0.0 ) ) const override;
 
  260     void setOutputUnit( 
QgsUnitTypes::RenderUnit unit ) override;
 
  264     bool usesMapUnits() const override;
 
  266     QColor fillColor()
 const override { 
return mColor; }
 
  268     void setColor( 
const QColor &color ) 
override;
 
  269     QColor 
color() 
const override;
 
  420     Qt::PenStyle mStrokeStyle = Qt::SolidLine;
 
  422     double mStrokeWidth = 0;
 
  430     Qt::PenCapStyle mPenCapStyle = Qt::SquareCap;
 
  449     bool mUsingCache = 
false;
 
  452     static const int MAXIMUM_CACHE_WIDTH = 3000;
 
  458     double mCachedOpacity = 1.0;
 
  494     QString layerType() const override;
 
  497     QVariantMap properties() const override;
 
  502     QSet<QString> usedAttributes( const 
QgsRenderContext &context ) const override;
 
  503     bool hasDataDefinedProperties() const override;
 
  504     void setColor( const QColor &
c ) override;
 
  505     QColor color() const override;
 
  506     bool usesMapUnits() const override;
 
  517     std::unique_ptr< QgsFillSymbol > mFill;
 
  522 #define DEFAULT_SVGMARKER_SIZE         2*DEFAULT_POINT_SIZE 
  523 #define DEFAULT_SVGMARKER_ANGLE        0 
  551     static 
void resolvePaths( QVariantMap &properties, const 
QgsPathResolver &pathResolver, 
bool saving );
 
  555     QString layerType() const override;
 
  563     QVariantMap properties() const override;
 
  564     bool usesMapUnits() const override;
 
  568     void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
 
  574     QString path()
 const { 
return mPath; }
 
  581     void setPath( 
const QString &path );
 
  594     double updateDefaultAspectRatio();
 
  608     bool setPreservedAspectRatio( 
bool par );
 
  638     QMap<QString, QgsProperty> 
parameters()
 const { 
return mParameters; }
 
  644     void setParameters( 
const QMap<QString, QgsProperty> ¶meters );
 
  684     double calculateAspectRatio( 
QgsSymbolRenderContext &context, 
double scaledSize, 
bool &hasDataDefinedAspectRatio ) 
const;
 
  689     double mDefaultAspectRatio = 0.0;
 
  691     double mFixedAspectRatio = 0.0;
 
  694     bool mHasFillParam = 
false;
 
  704     void calculateOffsetAndRotation( 
QgsSymbolRenderContext &context, 
double scaledWidth, 
double scaledHeight, QPointF &offset, 
double &
angle ) 
const;
 
  711 #define DEFAULT_RASTERMARKER_SIZE         2*DEFAULT_POINT_SIZE 
  712 #define DEFAULT_RASTERMARKER_ANGLE        0 
  744     static 
void resolvePaths( QVariantMap &properties, const 
QgsPathResolver &pathResolver, 
bool saving );
 
  748     QString layerType() const override;
 
  752     QVariantMap properties() const override;
 
  755     bool usesMapUnits() const override;
 
  763     double calculateAspectRatio( 
QgsSymbolRenderContext &context, 
double scaledSize, 
bool &hasDataDefinedAspectRatio ) const;
 
  769     QString path()
 const { 
return mPath; }
 
  776     void setPath( 
const QString &path );
 
  803     double updateDefaultAspectRatio();
 
  817     bool setPreservedAspectRatio( 
bool par );
 
  843     double mOpacity = 1.0;
 
  845     double mDefaultAspectRatio = 0.0;
 
  847     double mFixedAspectRatio = 0.0;
 
  851     void calculateOffsetAndRotation( 
QgsSymbolRenderContext &context, 
double scaledWidth, 
double scaledHeight, QPointF &offset, 
double &
angle ) 
const;
 
  858 #define POINT2MM(x) ( (x) * 25.4 / 72 )  
  859 #define MM2POINT(x) ( (x) * 72 / 25.4 ) 
  861 #define DEFAULT_FONTMARKER_FONT   "Dingbats" 
  862 #define DEFAULT_FONTMARKER_CHR    QChar('A') 
  863 #define DEFAULT_FONTMARKER_SIZE   POINT2MM(12) 
  864 #define DEFAULT_FONTMARKER_COLOR  QColor( 35, 35, 35 ) 
  865 #define DEFAULT_FONTMARKER_BORDERCOLOR  QColor(Qt::white) 
  866 #define DEFAULT_FONTMARKER_JOINSTYLE    Qt::MiterJoin 
  867 #define DEFAULT_FONTMARKER_ANGLE  0 
  904     static 
void resolveFonts( const QVariantMap &properties, const 
QgsReadWriteContext &context );
 
  908     QString layerType() const override;
 
  916     QVariantMap properties() const override;
 
  920     void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
 
  921     bool usesMapUnits() const override;
 
  930     QString fontFamily()
 const { 
return mFontFamily; }
 
 1059     QString mFontFamily;
 
 1062     std::unique_ptr< QFontMetrics >mFontMetrics;
 
 1066     double mChrWidth = 0;
 
 1069     double mFontSizeScale = 1.0;
 
 1072     QColor mStrokeColor;
 
 1073     double mStrokeWidth;
 
 1076     Qt::PenJoinStyle mPenJoinStyle;
 
 1081     bool mUseCachedPath = 
false;
 
 1082     QPainterPath mCachedPath;
 
 1085     bool mNonZeroFontSize = 
true;
 
 1088     void calculateOffsetAndRotation( 
QgsSymbolRenderContext &context, 
double scaledSize, 
bool &hasDataDefinedRotation, QPointF &offset, 
double &
angle ) 
const;
 
ScaleMethod
Scale methods.
Exports QGIS layers to the DXF format.
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
Filled marker symbol layer, consisting of a shape which is rendered using a QgsFillSymbol.
~QgsFilledMarkerSymbolLayer() override
~QgsFontMarkerSymbolLayer() override
void setStrokeColor(const QColor &color) override
Set stroke color.
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
Gets stroke color.
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.
Shape mShape
Symbol shape.
QPainterPath mPath
Painter path representing shape. If mPolygon is empty then the shape is stored in mPath.
QgsSimpleMarkerSymbolLayerBase::Shape shape() const
Returns the shape for the rendered marker symbol.
~QgsSimpleMarkerSymbolLayerBase() override
void setShape(QgsSimpleMarkerSymbolLayerBase::Shape shape)
Sets the rendered marker shape.
QPolygonF mPolygon
Polygon of points in shape. If polygon is empty then shape is using mPath.
Shape
Marker symbol shapes.
@ ArrowHead
Right facing arrow head (unfilled, lines only)
@ QuarterArc
A line-only one quarter arc (since QGIS 3.20)
@ Octagon
Octagon (since QGIS 3.18)
@ ThirdCircle
One third circle (top left third)
@ CrossFill
Solid filled cross.
@ RightHalfTriangle
Right half of triangle.
@ SquareWithCorners
A square with diagonal corners (since QGIS 3.18)
@ LeftHalfTriangle
Left half of triangle.
@ QuarterSquare
Quarter square (top left quarter)
@ ArrowHeadFilled
Right facing filled arrow head.
@ Cross2
Rotated cross (lines only), "x" shape.
@ Cross
Cross (lines only)
@ EquilateralTriangle
Equilateral triangle.
@ HalfSquare
Half square (left half)
@ ThirdArc
A line-only one third arc (since QGIS 3.20)
@ QuarterCircle
Quarter circle (top left quarter)
@ SemiCircle
Semi circle (top half)
@ DiagonalHalfSquare
Diagonal half square (bottom left half)
@ AsteriskFill
A filled asterisk shape (since QGIS 3.18)
@ HalfArc
A line-only half arc (since QGIS 3.20)
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
Set fill color.
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
Gets fill color.
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.
void setStrokeWidth(double w)
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
Set stroke color.
QColor strokeColor() const override
Gets stroke color.
void setFillColor(const QColor &color) override
Set fill color.
double strokeWidth() const
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 QColor color() const
The fill color.
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)
The fill color.
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.
Helper functions for various unit types.
RenderUnit
Rendering size 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)
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 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