17 #include "qgsexpression.h" 27 #include <QDomDocument> 28 #include <QDomElement> 31 : mSymbolName( QStringLiteral(
"circle" ) )
32 , mStrokeColor( QColor( 35, 35, 35 ) )
35 mPen.setColor( mStrokeColor );
36 mPen.setStyle( mStrokeStyle );
37 mPen.setJoinStyle( mPenJoinStyle );
40 mBrush.setStyle( Qt::SolidPattern );
48 if ( properties.contains( QStringLiteral(
"symbol_name" ) ) )
50 layer->
setSymbolName( properties[ QStringLiteral(
"symbol_name" )] );
52 if ( properties.contains( QStringLiteral(
"symbol_width" ) ) )
54 layer->
setSymbolWidth( properties[QStringLiteral(
"symbol_width" )].toDouble() );
56 if ( properties.contains( QStringLiteral(
"symbol_width_unit" ) ) )
60 if ( properties.contains( QStringLiteral(
"symbol_width_map_unit_scale" ) ) )
64 if ( properties.contains( QStringLiteral(
"symbol_height" ) ) )
66 layer->
setSymbolHeight( properties[QStringLiteral(
"symbol_height" )].toDouble() );
68 if ( properties.contains( QStringLiteral(
"symbol_height_unit" ) ) )
72 if ( properties.contains( QStringLiteral(
"symbol_height_map_unit_scale" ) ) )
76 if ( properties.contains( QStringLiteral(
"angle" ) ) )
78 layer->
setAngle( properties[QStringLiteral(
"angle" )].toDouble() );
80 if ( properties.contains( QStringLiteral(
"outline_style" ) ) )
84 else if ( properties.contains( QStringLiteral(
"line_style" ) ) )
88 if ( properties.contains( QStringLiteral(
"joinstyle" ) ) )
92 if ( properties.contains( QStringLiteral(
"outline_width" ) ) )
94 layer->
setStrokeWidth( properties[QStringLiteral(
"outline_width" )].toDouble() );
96 else if ( properties.contains( QStringLiteral(
"line_width" ) ) )
98 layer->
setStrokeWidth( properties[QStringLiteral(
"line_width" )].toDouble() );
100 if ( properties.contains( QStringLiteral(
"outline_width_unit" ) ) )
104 else if ( properties.contains( QStringLiteral(
"line_width_unit" ) ) )
108 if ( properties.contains( QStringLiteral(
"outline_width_map_unit_scale" ) ) )
112 if ( properties.contains( QStringLiteral(
"fill_color" ) ) )
117 else if ( properties.contains( QStringLiteral(
"color" ) ) )
121 if ( properties.contains( QStringLiteral(
"outline_color" ) ) )
125 else if ( properties.contains( QStringLiteral(
"line_color" ) ) )
129 if ( properties.contains( QStringLiteral(
"size" ) ) )
131 layer->
setSize( properties[QStringLiteral(
"size" )].toDouble() );
133 if ( properties.contains( QStringLiteral(
"size_unit" ) ) )
137 if ( properties.contains( QStringLiteral(
"size_map_unit_scale" ) ) )
141 if ( properties.contains( QStringLiteral(
"offset" ) ) )
145 if ( properties.contains( QStringLiteral(
"offset_unit" ) ) )
149 if ( properties.contains( QStringLiteral(
"offset_map_unit_scale" ) ) )
153 if ( properties.contains( QStringLiteral(
"horizontal_anchor_point" ) ) )
157 if ( properties.contains( QStringLiteral(
"vertical_anchor_point" ) ) )
170 double scaledWidth = mSymbolWidth;
171 double scaledHeight = mSymbolHeight;
178 if ( exprVal.isValid() )
180 double width = exprVal.toDouble( &ok );
184 mPen.setWidthF( width );
190 if ( exprVal.isValid() )
197 if ( exprVal.isValid() )
213 if ( exprVal.isValid() )
215 symbolName = exprVal.toString();
217 preparePath( symbolName, context, &scaledWidth, &scaledHeight, context.
feature() );
222 bool hasDataDefinedRotation =
false;
225 calculateOffsetAndRotation( context, scaledWidth, scaledHeight, hasDataDefinedRotation, offset, angle );
234 transform.translate( point.x() + offset.x(), point.y() + offset.y() );
237 transform.rotate( angle );
241 p->setBrush( mBrush );
242 p->drawPath( transform.map( mPainterPath ) );
249 bool &hasDataDefinedRotation,
251 double &
angle )
const 255 markerOffset( context, scaledWidth, scaledHeight, mSymbolWidthUnit, mSymbolHeightUnit, offsetX, offsetY, mSymbolWidthMapUnitScale, mSymbolHeightMapUnitScale );
256 offset = QPointF( offsetX, offsetY );
261 bool usingDataDefinedRotation =
false;
266 usingDataDefinedRotation = ok;
270 if ( hasDataDefinedRotation )
295 return QStringLiteral(
"EllipseMarker" );
303 preparePath( mSymbolName, context );
305 mPen.setColor( mStrokeColor );
306 mPen.setStyle( mStrokeStyle );
307 mPen.setJoinStyle( mPenJoinStyle );
309 mBrush.setColor(
mColor );
348 QDomElement symbolizerElem = doc.createElement( QStringLiteral(
"se:PointSymbolizer" ) );
349 if ( !props.value( QStringLiteral(
"uom" ), QLatin1String(
"" ) ).isEmpty() )
350 symbolizerElem.setAttribute( QStringLiteral(
"uom" ), props.value( QStringLiteral(
"uom" ), QLatin1String(
"" ) ) );
351 element.appendChild( symbolizerElem );
362 QDomElement graphicElem = doc.createElement( QStringLiteral(
"se:Graphic" ) );
363 element.appendChild( graphicElem );
372 QString angleFunc = props.
value( QStringLiteral(
"angle" ), QLatin1String(
"" ) );
373 if ( angleFunc.isEmpty() )
375 if ( ddRotation && ddRotation.
isActive() )
380 angleFunc = QString::number(
mAngle );
382 else if ( ddRotation && ddRotation.
isActive() )
386 angleFunc = QStringLiteral(
"%1 + %2" ).arg( angleFunc, ddRotation.
asExpression() );
392 double angle = angleFunc.toDouble( &ok );
396 angleFunc = QStringLiteral(
"%1 + %2" ).arg( angleFunc ).arg(
mAngle );
401 angleFunc = QString::number( angle +
mAngle );
411 double widthHeightFactor = mSymbolWidth / mSymbolHeight;
413 graphicElem.appendChild( factorElem );
420 QDomElement graphicElem = element.firstChildElement( QStringLiteral(
"Graphic" ) );
421 if ( graphicElem.isNull() )
424 QString name = QStringLiteral(
"circle" );
427 double widthHeightFactor = 1.0;
431 for ( QgsStringMap::iterator it = vendorOptions.begin(); it != vendorOptions.end(); ++it )
433 if ( it.key() == QLatin1String(
"widthHeightFactor" ) )
436 double v = it.value().toDouble( &ok );
438 widthHeightFactor = v;
445 QString uom = element.attribute( QStringLiteral(
"uom" ) );
454 double d = angleFunc.toDouble( &ok );
475 map[QStringLiteral(
"symbol_name" )] = mSymbolName;
476 map[QStringLiteral(
"symbol_width" )] = QString::number( mSymbolWidth );
479 map[QStringLiteral(
"symbol_height" )] = QString::number( mSymbolHeight );
482 map[QStringLiteral(
"angle" )] = QString::number(
mAngle );
484 map[QStringLiteral(
"outline_width" )] = QString::number( mStrokeWidth );
493 map[QStringLiteral(
"size" )] = QString::number(
mSize );
501 QSizeF QgsEllipseSymbolLayer::calculateSize(
QgsSymbolRenderContext &context,
double *scaledWidth,
double *scaledHeight )
512 width = mSymbolWidth;
516 *scaledWidth = width;
528 height = mSymbolHeight;
532 *scaledHeight = height;
535 return QSizeF( width, height );
540 mPainterPath = QPainterPath();
542 QSizeF
size = calculateSize( context, scaledWidth, scaledHeight );
544 if (
symbolName == QLatin1String(
"circle" ) )
546 mPainterPath.addEllipse( QRectF( -size.width() / 2.0, -size.height() / 2.0, size.width(), size.height() ) );
548 else if (
symbolName == QLatin1String(
"semi_circle" ) )
550 mPainterPath.arcTo( -size.width() / 2.0, -size.height() / 2.0, size.width(), size.height(), 0, 180 );
551 mPainterPath.lineTo( 0, 0 );
553 else if (
symbolName == QLatin1String(
"rectangle" ) )
555 mPainterPath.addRect( QRectF( -size.width() / 2.0, -size.height() / 2.0, size.width(), size.height() ) );
557 else if (
symbolName == QLatin1String(
"diamond" ) )
559 mPainterPath.moveTo( -size.width() / 2.0, 0 );
560 mPainterPath.lineTo( 0, size.height() / 2.0 );
561 mPainterPath.lineTo( size.width() / 2.0, 0 );
562 mPainterPath.lineTo( 0, -size.height() / 2.0 );
563 mPainterPath.lineTo( -size.width() / 2.0, 0 );
565 else if (
symbolName == QLatin1String(
"cross" ) )
567 mPainterPath.moveTo( 0, -size.height() / 2.0 );
568 mPainterPath.lineTo( 0, size.height() / 2.0 );
569 mPainterPath.moveTo( -size.width() / 2.0, 0 );
570 mPainterPath.lineTo( size.width() / 2.0, 0 );
572 else if (
symbolName == QLatin1String(
"triangle" ) )
574 mPainterPath.moveTo( 0, -size.height() / 2.0 );
575 mPainterPath.lineTo( -size.width() / 2.0, size.height() / 2.0 );
576 mPainterPath.lineTo( size.width() / 2.0, size.height() / 2.0 );
577 mPainterPath.lineTo( 0, -size.height() / 2.0 );
579 else if (
symbolName == QLatin1String(
"left_half_triangle" ) )
581 mPainterPath.moveTo( 0, size.height() / 2.0 );
582 mPainterPath.lineTo( size.width() / 2.0, size.height() / 2.0 );
583 mPainterPath.lineTo( 0, -size.height() / 2.0 );
584 mPainterPath.lineTo( 0, size.height() / 2.0 );
586 else if (
symbolName == QLatin1String(
"right_half_triangle" ) )
588 mPainterPath.moveTo( -size.width() / 2.0, size.height() / 2.0 );
589 mPainterPath.lineTo( 0, size.height() / 2.0 );
590 mPainterPath.lineTo( 0, -size.height() / 2.0 );
591 mPainterPath.lineTo( -size.width() / 2.0, size.height() / 2.0 );
598 mSymbolWidthUnit = unit;
599 mSymbolHeightUnit = unit;
600 mStrokeWidthUnit = unit;
606 if ( mSymbolWidthUnit != unit || mSymbolHeightUnit != unit || mStrokeWidthUnit != unit )
616 mSymbolWidthMapUnitScale = scale;
617 mSymbolHeightMapUnitScale = scale;
618 mStrokeWidthMapUnitScale = scale;
624 mSymbolWidthMapUnitScale == mSymbolHeightMapUnitScale &&
625 mSymbolHeightMapUnitScale == mStrokeWidthMapUnitScale )
627 return mSymbolWidthMapUnitScale;
634 QSizeF
size = calculateSize( context );
636 bool hasDataDefinedRotation =
false;
639 calculateOffsetAndRotation( context, size.width(), size.height(), hasDataDefinedRotation,
offset,
angle );
644 transform.translate( point.x() + offset.x(), point.y() + offset.y() );
647 transform.rotate( angle );
649 double penWidth = 0.0;
655 if ( exprVal.isValid() )
669 if ( exprVal.isValid() && exprVal.toString() == QLatin1String(
"no" ) )
678 QRectF symbolBounds = transform.mapRect( QRectF( -size.width() / 2.0,
679 -size.height() / 2.0,
684 symbolBounds.adjust( -penWidth / 2.0, -penWidth / 2.0,
685 penWidth / 2.0, penWidth / 2.0 );
702 symbolWidth *= mmMapUnitScaleFactor;
714 symbolHeight *= mmMapUnitScaleFactor;
739 QColor oc = mStrokeColor;
758 QPointF off( offsetX, offsetY );
761 double rotation = 0.0;
771 rotation = -rotation;
776 t.translate( shift.x() + offsetX, shift.y() + offsetY );
779 t.rotate( rotation );
781 double halfWidth = symbolWidth / 2.0;
782 double halfHeight = symbolHeight / 2.0;
784 if ( symbolName == QLatin1String(
"circle" ) )
788 QgsPoint pt( t.map( QPointF( 0, 0 ) ) );
795 double stepsize = 2 * M_PI / 40;
796 for (
int i = 0; i < 39; ++i )
798 double angle = stepsize * i;
799 double x = halfWidth * std::cos( angle );
800 double y = halfHeight * std::sin( angle );
801 line <<
QgsPoint( t.map( QPointF( x, y ) ) );
804 line << line.at( 0 );
806 if ( mBrush.style() != Qt::NoBrush )
808 if ( mPen.style() != Qt::NoPen )
809 e.
writePolyline( line, layerName, QStringLiteral(
"CONTINUOUS" ), oc, strokeWidth );
812 else if ( symbolName == QLatin1String(
"rectangle" ) )
815 p <<
QgsPoint( t.map( QPointF( -halfWidth, -halfHeight ) ) )
816 <<
QgsPoint( t.map( QPointF( halfWidth, -halfHeight ) ) )
817 <<
QgsPoint( t.map( QPointF( halfWidth, halfHeight ) ) )
818 <<
QgsPoint( t.map( QPointF( -halfWidth, halfHeight ) ) );
821 if ( mBrush.style() != Qt::NoBrush )
823 if ( mPen.style() != Qt::NoPen )
824 e.
writePolyline( p, layerName, QStringLiteral(
"CONTINUOUS" ), oc, strokeWidth );
827 else if ( symbolName == QLatin1String(
"cross" ) && mPen.style() != Qt::NoPen )
830 <<
QgsPoint( t.map( QPointF( -halfWidth, 0 ) ) )
831 <<
QgsPoint( t.map( QPointF( halfWidth, 0 ) ) ),
832 layerName, QStringLiteral(
"CONTINUOUS" ), oc,
strokeWidth );
834 <<
QgsPoint( t.map( QPointF( 0, halfHeight ) ) )
835 <<
QgsPoint( t.map( QPointF( 0, -halfHeight ) ) ),
836 layerName, QStringLiteral(
"CONTINUOUS" ), oc,
strokeWidth );
839 else if ( symbolName == QLatin1String(
"triangle" ) )
842 p <<
QgsPoint( t.map( QPointF( -halfWidth, -halfHeight ) ) )
843 <<
QgsPoint( t.map( QPointF( halfWidth, -halfHeight ) ) )
844 <<
QgsPoint( t.map( QPointF( 0, halfHeight ) ) );
846 if ( mBrush.style() != Qt::NoBrush )
848 if ( mPen.style() != Qt::NoPen )
849 e.
writePolyline( p, layerName, QStringLiteral(
"CONTINUOUS" ), oc, strokeWidth );
void setOffset(QPointF offset)
Sets the marker's offset, which is the horizontal and vertical displacement which the rendered marker...
static void wellKnownMarkerToSld(QDomDocument &doc, QDomElement &element, const QString &name, const QColor &color, const QColor &strokeColor, Qt::PenStyle strokeStyle, double strokeWidth=-1, double size=-1)
QgsMapUnitScale mapUnitScale() const override
QColor valueAsColor(int key, const QgsExpressionContext &context, const QColor &defaultColor=QColor(), bool *ok=nullptr) const
Calculates the current value of the property with the specified key and interprets it as a color...
void setOffsetUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the symbol's offset.
QString asExpression() const
Returns an expression string representing the state of the property, or an empty string if the proper...
void setStrokeWidthMapUnitScale(const QgsMapUnitScale &scale)
static QDomElement createVendorOptionElement(QDomDocument &doc, const QString &name, const QString &value)
QgsUnitTypes::RenderUnit outputUnit() const override
Returns the units to use for sizes and widths within the symbol layer.
bool isNull() const
Returns true if the geometry is null (ie, contains no underlying geometry accessible via geometry() )...
double valueAsDouble(int key, const QgsExpressionContext &context, double defaultValue=0.0, bool *ok=nullptr) const
Calculates the current value of the property with the specified key and interprets it as a double...
void writePolyline(const QgsPointSequence &line, const QString &layer, const QString &lineStyleName, const QColor &color, double width=-1)
Draw dxf primitives (LWPOLYLINE)
void setFillColor(const QColor &c) override
Set fill color.
void startRender(QgsSymbolRenderContext &context) override
double mLineAngle
Line rotation angle (see setLineAngle() for details)
QgsUnitTypes::RenderUnit mSizeUnit
Marker size unit.
static QPointF decodePoint(const QString &string)
Decodes a QSizeF from a string.
void copyPaintEffect(QgsSymbolLayer *destLayer) const
Copies paint effect of this layer to another symbol layer.
QString layerType() const override
Returns a string that represents this layer type.
static QgsSymbolLayer * create(const QgsStringMap &properties=QgsStringMap())
void setOutputUnit(QgsUnitTypes::RenderUnit unit) override
Sets the units to use for sizes and widths within the symbol layer.
static QString encodeMapUnitScale(const QgsMapUnitScale &mapUnitScale)
static void createDisplacementElement(QDomDocument &doc, QDomElement &element, QPointF offset)
A geometry is the spatial representation of a feature.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the symbol's offset.
void restoreOldDataDefinedProperties(const QgsStringMap &stringMap)
Restores older data defined properties from string map.
static double sizeInPixelsFromSldUom(const QString &uom, double size)
Returns the size scaled in pixels according to the uom attribute.
void setPenJoinStyle(Qt::PenJoinStyle style)
Set stroke join style.
QVariant value(const QgsExpressionContext &context, const QVariant &defaultValue=QVariant(), bool *ok=nullptr) const
Calculates the current value of the property, including any transforms which are set for the property...
QPointF mOffset
Marker offset.
void setSymbolWidthUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the symbol's width.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
static bool rotationFromSldElement(QDomElement &element, QString &rotationFunc)
void toSld(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const override
QColor strokeColor() const override
Get stroke color.
QMap< QString, QString > QgsStringMap
Rotation of symbol may be changed during rendering and symbol should not be cached.
bool qgsDoubleNear(double a, double b, double epsilon=4 *DBL_EPSILON)
Compare two doubles (but allow some difference)
static QString encodePoint(QPointF point)
Encodes a QPointF to a string.
Name, eg shape name for simple markers.
static Qt::PenJoinStyle decodePenJoinStyle(const QString &str)
void setStrokeWidth(double w)
bool isActive(int key) const override
Returns true if the collection contains an active property with the specified key.
void writePolygon(const QgsRingSequence &polygon, const QString &layer, const QString &hatchPattern, const QColor &color)
Draw dxf filled polygon (HATCH)
double mapRotation() const
Return current map rotation in degrees.
static QString encodeColor(const QColor &color)
virtual void setColor(const QColor &color)
The fill color.
QVariant value(int key, const QgsExpressionContext &context, const QVariant &defaultValue=QVariant()) const override
Returns the calculated value of the property with the specified key from within the collection...
void setOriginalValueVariable(const QVariant &value)
Sets the original value variable value for data defined symbology.
static QString encodePenStyle(Qt::PenStyle style)
Perform transforms between map coordinates and device coordinates.
static double rescaleUom(double size, QgsUnitTypes::RenderUnit unit, const QgsStringMap &props)
Rescales the given size based on the uomScale found in the props, if any is found, otherwise returns the value un-modified.
Qt::PenStyle strokeStyle() const
double angle() const
Returns the rotation angle for the marker, in degrees clockwise from north.
QgsUnitTypes::RenderUnit mOffsetUnit
Offset units.
A symbol layer for rendering objects with major and minor axis (e.g.
static QgsStringMap getVendorOptionList(QDomElement &element)
QgsStringMap properties() const override
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
double size() const
Returns the symbol size.
void writeSldMarker(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const override
Writes the symbol layer definition as a SLD XML element.
void stopRender(QgsSymbolRenderContext &context) override
void setSymbolName(const QString &name)
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the symbol layer's property collection, used for data defined overrides...
void setSize(double size)
Sets the symbol size.
void setHorizontalAnchorPoint(HorizontalAnchorPoint h)
Sets the horizontal anchor point for positioning the symbol.
void setStrokeWidthUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the symbol's stroke width.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the symbol's size.
virtual QColor color() const
The fill color.
static void createRotationElement(QDomDocument &doc, QDomElement &element, const QString &rotationFunc)
double mAngle
Marker rotation angle, in degrees clockwise from north.
void writeFilledCircle(const QString &layer, const QColor &color, const QgsPoint &pt, double radius)
Write filled circle (as hatch)
bool writeDxf(QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, QgsSymbolRenderContext &context, QPointF shift=QPointF(0.0, 0.0)) const override
write as DXF
static QgsSymbolLayer * createFromSld(QDomElement &element)
void setMapUnitScale(const QgsMapUnitScale &scale) override
void markerOffset(QgsSymbolRenderContext &context, double &offsetX, double &offsetY) const
Calculates the required marker offset, including both the symbol offset and any displacement required...
void setSymbolHeightMapUnitScale(const QgsMapUnitScale &scale)
QgsMapUnitScale mSizeMapUnitScale
Marker size map unit scale.
static Q_INVOKABLE QgsUnitTypes::RenderUnit decodeRenderUnit(const QString &string, bool *ok=nullptr)
Decodes a render unit from a string.
QgsGeometry geometry() const
Returns the geometry associated with this feature.
A store for object properties.
double symbolWidth() const
QgsRenderContext & renderContext()
Returns a reference to the context's render context.
QgsMapUnitScale mapUnitScale() const override
QRectF bounds(QPointF point, QgsSymbolRenderContext &context) override
Returns the approximate bounding box of the marker symbol layer, taking into account any data defined...
Point geometry type, with support for z-dimension and m-values.
static Qt::PenStyle decodePenStyle(const QString &str)
QgsWkbTypes::GeometryType type() const
Returns type of the geometry as a QgsWkbTypes::GeometryType.
void renderPoint(QPointF point, QgsSymbolRenderContext &context) override
Renders a marker at the specified point.
HorizontalAnchorPoint
Symbol horizontal anchor points.
VerticalAnchorPoint
Symbol vertical anchor points.
static void createGeometryElement(QDomDocument &doc, QDomElement &element, const QString &geomFunc)
static Q_INVOKABLE QString encodeUnit(QgsUnitTypes::DistanceUnit unit)
Encodes a distance unit to a string.
void setSymbolHeightUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the symbol's height.
QgsExpressionContext & expressionContext()
Gets the expression context.
QVector< QgsPoint > QgsPointSequence
QVector< QgsPointSequence > QgsRingSequence
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the symbol's size.
QString valueAsString(int key, const QgsExpressionContext &context, const QString &defaultString=QString(), bool *ok=nullptr) const
Calculates the current value of the property with the specified key and interprets it as a string...
Stroke style (eg solid, dashed)
double convertToPainterUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale()) const
Converts a size from the specified units to painter units (pixels).
QPainter * painter()
Returns the destination QPainter for the render operation.
const QgsMapToPixel & mapToPixel() const
void setStrokeStyle(Qt::PenStyle strokeStyle)
void setStrokeColor(const QColor &c) override
Set stroke color.
double symbolHeight() const
Struct for storing maximum and minimum scales for measurements in map units.
void setMapUnitScale(const QgsMapUnitScale &scale) override
double strokeWidth() const
void setSymbolHeight(double h)
const QgsFeature * feature() const
Current feature being rendered - may be null.
QgsUnitTypes::RenderUnit outputUnit() const override
Returns the units to use for sizes and widths within the symbol layer.
HorizontalAnchorPoint mHorizontalAnchorPoint
Horizontal anchor point.
static bool wellKnownMarkerFromSld(QDomElement &element, QString &name, QColor &color, QColor &strokeColor, Qt::PenStyle &strokeStyle, double &strokeWidth, double &size)
QString symbolName() const
void setAngle(double angle)
Sets the rotation angle for the marker.
static QgsMapUnitScale decodeMapUnitScale(const QString &str)
QColor fillColor() const override
Get fill color.
bool hasActiveProperties() const override
Returns true if the collection has any active properties, or false if all properties within the colle...
QgsMapUnitScale mOffsetMapUnitScale
Offset map unit scale.
VerticalAnchorPoint mVerticalAnchorPoint
Vertical anchor point.
QgsEllipseSymbolLayer * clone() const override
Shall be reimplemented by subclasses to create a deep copy of the instance.
void setSymbolWidth(double w)
static QPointF _rotatedOffset(QPointF offset, double angle)
Adjusts a marker offset to account for rotation.
QPointF offset() const
Returns the marker's offset, which is the horizontal and vertical displacement which the rendered mar...
void setOutputUnit(QgsUnitTypes::RenderUnit unit) override
Sets the units to use for sizes and widths within the symbol layer.
void setSymbolWidthMapUnitScale(const QgsMapUnitScale &scale)
static QString encodePenJoinStyle(Qt::PenJoinStyle style)
QgsPropertyCollection mDataDefinedProperties
bool isActive() const
Returns whether the property is currently active.
QgsProperty property(int key) const override
Returns a matching property from the collection, if one exists.
RenderUnit
Rendering size units.
static QColor decodeColor(const QString &str)
void copyDataDefinedProperties(QgsSymbolLayer *destLayer) const
Copies all data defined properties of this layer to another symbol layer.
void setVerticalAnchorPoint(VerticalAnchorPoint v)
Sets the vertical anchor point for positioning the symbol.
QgsSymbol::RenderHints renderHints() const
Returns the rendering hint flags for the symbol.
void startRender(QgsSymbolRenderContext &context) override