28 #include <QDomDocument> 29 #include <QDomElement> 32 : mSymbolName( QStringLiteral(
"circle" ) )
33 , mStrokeColor( QColor( 35, 35, 35 ) )
36 mPen.setColor( mStrokeColor );
37 mPen.setStyle( mStrokeStyle );
38 mPen.setJoinStyle( mPenJoinStyle );
41 mBrush.setStyle( Qt::SolidPattern );
49 if ( properties.contains( QStringLiteral(
"symbol_name" ) ) )
51 layer->
setSymbolName( properties[ QStringLiteral(
"symbol_name" )] );
53 if ( properties.contains( QStringLiteral(
"size" ) ) )
55 layer->
setSize( properties[QStringLiteral(
"size" )].toDouble() );
57 if ( properties.contains( QStringLiteral(
"size_unit" ) ) )
61 if ( properties.contains( QStringLiteral(
"size_map_unit_scale" ) ) )
65 if ( properties.contains( QStringLiteral(
"symbol_width" ) ) )
67 layer->
setSymbolWidth( properties[QStringLiteral(
"symbol_width" )].toDouble() );
69 if ( properties.contains( QStringLiteral(
"symbol_width_unit" ) ) )
73 if ( properties.contains( QStringLiteral(
"symbol_width_map_unit_scale" ) ) )
77 if ( properties.contains( QStringLiteral(
"symbol_height" ) ) )
79 layer->
setSymbolHeight( properties[QStringLiteral(
"symbol_height" )].toDouble() );
81 if ( properties.contains( QStringLiteral(
"symbol_height_unit" ) ) )
85 if ( properties.contains( QStringLiteral(
"symbol_height_map_unit_scale" ) ) )
89 if ( properties.contains( QStringLiteral(
"angle" ) ) )
91 layer->
setAngle( properties[QStringLiteral(
"angle" )].toDouble() );
93 if ( properties.contains( QStringLiteral(
"outline_style" ) ) )
97 else if ( properties.contains( QStringLiteral(
"line_style" ) ) )
101 if ( properties.contains( QStringLiteral(
"joinstyle" ) ) )
105 if ( properties.contains( QStringLiteral(
"outline_width" ) ) )
107 layer->
setStrokeWidth( properties[QStringLiteral(
"outline_width" )].toDouble() );
109 else if ( properties.contains( QStringLiteral(
"line_width" ) ) )
111 layer->
setStrokeWidth( properties[QStringLiteral(
"line_width" )].toDouble() );
113 if ( properties.contains( QStringLiteral(
"outline_width_unit" ) ) )
117 else if ( properties.contains( QStringLiteral(
"line_width_unit" ) ) )
121 if ( properties.contains( QStringLiteral(
"outline_width_map_unit_scale" ) ) )
125 if ( properties.contains( QStringLiteral(
"fill_color" ) ) )
130 else if ( properties.contains( QStringLiteral(
"color" ) ) )
134 if ( properties.contains( QStringLiteral(
"outline_color" ) ) )
138 else if ( properties.contains( QStringLiteral(
"line_color" ) ) )
142 if ( properties.contains( QStringLiteral(
"offset" ) ) )
146 if ( properties.contains( QStringLiteral(
"offset_unit" ) ) )
150 if ( properties.contains( QStringLiteral(
"offset_map_unit_scale" ) ) )
154 if ( properties.contains( QStringLiteral(
"horizontal_anchor_point" ) ) )
158 if ( properties.contains( QStringLiteral(
"vertical_anchor_point" ) ) )
171 double scaledWidth = mSymbolWidth;
172 double scaledHeight = mSymbolHeight;
179 if ( exprVal.isValid() )
181 double width = exprVal.toDouble( &ok );
185 mPen.setWidthF( width );
191 if ( exprVal.isValid() )
198 if ( exprVal.isValid() )
214 if ( exprVal.isValid() )
216 symbolName = exprVal.toString();
218 preparePath( symbolName, context, &scaledWidth, &scaledHeight, context.
feature() );
223 bool hasDataDefinedRotation =
false;
226 calculateOffsetAndRotation( context, scaledWidth, scaledHeight, hasDataDefinedRotation, offset, angle );
235 transform.translate( point.x() + offset.x(), point.y() + offset.y() );
238 transform.rotate( angle );
242 p->setBrush( mBrush );
243 p->drawPath( transform.map( mPainterPath ) );
250 bool &hasDataDefinedRotation,
252 double &
angle )
const 256 markerOffset( context, scaledWidth, scaledHeight, mSymbolWidthUnit, mSymbolHeightUnit, offsetX, offsetY, mSymbolWidthMapUnitScale, mSymbolHeightMapUnitScale );
257 offset = QPointF( offsetX, offsetY );
262 bool usingDataDefinedRotation =
false;
267 usingDataDefinedRotation = ok;
271 if ( hasDataDefinedRotation )
296 return QStringLiteral(
"EllipseMarker" );
304 preparePath( mSymbolName, context );
306 mPen.setColor( mStrokeColor );
307 mPen.setStyle( mStrokeStyle );
308 mPen.setJoinStyle( mPenJoinStyle );
310 mBrush.setColor(
mColor );
349 QDomElement symbolizerElem = doc.createElement( QStringLiteral(
"se:PointSymbolizer" ) );
350 if ( !props.value( QStringLiteral(
"uom" ), QString() ).isEmpty() )
351 symbolizerElem.setAttribute( QStringLiteral(
"uom" ), props.value( QStringLiteral(
"uom" ), QString() ) );
352 element.appendChild( symbolizerElem );
363 QDomElement graphicElem = doc.createElement( QStringLiteral(
"se:Graphic" ) );
364 element.appendChild( graphicElem );
373 QString angleFunc = props.
value( QStringLiteral(
"angle" ), QString() );
374 if ( angleFunc.isEmpty() )
376 if ( ddRotation && ddRotation.
isActive() )
381 angleFunc = QString::number(
mAngle );
383 else if ( ddRotation && ddRotation.
isActive() )
387 angleFunc = QStringLiteral(
"%1 + %2" ).arg( angleFunc, ddRotation.
asExpression() );
393 double angle = angleFunc.toDouble( &ok );
397 angleFunc = QStringLiteral(
"%1 + %2" ).arg( angleFunc ).arg(
mAngle );
402 angleFunc = QString::number( angle +
mAngle );
412 double widthHeightFactor = mSymbolWidth / mSymbolHeight;
414 graphicElem.appendChild( factorElem );
421 QDomElement graphicElem = element.firstChildElement( QStringLiteral(
"Graphic" ) );
422 if ( graphicElem.isNull() )
425 QString name = QStringLiteral(
"circle" );
428 double widthHeightFactor = 1.0;
432 for ( QgsStringMap::iterator it = vendorOptions.begin(); it != vendorOptions.end(); ++it )
434 if ( it.key() == QLatin1String(
"widthHeightFactor" ) )
437 double v = it.value().toDouble( &ok );
439 widthHeightFactor = v;
446 QString uom = element.attribute( QStringLiteral(
"uom" ) );
455 double d = angleFunc.toDouble( &ok );
476 map[QStringLiteral(
"symbol_name" )] = mSymbolName;
477 map[QStringLiteral(
"symbol_width" )] = QString::number( mSymbolWidth );
480 map[QStringLiteral(
"symbol_height" )] = QString::number( mSymbolHeight );
483 map[QStringLiteral(
"angle" )] = QString::number(
mAngle );
485 map[QStringLiteral(
"outline_width" )] = QString::number( mStrokeWidth );
494 map[QStringLiteral(
"size" )] = QString::number(
mSize );
502 QSizeF QgsEllipseSymbolLayer::calculateSize(
QgsSymbolRenderContext &context,
double *scaledWidth,
double *scaledHeight )
513 width = mSymbolWidth;
517 *scaledWidth = width;
529 height = mSymbolHeight;
533 *scaledHeight = height;
536 return QSizeF( width, height );
541 mPainterPath = QPainterPath();
543 QSizeF
size = calculateSize( context, scaledWidth, scaledHeight );
545 if (
symbolName == QLatin1String(
"circle" ) )
547 mPainterPath.addEllipse( QRectF( -size.width() / 2.0, -size.height() / 2.0, size.width(), size.height() ) );
549 else if (
symbolName == QLatin1String(
"semi_circle" ) )
551 mPainterPath.arcTo( -size.width() / 2.0, -size.height() / 2.0, size.width(), size.height(), 0, 180 );
552 mPainterPath.lineTo( 0, 0 );
554 else if (
symbolName == QLatin1String(
"rectangle" ) )
556 mPainterPath.addRect( QRectF( -size.width() / 2.0, -size.height() / 2.0, size.width(), size.height() ) );
558 else if (
symbolName == QLatin1String(
"diamond" ) )
560 mPainterPath.moveTo( -size.width() / 2.0, 0 );
561 mPainterPath.lineTo( 0, size.height() / 2.0 );
562 mPainterPath.lineTo( size.width() / 2.0, 0 );
563 mPainterPath.lineTo( 0, -size.height() / 2.0 );
564 mPainterPath.lineTo( -size.width() / 2.0, 0 );
566 else if (
symbolName == QLatin1String(
"cross" ) )
568 mPainterPath.moveTo( 0, -size.height() / 2.0 );
569 mPainterPath.lineTo( 0, size.height() / 2.0 );
570 mPainterPath.moveTo( -size.width() / 2.0, 0 );
571 mPainterPath.lineTo( size.width() / 2.0, 0 );
573 else if (
symbolName == QLatin1String(
"triangle" ) )
575 mPainterPath.moveTo( 0, -size.height() / 2.0 );
576 mPainterPath.lineTo( -size.width() / 2.0, size.height() / 2.0 );
577 mPainterPath.lineTo( size.width() / 2.0, size.height() / 2.0 );
578 mPainterPath.lineTo( 0, -size.height() / 2.0 );
580 else if (
symbolName == QLatin1String(
"left_half_triangle" ) )
582 mPainterPath.moveTo( 0, size.height() / 2.0 );
583 mPainterPath.lineTo( size.width() / 2.0, size.height() / 2.0 );
584 mPainterPath.lineTo( 0, -size.height() / 2.0 );
585 mPainterPath.lineTo( 0, size.height() / 2.0 );
587 else if (
symbolName == QLatin1String(
"right_half_triangle" ) )
589 mPainterPath.moveTo( -size.width() / 2.0, size.height() / 2.0 );
590 mPainterPath.lineTo( 0, size.height() / 2.0 );
591 mPainterPath.lineTo( 0, -size.height() / 2.0 );
592 mPainterPath.lineTo( -size.width() / 2.0, size.height() / 2.0 );
598 if ( mSymbolWidth >= mSymbolHeight )
600 mSymbolHeight = mSymbolHeight * size / mSymbolWidth;
605 mSymbolWidth = mSymbolWidth * size / mSymbolHeight;
606 mSymbolHeight =
size;
626 mSymbolWidthUnit = unit;
627 mSymbolHeightUnit = unit;
628 mStrokeWidthUnit = unit;
634 if ( mSymbolWidthUnit != unit || mSymbolHeightUnit != unit || mStrokeWidthUnit != unit )
644 mSymbolWidthMapUnitScale = scale;
645 mSymbolHeightMapUnitScale = scale;
646 mStrokeWidthMapUnitScale = scale;
652 mSymbolWidthMapUnitScale == mSymbolHeightMapUnitScale &&
653 mSymbolHeightMapUnitScale == mStrokeWidthMapUnitScale )
655 return mSymbolWidthMapUnitScale;
662 QSizeF
size = calculateSize( context );
664 bool hasDataDefinedRotation =
false;
667 calculateOffsetAndRotation( context, size.width(), size.height(), hasDataDefinedRotation,
offset,
angle );
672 transform.translate( point.x() + offset.x(), point.y() + offset.y() );
675 transform.rotate( angle );
677 double penWidth = 0.0;
683 if ( exprVal.isValid() )
697 if ( exprVal.isValid() && exprVal.toString() == QLatin1String(
"no" ) )
706 QRectF symbolBounds = transform.mapRect( QRectF( -size.width() / 2.0,
707 -size.height() / 2.0,
712 symbolBounds.adjust( -penWidth / 2.0, -penWidth / 2.0,
713 penWidth / 2.0, penWidth / 2.0 );
730 symbolWidth *= mmMapUnitScaleFactor;
742 symbolHeight *= mmMapUnitScaleFactor;
767 QColor oc = mStrokeColor;
786 QPointF off( offsetX, offsetY );
789 double rotation = 0.0;
799 rotation = -rotation;
804 t.translate( shift.x() + offsetX, shift.y() + offsetY );
807 t.rotate( rotation );
809 double halfWidth = symbolWidth / 2.0;
810 double halfHeight = symbolHeight / 2.0;
812 if ( symbolName == QLatin1String(
"circle" ) )
816 QgsPoint pt( t.map( QPointF( 0, 0 ) ) );
823 double stepsize = 2 * M_PI / 40;
824 for (
int i = 0; i < 39; ++i )
826 double angle = stepsize * i;
827 double x = halfWidth * std::cos( angle );
828 double y = halfHeight * std::sin( angle );
829 line <<
QgsPoint( t.map( QPointF( x, y ) ) );
832 line << line.at( 0 );
834 if ( mBrush.style() != Qt::NoBrush )
836 if ( mPen.style() != Qt::NoPen )
837 e.
writePolyline( line, layerName, QStringLiteral(
"CONTINUOUS" ), oc, strokeWidth );
840 else if ( symbolName == QLatin1String(
"rectangle" ) )
843 p <<
QgsPoint( t.map( QPointF( -halfWidth, -halfHeight ) ) )
844 <<
QgsPoint( t.map( QPointF( halfWidth, -halfHeight ) ) )
845 <<
QgsPoint( t.map( QPointF( halfWidth, halfHeight ) ) )
846 <<
QgsPoint( t.map( QPointF( -halfWidth, halfHeight ) ) );
849 if ( mBrush.style() != Qt::NoBrush )
851 if ( mPen.style() != Qt::NoPen )
852 e.
writePolyline( p, layerName, QStringLiteral(
"CONTINUOUS" ), oc, strokeWidth );
855 else if ( symbolName == QLatin1String(
"cross" ) && mPen.style() != Qt::NoPen )
858 <<
QgsPoint( t.map( QPointF( -halfWidth, 0 ) ) )
859 <<
QgsPoint( t.map( QPointF( halfWidth, 0 ) ) ),
860 layerName, QStringLiteral(
"CONTINUOUS" ), oc,
strokeWidth );
862 <<
QgsPoint( t.map( QPointF( 0, halfHeight ) ) )
863 <<
QgsPoint( t.map( QPointF( 0, -halfHeight ) ) ),
864 layerName, QStringLiteral(
"CONTINUOUS" ), oc,
strokeWidth );
867 else if ( symbolName == QLatin1String(
"triangle" ) )
870 p <<
QgsPoint( t.map( QPointF( -halfWidth, -halfHeight ) ) )
871 <<
QgsPoint( t.map( QPointF( halfWidth, -halfHeight ) ) )
872 <<
QgsPoint( t.map( QPointF( 0, halfHeight ) ) );
874 if ( mBrush.style() != Qt::NoBrush )
876 if ( mPen.style() != Qt::NoPen )
877 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.
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
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
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
Gets stroke color.
QMap< QString, QString > QgsStringMap
Rotation of symbol may be changed during rendering and symbol should not be cached.
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
Returns current map rotation in degrees.
static QString encodeColor(const QColor &color)
virtual void setColor(const QColor &color)
The fill color.
void setSize(double size) override
Sets the symbol size.
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 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.
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)
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
Returns the context's map to pixel transform, which transforms between map coordinates and device coo...
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
Returns the current feature being rendered.
virtual void setSize(double size)
Sets the symbol size.
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
Gets 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.
QgsWkbTypes::GeometryType type
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