QGIS API Documentation  3.4.15-Madeira (e83d02e274)
qgslayoutitemnodeitem.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgslayoutitemnodeitem.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 QGSLAYOUTITEMNODEITEM_H
18 #define QGSLAYOUTITEMNODEITEM_H
19 
20 #include "qgis_core.h"
21 #include "qgslayoutitem.h"
22 
29 class CORE_EXPORT QgsLayoutNodesItem: public QgsLayoutItem
30 {
31  Q_OBJECT
32 
33  public:
34 
39  void setNodes( const QPolygonF &nodes );
40 
45  QPolygonF nodes() const { return mPolygon; }
46 
55  bool addNode( QPointF point, bool checkArea = true, double radius = 10 );
56 
60  void setDisplayNodes( bool display = true ) { mDrawNodes = display; }
61 
67  bool moveNode( int index, QPointF node );
68 
77  int nodeAtPosition( QPointF point, bool searchInRadius = true, double radius = 10 ) const;
78 
85  bool nodePosition( int index, QPointF &position ) const;
86 
90  bool removeNode( int index );
91 
93  int nodesSize() const { return mPolygon.size(); }
94 
98  bool setSelectedNode( int index );
99 
103  int selectedNode() const { return mSelectedNode; }
104 
108  void deselectNode() { mSelectedNode = -1; }
109 
110  // Depending on the symbol style, the bounding rectangle can be larger than the shape
111  QRectF boundingRect() const override;
112 
113  // Reimplement estimatedFrameBleed, since frames on shapes are drawn using symbology
114  // rather than the item's pen
115  double estimatedFrameBleed() const override;
116 
117  protected:
118 
122  QgsLayoutNodesItem( QgsLayout *layout );
123 
127  QgsLayoutNodesItem( const QPolygonF &polygon, QgsLayout *layout );
128 
129  void draw( QgsLayoutItemRenderContext &context ) override;
130 
131  bool writePropertiesToElement( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const override;
132  bool readPropertiesFromElement( const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context ) override;
133 
135  QPolygonF mPolygon;
136 
138  double mMaxSymbolBleed = 0.0;
139 
141  virtual bool _addNode( int nodeIndex, QPointF newNode, double radius ) = 0;
142 
144  virtual bool _removeNode( int nodeIndex ) = 0;
145 
147  virtual void _draw( QgsLayoutItemRenderContext &context, const QStyleOptionGraphicsItem *itemStyle = nullptr ) = 0;
148 
150  virtual void _readXmlStyle( const QDomElement &elmt, const QgsReadWriteContext &context ) = 0;
151 
153  virtual void _writeXmlStyle( QDomDocument &doc, QDomElement &elmt, const QgsReadWriteContext &context ) const = 0;
154 
159  void rescaleToFitBoundingBox();
160 
162  double computeDistance( QPointF pt1, QPointF pt2 ) const;
163 
165  void updateSceneRect();
166 
169 
170  protected slots:
171 
176  virtual void updateBoundingRect();
177 
178  private:
179 
180  void init();
181 
183  int mSelectedNode = -1;
184 
188  bool mDrawNodes = false;
189 
191  void drawNodes( QgsLayoutItemRenderContext &context ) const;
192  void drawSelectedNode( QgsLayoutItemRenderContext &context ) const;
193 
194 };
195 
196 #endif // QGSLAYOUTITEMNODEITEM_H
QPolygonF nodes() const
Returns the nodes the shape consists of.
The class is used as a container of context for various read/write operations on other objects...
Base class for graphical items within a QgsLayout.
QRectF mCurrentRectangle
Current bounding rectangle of shape.
An abstract layout item that provides generic methods for node based shapes such as polygon or polyli...
virtual bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const
Stores item state within an XML DOM element.
QPolygonF mPolygon
Shape's nodes.
virtual bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context)
Sets item state from a DOM element.
void deselectNode()
Deselects any selected nodes.
int selectedNode() const
Returns the currently selected node, or -1 if no node is selected.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition: qgslayout.h:49
Contains settings and helpers relating to a render of a QgsLayoutItem.
Definition: qgslayoutitem.h:43
virtual double estimatedFrameBleed() const
Returns the estimated amount the item's frame bleeds outside the item's actual rectangle.
virtual void draw(QgsLayoutItemRenderContext &context)=0
Draws the item's contents using the specified item render context.
int nodesSize() const
Returns the number of nodes in the shape.
void setDisplayNodes(bool display=true)
Set whether the item's nodes should be displayed.