16 #ifndef QGSLINESYMBOLLAYER_H
17 #define QGSLINESYMBOLLAYER_H
19 #include "qgis_core.h"
30 #define DEFAULT_SIMPLELINE_COLOR QColor(35,35,35)
31 #define DEFAULT_SIMPLELINE_WIDTH DEFAULT_LINE_WIDTH
32 #define DEFAULT_SIMPLELINE_PENSTYLE Qt::SolidLine
33 #define DEFAULT_SIMPLELINE_JOINSTYLE Qt::BevelJoin
34 #define DEFAULT_SIMPLELINE_CAPSTYLE Qt::SquareCap
70 QString layerType() const override;
75 void renderPolygonStroke( const QPolygonF &points, const QVector<QPolygonF> *rings,
QgsSymbolRenderContext &context ) override;
76 QVariantMap properties() const override;
78 void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
79 QString ogrFeatureStyle(
double mmScaleFactor,
double mapUnitScaleFactor ) const override;
80 void setOutputUnit(
QgsUnitTypes::RenderUnit unit ) override;
82 bool usesMapUnits() const override;
86 QVector<qreal> dxfCustomDashPattern(
QgsUnitTypes::RenderUnit &unit ) const override;
87 Qt::PenStyle dxfPenStyle() const override;
91 bool canCauseArtifactsBetweenAdjacentTiles() const override;
98 Qt::PenStyle penStyle()
const {
return mPenStyle; }
462 bool alignDashPattern()
const;
473 void setAlignDashPattern(
bool enabled );
485 bool tweakDashPatternOnCorners()
const;
497 void setTweakDashPatternOnCorners(
bool enabled );
501 Qt::PenStyle mPenStyle = Qt::SolidLine;
507 bool mUseCustomDashPattern =
false;
511 double mDashPatternOffset = 0;
515 double mTrimDistanceStart = 0;
519 double mTrimDistanceEnd = 0;
524 QVector<qreal> mCustomDashVector;
526 bool mAlignDashPattern =
false;
527 bool mPatternCartographicTweakOnSharpCorners =
false;
529 bool mDrawInsidePolygon =
false;
532 void applyDataDefinedSymbology(
QgsSymbolRenderContext &context, QPen &pen, QPen &selPen,
double &offset );
533 void drawPathWithDashPatternTweaks( QPainter *painter,
const QPolygonF &points, QPen pen )
const;
538 #define DEFAULT_MARKERLINE_ROTATE true
539 #define DEFAULT_MARKERLINE_INTERVAL 3
576 double interval = 3 );
772 QVariantMap properties() const override;
773 bool canCauseArtifactsBetweenAdjacentTiles() const override;
783 virtual
void setSymbolLineAngle(
double angle ) = 0;
788 virtual
double symbolAngle() const = 0;
793 virtual
void setSymbolAngle(
double angle ) = 0;
807 virtual
void renderSymbol( const QPointF &point, const
QgsFeature *feature,
QgsRenderContext &context,
int layer = -1,
bool selected = false ) = 0;
822 void renderPolylineInterval( const QPolygonF &points,
QgsSymbolRenderContext &context,
double averageAngleOver );
824 void renderPolylineCentral( const QPolygonF &points,
QgsSymbolRenderContext &context,
double averageAngleOver );
825 double markerAngle( const QPolygonF &points,
bool isRing,
int vertex );
838 void renderOffsetVertexAlongLine( const QPolygonF &points,
int vertex,
double distance,
QgsSymbolRenderContext &context );
841 static
void collectOffsetPoints( const QVector< QPointF> &points,
842 QVector< QPointF> &dest,
double intervalPainterUnits,
double initialOffset,
double initialLag = 0,
843 int numberPointsRequired = -1 );
845 bool mRotateSymbols = true;
846 double mInterval = 3;
850 double mOffsetAlongLine = 0;
853 double mAverageAngleLength = 4;
857 friend class TestQgsMarkerLineSymbol;
898 QString layerType() const override;
902 void toSld( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override;
903 void setColor( const QColor &color ) override;
904 QColor color() const override;
907 void setWidth(
double width ) override;
908 double width() const override;
911 void setOutputUnit(
QgsUnitTypes::RenderUnit unit ) override;
912 bool usesMapUnits() const override;
913 QSet<QString> usedAttributes( const
QgsRenderContext &context ) const override;
914 bool hasDataDefinedProperties() const override;
923 Q_DECL_DEPRECATED
bool rotateMarker() const
SIP_DEPRECATED {
return rotateSymbols(); }
937 void setSymbolLineAngle(
double angle )
override;
938 double symbolAngle()
const override;
939 void setSymbolAngle(
double angle )
override;
940 void renderSymbol(
const QPointF &point,
const QgsFeature *feature,
QgsRenderContext &context,
int layer = -1,
bool selected =
false )
override;
972 double interval = 3 );
983 QString layerType() const override;
986 QVariantMap properties() const override;
988 void setColor( const QColor &color ) override;
989 QColor color() const override;
992 void setWidth(
double width ) override;
993 double width() const override;
996 void setOutputUnit(
QgsUnitTypes::RenderUnit unit ) override;
997 QSet<QString> usedAttributes( const
QgsRenderContext &context ) const override;
998 bool hasDataDefinedProperties() const override;
1000 bool usesMapUnits() const override;
1007 double hashAngle() const;
1014 void setHashAngle(
double angle );
1021 double hashLength()
const {
return mHashLength; }
1064 void setSymbolLineAngle(
double angle )
override;
1065 double symbolAngle()
const override;
1066 void setSymbolAngle(
double angle )
override;
1067 void renderSymbol(
const QPointF &point,
const QgsFeature *feature,
QgsRenderContext &context,
int layer = -1,
bool selected =
false )
override;
1074 std::unique_ptr< QgsLineSymbol > mHashSymbol;
1076 double mSymbolLineAngle = 0;
1077 double mSymbolAngle = 0;
1079 double mHashAngle = 0;
1080 double mHashLength = 3;
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...
Line symbol layer type which draws repeating line sections along a line feature.
void setHashLength(double length)
Sets the length of hash symbols.
QgsUnitTypes::RenderUnit hashLengthUnit() const
Returns the units for the length of hash symbols.
const QgsMapUnitScale & hashLengthMapUnitScale() const
Returns the map unit scale for the hash length.
void setHashLengthUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for the length of hash symbols.
void setHashLengthMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the hash length.
~QgsHashedLineSymbolLayer() override
virtual void renderPolygonStroke(const QPolygonF &points, const QVector< QPolygonF > *rings, QgsSymbolRenderContext &context)
Renders the line symbol layer along the outline of polygon, using the given render context.
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 outputUnit() const override
Returns the units to use for sizes and widths within the symbol layer.
double offset() const
Returns the line's offset.
A line symbol type, for rendering LineString and MultiLineString geometries.
Struct for storing maximum and minimum scales for measurements in map units.
Line symbol layer type which draws repeating marker symbols along a line feature.
std::unique_ptr< QgsMarkerSymbol > mMarker
~QgsMarkerLineSymbolLayer() override
Q_DECL_DEPRECATED void setRotateMarker(bool rotate)
Shall the marker be rotated.
A marker symbol type, for rendering Point and MultiPoint geometries.
A store for object properties.
Contains information about the context of a rendering operation.
A simple line symbol layer, which renders lines using a line in a variety of styles (e....
QgsUnitTypes::RenderUnit dashPatternOffsetUnit() const
Returns the units for the dash pattern offset.
void setDrawInsidePolygon(bool drawInsidePolygon)
Sets whether the line should only be drawn inside polygons, and any portion of the line which falls o...
void setPenCapStyle(Qt::PenCapStyle style)
Sets the pen cap style used to render the line (e.g.
const QgsMapUnitScale & trimDistanceStartMapUnitScale() const
Returns the map unit scale for the trim distance for the start of the line.
Qt::PenJoinStyle penJoinStyle() const
Returns the pen join style used to render the line (e.g.
void setDashPatternOffsetUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for the dash pattern offset.
QgsUnitTypes::RenderUnit trimDistanceStartUnit() const
Returns the unit for the trim distance for the start of the line.
void setCustomDashPatternMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for lengths used in the custom dash pattern.
QgsUnitTypes::RenderUnit customDashPatternUnit() const
Returns the units for lengths used in the custom dash pattern.
void setTrimDistanceEndMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the trim distance for the end of the line.
QVector< qreal > customDashVector() const
Returns the custom dash vector, which is the pattern of alternating drawn/skipped lengths used while ...
void setTrimDistanceEnd(double distance)
Sets the trim distance for the end of the line, which dictates a length from the end of the line at w...
void setCustomDashPatternUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for lengths used in the custom dash pattern.
double trimDistanceStart() const
Returns the trim distance for the start of the line, which dictates a length from the start of the li...
~QgsSimpleLineSymbolLayer() override
void setUseCustomDashPattern(bool b)
Sets whether the line uses a custom dash pattern.
double trimDistanceEnd() const
Returns the trim distance for the end of the line, which dictates a length from the end of the line a...
void setCustomDashVector(const QVector< qreal > &vector)
Sets the custom dash vector, which is the pattern of alternating drawn/skipped lengths used while ren...
bool useCustomDashPattern() const
Returns true if the line uses a custom dash pattern.
QgsUnitTypes::RenderUnit trimDistanceEndUnit() const
Returns the unit for the trim distance for the end of the line.
void setDashPatternOffset(double offset)
Sets the dash pattern offset, which dictates how far along the dash pattern the pattern should start ...
const QgsMapUnitScale & dashPatternOffsetMapUnitScale() const
Returns the map unit scale for the dash pattern offset value.
void setDashPatternOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the dash pattern offset.
void setPenStyle(Qt::PenStyle style)
Sets the pen style used to render the line (e.g.
void setPenJoinStyle(Qt::PenJoinStyle style)
Sets the pen join style used to render the line (e.g.
double dashPatternOffset() const
Returns the dash pattern offset, which dictates how far along the dash pattern the pattern should sta...
void setTrimDistanceStartUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for the trim distance for the start of the line.
void setTrimDistanceStartMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the trim distance for the start of the line.
void setTrimDistanceEndUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for the trim distance for the end of the line.
Qt::PenCapStyle penCapStyle() const
Returns the pen cap style used to render the line (e.g.
const QgsMapUnitScale & trimDistanceEndMapUnitScale() const
Returns the map unit scale for the trim distance for the end of the line.
const QgsMapUnitScale & customDashPatternMapUnitScale() const
Returns the map unit scale for lengths used in the custom dash pattern.
bool drawInsidePolygon() const
Returns true if the line should only be drawn inside polygons, and any portion of the line which fall...
void setTrimDistanceStart(double distance)
Sets the trim distance for the start of the line, which dictates a length from the start of the line ...
Property
Data definable properties.
Abstract base class for all rendered symbols.
Base class for templated line symbols, e.g.
bool rotateSymbols() const
Returns true if the repeating symbols be rotated to match their line segment orientation.
double averageAngleLength() const
Returns the length of line over which the line's direction is averaged when calculating individual sy...
const QgsMapUnitScale & intervalMapUnitScale() const
Returns the map unit scale for the interval between symbols.
void setRotateSymbols(bool rotate)
Sets whether the repeating symbols should be rotated to match their line segment orientation.
Placement placement() const
Returns the placement of the symbols.
Placement
Defines how/where the templated symbol should be placed on the line.
@ Vertex
Place symbols on every vertex in the line.
@ LastVertex
Place symbols on the last vertex in the line.
@ CentralPoint
Place symbols at the mid point of the line.
@ FirstVertex
Place symbols on the first vertex in the line.
@ SegmentCenter
Place symbols at the center of every line segment.
@ Interval
Place symbols at regular intervals.
@ CurvePoint
Place symbols at every virtual curve point in the line (used when rendering curved geometry types onl...
const QgsMapUnitScale & averageAngleMapUnitScale() const
Returns the map unit scale for the length over which the line's direction is averaged when calculatin...
double interval() const
Returns the interval between individual symbols.
void setAverageAngleMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the length over which the line's direction is averaged when calculating i...
double offsetAlongLine() const
Returns the offset along the line for the symbol placement.
~QgsTemplatedLineSymbolLayerBase() override
void setOffsetAlongLine(double offsetAlongLine)
Sets the the offset along the line for the symbol placement.
void setPlacement(Placement placement)
Sets the placement of the symbols.
void setOffsetAlongLineUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit used for calculating the offset along line for symbols.
void setInterval(double interval)
Sets the interval between individual symbols.
const QgsMapUnitScale & offsetAlongLineMapUnitScale() const
Returns the map unit scale used for calculating the offset in map units along line for symbols.
QgsUnitTypes::RenderUnit averageAngleUnit() const
Returns the unit for the length over which the line's direction is averaged when calculating individu...
QgsUnitTypes::RenderUnit offsetAlongLineUnit() const
Returns the unit used for calculating the offset along line for symbols.
QgsUnitTypes::RenderUnit intervalUnit() const
Returns the units for the interval between symbols.
void setAverageAngleUnit(QgsUnitTypes::RenderUnit unit)
Sets the unit for the length over which the line's direction is averaged when calculating individual ...
void setIntervalUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the interval between symbols.
void setIntervalMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the interval between symbols.
void setOffsetAlongLineMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale used for calculating the offset in map units 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...
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)
#define DEFAULT_MARKERLINE_INTERVAL
#define DEFAULT_SIMPLELINE_WIDTH
#define DEFAULT_MARKERLINE_ROTATE
#define DEFAULT_SIMPLELINE_PENSTYLE
#define DEFAULT_SIMPLELINE_JOINSTYLE
#define DEFAULT_SIMPLELINE_COLOR
#define DEFAULT_SIMPLELINE_CAPSTYLE