QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgslayoutitempolyline.h
Go to the documentation of this file.
1/***************************************************************************
2 qgslayoutitempolyline.h
3 begin : March 2016
4 copyright : (C) 2016 Paul Blottiere, Oslandia
5 email : paul dot blottiere at oslandia dot com
6 ***************************************************************************/
7
8/***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16
17#ifndef QGSLAYOUTITEMPOLYLINE_H
18#define QGSLAYOUTITEMPOLYLINE_H
19
20#include "qgis_core.h"
22#include <QGraphicsPathItem>
23#include "qgslogger.h"
24#include "qgslayout.h"
25
26class QgsLineSymbol;
27
33{
34 Q_OBJECT
35
36 public:
37
40 {
44 };
45
51
56 QgsLayoutItemPolyline( const QPolygonF &polyline, QgsLayout *layout );
57
63 static QgsLayoutItemPolyline *create( QgsLayout *layout ) SIP_FACTORY;
64
65 int type() const override;
66 QIcon icon() const override;
67 QString displayName() const override;
68 QPainterPath shape() const override;
69
74 QgsLineSymbol *symbol();
75
81 void setSymbol( QgsLineSymbol *symbol );
82
88 MarkerMode startMarker() const { return mStartMarker; }
89
95 void setStartMarker( MarkerMode mode );
96
102 MarkerMode endMarker() const { return mEndMarker; }
103
109 void setEndMarker( MarkerMode mode );
110
115 void setArrowHeadWidth( double width );
116
121 double arrowHeadWidth() const { return mArrowHeadWidth; }
122
128 void setStartSvgMarkerPath( const QString &path );
129
135 QString startSvgMarkerPath() const { return mStartMarkerFile; }
136
142 void setEndSvgMarkerPath( const QString &path );
143
149 QString endSvgMarkerPath() const { return mEndMarkerFile; }
150
156 QColor arrowHeadStrokeColor() const { return mArrowHeadStrokeColor; }
157
163 void setArrowHeadStrokeColor( const QColor &color );
164
170 QColor arrowHeadFillColor() const { return mArrowHeadFillColor; }
171
177 void setArrowHeadFillColor( const QColor &color );
178
184 void setArrowHeadStrokeWidth( double width );
185
191 double arrowHeadStrokeWidth() const { return mArrowHeadStrokeWidth; }
192
193 bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
194
195 protected:
196
197 bool _addNode( int indexPoint, QPointF newPoint, double radius ) override;
198 bool _removeNode( int nodeIndex ) override;
199 void _draw( QgsLayoutItemRenderContext &context, const QStyleOptionGraphicsItem *itemStyle = nullptr ) override;
200 void _readXmlStyle( const QDomElement &elmt, const QgsReadWriteContext &context ) override;
201 void _writeXmlStyle( QDomDocument &doc, QDomElement &elmt, const QgsReadWriteContext &context ) const override;
202 bool writePropertiesToElement( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const override;
203 bool readPropertiesFromElement( const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context ) override;
204
205 protected slots:
206
207 void updateBoundingRect() override;
208
209 private:
210
212 std::unique_ptr<QgsLineSymbol> mPolylineStyleSymbol;
213
215 MarkerMode mStartMarker = NoMarker;
217 MarkerMode mEndMarker = NoMarker;
218
220 double mArrowHeadWidth = 4.0;
221
223 double mStartArrowHeadHeight = 0.0;
224
226 double mEndArrowHeadHeight = 0.0;
227
229 QString mStartMarkerFile;
230
232 QString mEndMarkerFile;
233
235 double mArrowHeadStrokeWidth = 1.0;
236
237 QColor mArrowHeadStrokeColor = Qt::black;
238 QColor mArrowHeadFillColor = Qt::black;
239
241 void createDefaultPolylineStyleSymbol();
242
247 void refreshSymbol();
248
249 void drawStartMarker( QPainter *painter );
250 void drawEndMarker( QPainter *painter );
251
252 void drawArrow( QPainter *painter, QPointF center, double angle );
253
254 void updateMarkerSvgSizes();
255
265 static void drawArrowHead( QPainter *p, double x, double y, double angle, double arrowHeadWidth );
266 void drawSvgMarker( QPainter *p, QPointF point, double angle, const QString &markerPath, double height ) const;
267
268 double computeMarkerMargin() const;
269
270 friend class TestQgsLayoutPolyline;
272
273};
274
275#endif // QGSLAYOUTITEMPOLYLINE_H
276
QgsCompositionConverter class converts a QGIS 2.x composition to a QGIS 3.x layout.
Layout item for node based polyline shapes.
double arrowHeadStrokeWidth() const
Returns the pen width in millimeters for the stroke of the arrow head.
QString startSvgMarkerPath() const
Returns the path the an SVG marker drawn at the start of the line.
QString endSvgMarkerPath() const
Returns the path the an SVG marker drawn at the end of the line.
QColor arrowHeadFillColor() const
Returns the color used to fill the arrow head.
MarkerMode endMarker() const
Returns the end marker mode, which controls what marker is drawn at the end of the line.
MarkerMode
Vertex marker mode.
@ ArrowHead
Show arrow marker.
@ SvgMarker
Show SVG marker.
@ NoMarker
Don't show marker.
~QgsLayoutItemPolyline() override
QColor arrowHeadStrokeColor() const
Returns the color used to draw the stroke around the the arrow head.
MarkerMode startMarker() const
Returns the start marker mode, which controls what marker is drawn at the start of the line.
double arrowHeadWidth() const
Returns the width of line arrow heads in mm.
Contains settings and helpers relating to a render of a QgsLayoutItem.
Definition: qgslayoutitem.h:43
virtual bool accept(QgsStyleEntityVisitorInterface *visitor) const
Accepts the specified style entity visitor, causing it to visit all style entities associated with th...
virtual QIcon icon() const
Returns the item's icon.
int type() const override
Returns a unique graphics item type identifier.
virtual QString displayName() const
Gets item display name.
An abstract layout item that provides generic methods for node based shapes such as polygon or polyli...
virtual void updateBoundingRect()
Called when the bounding rect of the item should recalculated.
virtual bool _removeNode(int nodeIndex)=0
Method called in removeNode.
virtual void _writeXmlStyle(QDomDocument &doc, QDomElement &elmt, const QgsReadWriteContext &context) const =0
Method called in writeXml.
bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context) override
Sets item state from a DOM element.
bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const override
Stores item state within an XML DOM element.
virtual void _readXmlStyle(const QDomElement &elmt, const QgsReadWriteContext &context)=0
Method called in readXml.
virtual void _draw(QgsLayoutItemRenderContext &context, const QStyleOptionGraphicsItem *itemStyle=nullptr)=0
Method called in paint.
virtual bool _addNode(int nodeIndex, QPointF newNode, double radius)=0
Method called in addNode.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition: qgslayout.h:49
A line symbol type, for rendering LineString and MultiLineString geometries.
Definition: qgslinesymbol.h:30
The class is used as a container of context for various read/write operations on other objects.
An interface for classes which can visit style entity (e.g.
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)
Definition: MathUtils.cpp:716
#define SIP_FACTORY
Definition: qgis_sip.h:76