Seamly2D
Code documentation
vistoolinternalpath.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * *
3  * Copyright (C) 2017 Seamly, LLC *
4  * *
5  * https://github.com/fashionfreedom/seamly2d *
6  * *
7  ***************************************************************************
8  **
9  ** Seamly2D is free software: you can redistribute it and/or modify
10  ** it under the terms of the GNU General Public License as published by
11  ** the Free Software Foundation, either version 3 of the License, or
12  ** (at your option) any later version.
13  **
14  ** Seamly2D is distributed in the hope that it will be useful,
15  ** but WITHOUT ANY WARRANTY; without even the implied warranty of
16  ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  ** GNU General Public License for more details.
18  **
19  ** You should have received a copy of the GNU General Public License
20  ** along with Seamly2D. If not, see <http://www.gnu.org/licenses/>.
21  **
22  **************************************************************************
23 
24  ************************************************************************
25  **
26  ** @file
27  ** @author Roman Telezhynskyi <dismine(at)gmail.com>
28  ** @date 22 11, 2016
29  **
30  ** @brief
31  ** @copyright
32  ** This source code is part of the Valentine project, a pattern making
33  ** program, whose allow create and modeling patterns of clothing.
34  ** Copyright (C) 2016 Seamly2D project
35  ** <https://github.com/fashionfreedom/seamly2d> All Rights Reserved.
36  **
37  ** Seamly2D is free software: you can redistribute it and/or modify
38  ** it under the terms of the GNU General Public License as published by
39  ** the Free Software Foundation, either version 3 of the License, or
40  ** (at your option) any later version.
41  **
42  ** Seamly2D is distributed in the hope that it will be useful,
43  ** but WITHOUT ANY WARRANTY; without even the implied warranty of
44  ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
45  ** GNU General Public License for more details.
46  **
47  ** You should have received a copy of the GNU General Public License
48  ** along with Seamly2D. If not, see <http://www.gnu.org/licenses/>.
49  **
50  *************************************************************************/
51 
52 #include "vistoolinternalpath.h"
53 #include "../vwidgets/vsimplepoint.h"
54 #include "../vgeometry/vpointf.h"
55 #include "../vwidgets/scalesceneitems.h"
56 
57 #include <QGraphicsSceneMouseEvent>
58 
59 //---------------------------------------------------------------------------------------------------------------------
60 VisToolInternalPath::VisToolInternalPath(const VContainer *data, QGraphicsItem *parent)
61  : VisPath(data, parent),
62  m_points(),
63  m_line(nullptr),
64  m_path()
65 {
66  m_line = InitItem<VScaledLine>(supportColor, this);
67 }
68 
69 //---------------------------------------------------------------------------------------------------------------------
71 {
72  HideAllItems();
73 
74  if (m_path.CountNodes() > 0)
75  {
77  lineWeight, Qt::RoundCap);
78 
80 
81  for (int i = 0; i < nodes.size(); ++i)
82  {
83  VSimplePoint *point = GetPoint(static_cast<quint32>(i), supportColor);
84  point->setOnlyPoint(mode == Mode::Creation);
85  point->refreshPointGeometry(nodes.at(i));
86  point->setVisible(true);
87  }
88 
89  if (mode == Mode::Creation)
90  {
92  if (points.size() > 0)
93  {
94  DrawLine(m_line, QLineF(points.last(), Visualization::scenePos), supportColor,
95  lineWeight, Qt::DashLine);
96  }
97  }
98  }
99 }
100 
101 //---------------------------------------------------------------------------------------------------------------------
103 {
104  m_path = path;
105 }
106 
107 //---------------------------------------------------------------------------------------------------------------------
108 void VisToolInternalPath::mousePressEvent(QGraphicsSceneMouseEvent *event)
109 {
110  event->ignore();
111 }
112 
113 //---------------------------------------------------------------------------------------------------------------------
114 VSimplePoint *VisToolInternalPath::GetPoint(quint32 i, const QColor &color)
115 {
116  return VisPath::GetPoint(m_points, i, color);
117 }
118 
119 //---------------------------------------------------------------------------------------------------------------------
121 {
122  if (m_line)
123  {
124  m_line->setVisible(false);
125  }
126 
127  for (int i=0; i < m_points.size(); ++i)
128  {
129  if (QGraphicsEllipseItem *item = m_points.at(i))
130  {
131  item->setVisible(false);
132  }
133  }
134 }
The VContainer class container of all variables.
Definition: vcontainer.h:141
QVector< QPointF > PathPoints(const VContainer *data) const
Definition: vpiecepath.cpp:287
qint32 CountNodes() const
Definition: vpiecepath.cpp:209
QVector< VPointF > PathNodePoints(const VContainer *data, bool showExcluded=true) const
Definition: vpiecepath.cpp:328
Qt::PenStyle GetPenType() const
Definition: vpiecepath.cpp:263
QPainterPath PainterPath(const VContainer *data) const
Definition: vpiecepath.cpp:396
virtual void refreshPointGeometry(const VPointF &point)
void setOnlyPoint(bool value)
VSimplePoint * GetPoint(QVector< VSimplePoint * > &points, quint32 i, const QColor &color)
Definition: vispath.cpp:69
VSimplePoint * GetPoint(quint32 i, const QColor &color)
void SetPath(const VPiecePath &path)
virtual void RefreshGeometry() Q_DECL_OVERRIDE
VisToolInternalPath(const VContainer *data, QGraphicsItem *parent=nullptr)
QVector< VSimplePoint * > m_points
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE
QColor supportColor
QColor mainColor
Definition: visualization.h:99
const VContainer * data
Definition: visualization.h:97
void DrawPath(VCurvePathItem *pathItem, const QPainterPath &path, const QColor &color, Qt::PenStyle style=Qt::SolidLine, const qreal &weight=0.35, Qt::PenCapStyle cap=Qt::SquareCap)
QPointF scenePos
Definition: visualization.h:98
virtual void DrawLine(VScaledLine *lineItem, const QLineF &line, const QColor &color, const qreal &lineWeight, Qt::PenStyle style=Qt::SolidLine)
@ Creation