1 /************************************************************************
2  **
3  **  @file
4  **  @author Roman Telezhynskyi <dismine(at)gmail.com>
5  **  @date   16 5, 2017
6  **
7  **  @brief
8  **  @copyright
9  **  This source code is part of the Valentina project, a pattern making
10  **  program, whose allow create and modeling patterns of clothing.
11  **  Copyright (C) 2017 Valentina project
12  **  <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
13  **
14  **  Valentina is free software: you can redistribute it and/or modify
15  **  it under the terms of the GNU General Public License as published by
16  **  the Free Software Foundation, either version 3 of the License, or
17  **  (at your option) any later version.
18  **
19  **  Valentina is distributed in the hope that it will be useful,
20  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
21  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  **  GNU General Public License for more details.
23  **
24  **  You should have received a copy of the GNU General Public License
25  **  along with Valentina.  If not, see <http://www.gnu.org/licenses/>.
26  **
27  *************************************************************************/
28 
29 #ifndef VCURVEPATHITEM_H
30 #define VCURVEPATHITEM_H
31 
32 #include <QGraphicsPathItem>
33 #include <QtGlobal>
34 
35 #include "../vmisc/def.h"
36 
37 class VCurvePathItem : public QGraphicsPathItem
38 {
39 public:
40     explicit VCurvePathItem(QGraphicsItem *parent = nullptr);
41     virtual ~VCurvePathItem() = default;
42 
43     virtual QPainterPath shape() const override;
44 
45     virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
46                        QWidget *widget = nullptr) override;
47 
type()48     virtual int  type() const override {return Type;}
49     enum { Type = UserType + static_cast<int>(Vis::CurvePathItem)};
50 
51     void SetDirectionArrows(const QVector<QPair<QLineF, QLineF>> &arrows);
52     void SetPoints(const QVector<QPointF> &points);
53     void SetWidth(qreal width);
54 protected:
55     virtual void ScalePenWidth();
56 private:
57     Q_DISABLE_COPY(VCurvePathItem)
58 
59     QVector<QPair<QLineF, QLineF>> m_directionArrows;
60     QVector<QPointF> m_points;
61     qreal m_defaultWidth;
62 };
63 
64 #endif // VCURVEPATHITEM_H
65