16 #ifndef QGSLINESYMBOLLAYER_H 17 #define QGSLINESYMBOLLAYER_H 19 #include "qgis_core.h" 28 #define DEFAULT_SIMPLELINE_COLOR QColor(35,35,35) 29 #define DEFAULT_SIMPLELINE_WIDTH DEFAULT_LINE_WIDTH 30 #define DEFAULT_SIMPLELINE_PENSTYLE Qt::SolidLine 31 #define DEFAULT_SIMPLELINE_JOINSTYLE Qt::BevelJoin 32 #define DEFAULT_SIMPLELINE_CAPSTYLE Qt::SquareCap 74 void toSld( QDomDocument &doc, QDomElement &element,
const QgsStringMap &props )
const override;
75 QString
ogrFeatureStyle(
double mmScaleFactor,
double mapUnitScaleFactor )
const override;
92 Qt::PenStyle
penStyle()
const {
return mPenStyle; }
221 Qt::PenStyle mPenStyle = Qt::SolidLine;
227 bool mUseCustomDashPattern =
false;
232 QVector<qreal> mCustomDashVector;
234 bool mDrawInsidePolygon =
false;
237 void applyDataDefinedSymbology(
QgsSymbolRenderContext &context, QPen &pen, QPen &selPen,
double &offset );
242 #define DEFAULT_MARKERLINE_ROTATE true 243 #define DEFAULT_MARKERLINE_INTERVAL 3 280 double interval = 3 );
484 virtual void setSymbolLineAngle(
double angle ) = 0;
489 virtual double symbolAngle()
const = 0;
494 virtual void setSymbolAngle(
double angle ) = 0;
508 virtual void renderSymbol(
const QPointF &point,
const QgsFeature *feature,
QgsRenderContext &context,
int layer = -1,
bool selected =
false ) = 0;
523 void renderPolylineInterval(
const QPolygonF &points,
QgsSymbolRenderContext &context,
double averageAngleOver );
525 void renderPolylineCentral(
const QPolygonF &points,
QgsSymbolRenderContext &context,
double averageAngleOver );
526 double markerAngle(
const QPolygonF &points,
bool isRing,
int vertex );
539 void renderOffsetVertexAlongLine(
const QPolygonF &points,
int vertex,
double distance,
QgsSymbolRenderContext &context );
542 static void collectOffsetPoints(
const QVector< QPointF> &points,
543 QVector< QPointF> &dest,
double intervalPainterUnits,
double initialOffset,
double initialLag = 0,
544 int numberPointsRequired = -1 );
546 bool mRotateSymbols =
true;
547 double mInterval = 3;
551 double mOffsetAlongLine = 0;
554 double mAverageAngleLength = 4;
558 friend class TestQgsMarkerLineSymbol;
601 void toSld( QDomDocument &doc, QDomElement &element,
const QgsStringMap &props )
const override;
602 void setColor(
const QColor &color )
override;
603 QColor
color()
const override;
606 void setWidth(
double width )
override;
607 double width()
const override;
668 double interval = 3 );
682 void setColor(
const QColor &color )
override;
683 QColor
color()
const override;
686 void setWidth(
double width )
override;
687 double width()
const override;
700 double hashAngle()
const;
707 void setHashAngle(
double angle );
765 std::unique_ptr< QgsLineSymbol > mHashSymbol;
767 double mSymbolLineAngle = 0;
768 double mSymbolAngle = 0;
770 double mHashAngle = 0;
771 double mHashLength = 3;
Class for parsing and evaluation of expressions (formerly called "search strings").
void setOffsetAlongLine(double offsetAlongLine)
Sets the the offset along the line for the symbol placement.
double hashLength() const
Returns the length of hash symbols.
virtual QVector< qreal > dxfCustomDashPattern(QgsUnitTypes::RenderUnit &unit) const
Gets dash pattern.
QgsUnitTypes::RenderUnit customDashPatternUnit() const
Returns the units for lengths used in the custom dash pattern.
Place symbols on the first vertex in the line.
void setMapUnitScale(const QgsMapUnitScale &scale) override
virtual QString ogrFeatureStyle(double mmScaleFactor, double mapUnitScaleFactor) const
void setPlacement(Placement placement)
Sets the placement of the symbols.
Abstract base class for all rendered symbols.
void setUseCustomDashPattern(bool b)
Sets whether the line uses a custom dash pattern.
virtual QgsSymbol * subSymbol()
Returns the symbol's sub symbol, if present.
virtual double dxfOffset(const QgsDxfExport &e, QgsSymbolRenderContext &context) const
Gets offset.
Q_DECL_DEPRECATED void setRotateMarker(bool rotate)
Shall the marker be rotated.
virtual void setWidth(double width)
Sets the width of the line symbol layer.
A simple line symbol layer, which renders lines using a line in a variety of styles (e...
double averageAngleLength() const
Returns the length of line over which the line's direction is averaged when calculating individual sy...
virtual void setSymbolLineAngle(double angle)=0
Sets the line angle modification for the symbol's angle.
#define DEFAULT_MARKERLINE_INTERVAL
const QgsMapUnitScale & hashLengthMapUnitScale() const
Returns the map unit scale for the hash length.
QgsUnitTypes::RenderUnit averageAngleUnit() const
Returns the unit for the length over which the line's direction is averaged when calculating individu...
#define DEFAULT_SIMPLELINE_JOINSTYLE
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Place symbols on every vertex in the line.
const QgsMapUnitScale & averageAngleMapUnitScale() const
Returns the map unit scale for the length over which the line's direction is averaged when calculatin...
virtual QgsStringMap properties() const =0
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
QgsUnitTypes::RenderUnit intervalUnit() const
Returns the units for the interval between symbols.
double interval() const
Returns the interval between individual symbols.
double dxfWidth(const QgsDxfExport &e, QgsSymbolRenderContext &context) const override
Gets line width.
QMap< QString, QString > QgsStringMap
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)
void setInterval(double interval)
Sets the interval between individual symbols.
virtual double width() const
Returns the estimated width for the line symbol layer.
virtual void renderPolyline(const QPolygonF &points, QgsSymbolRenderContext &context)=0
Renders the line symbol layer along the line joining points, using the given render context...
Place symbols at every virtual curve point in the line (used when rendering curved geometry types onl...
void setCustomDashPatternUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for lengths used in the custom dash pattern.
virtual bool hasDataDefinedProperties() const
Returns true if the symbol layer (or any of its sub-symbols) contains data defined properties...
virtual void setColor(const QColor &color)
The fill color.
QgsStringMap properties() const override
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
Place symbols at the center of every line segment.
void setAverageAngleUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for the length over which the line's direction is averaged when calculating individual ...
std::unique_ptr< QgsMarkerSymbol > mMarker
virtual bool setSubSymbol(QgsSymbol *symbol)
Sets layer's subsymbol. takes ownership of the passed symbol.
void setOffsetAlongLineMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale used for calculating the offset in map units along line for symbols...
void setIntervalUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the interval between symbols.
QgsUnitTypes::RenderUnit outputUnit() const override
Returns the units to use for sizes and widths within the symbol layer.
QVector< qreal > customDashVector() const
Returns the custom dash vector, which is the pattern of alternating drawn/skipped lengths used while ...
#define DEFAULT_SIMPLELINE_CAPSTYLE
void setHashLengthMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the hash length.
Line symbol layer type which draws repeating line sections along a line feature.
virtual QgsSymbolLayer * clone() const =0
Shall be reimplemented by subclasses to create a deep copy of the instance.
#define DEFAULT_SIMPLELINE_PENSTYLE
virtual QColor color() const
The fill color.
void setRotateSymbols(bool rotate)
Sets whether the repeating symbols should be rotated to match their line segment orientation.
virtual double symbolAngle() const =0
Returns the symbol's current angle, in degrees clockwise.
#define DEFAULT_SIMPLELINE_COLOR
QgsUnitTypes::RenderUnit offsetAlongLineUnit() const
Returns the unit used for calculating the offset along line for symbols.
Qt::PenJoinStyle penJoinStyle() const
Returns the pen join style used to render the line (e.g.
bool useCustomDashPattern() const
Returns true if the line uses a custom dash pattern.
Base class for templated line symbols, e.g.
Q_DECL_DEPRECATED bool rotateMarker() const
Shall the marker be rotated.
A store for object properties.
const QgsMapUnitScale & offsetAlongLineMapUnitScale() const
Returns the map unit scale used for calculating the offset in map units along line for symbols...
void setPenStyle(Qt::PenStyle style)
Sets the pen style used to render the line (e.g.
virtual double estimateMaxBleed(const QgsRenderContext &context) const
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape when ...
void setHashLengthUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for the length of hash symbols.
Place symbols at regular intervals.
void setPenCapStyle(Qt::PenCapStyle style)
Sets the pen cap style used to render the line (e.g.
virtual Qt::PenStyle dxfPenStyle() const
Gets pen style.
#define DEFAULT_SIMPLELINE_WIDTH
virtual void toSld(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const
virtual QSet< QString > usedAttributes(const QgsRenderContext &context) const
Returns the set of attributes referenced by the layer.
Contains information about the context of a rendering operation.
const QgsMapUnitScale & intervalMapUnitScale() const
Returns the map unit scale for the interval between symbols.
bool drawInsidePolygon() const
Returns true if the line should only be drawn inside polygons, and any portion of the line which fall...
Line symbol layer type which draws repeating marker symbols along a line feature. ...
Struct for storing maximum and minimum scales for measurements in map units.
virtual void stopRender(QgsSymbolRenderContext &context)=0
void setCustomDashPatternMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for lengths used in the custom dash pattern.
Placement
Defines how/where the templated symbol should be placed on the line.
virtual QColor dxfColor(QgsSymbolRenderContext &context) const
Gets color.
void setIntervalMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the interval between symbols.
Qt::PenStyle penStyle() const
Returns the pen style used to render the line (e.g.
virtual void setSymbolAngle(double angle)=0
Sets the symbol's angle, in degrees clockwise.
void setDrawInsidePolygon(bool drawInsidePolygon)
Sets whether the line should only be drawn inside polygons, and any portion of the line which falls o...
void setCustomDashVector(const QVector< qreal > &vector)
Sets the custom dash vector, which is the pattern of alternating drawn/skipped lengths used while ren...
virtual void renderPolygonStroke(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolRenderContext &context)
Renders the line symbol layer along the outline of polygon, using the given render context...
Placement placement() const
Returns the placement of the symbols.
Place symbols on the last vertex in the line.
const QgsMapUnitScale & customDashPatternMapUnitScale() const
Returns the map unit scale for lengths used in the custom dash pattern.
void setOffsetAlongLineUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit used for calculating the offset along line for symbols.
void setAverageAngleLength(double length)
Sets the length of line over which the line's direction is averaged when calculating individual symbo...
Place symbols at the mid point of the line.
void setAverageAngleMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the length over which the line's direction is averaged when calculating i...
void setHashLength(double length)
Sets the length of hash symbols.
Qt::PenCapStyle penCapStyle() const
Returns the pen cap style used to render the line (e.g.
#define DEFAULT_MARKERLINE_ROTATE
double offsetAlongLine() const
Returns the offset along the line for the symbol placement.
virtual void renderSymbol(const QPointF &point, const QgsFeature *feature, QgsRenderContext &context, int layer=-1, bool selected=false)=0
Renders the templated symbol at the specified point, using the given render context.
QgsMapUnitScale mapUnitScale() const override
void setOutputUnit(QgsUnitTypes::RenderUnit unit) override
Sets the units to use for sizes and widths within the symbol layer.
Property
Data definable properties.
RenderUnit
Rendering size units.
virtual void setDataDefinedProperty(Property key, const QgsProperty &property)
Sets a data defined property for the layer.
void setPenJoinStyle(Qt::PenJoinStyle style)
Sets the pen join style used to render the line (e.g.
QgsUnitTypes::RenderUnit hashLengthUnit() const
Returns the units for the length of hash symbols.
virtual void startRender(QgsSymbolRenderContext &context)=0
virtual QString layerType() const =0
Returns a string that represents this layer type.
bool rotateSymbols() const
Returns true if the repeating symbols be rotated to match their line segment orientation.