HAL
circle_separated_net.cpp
Go to the documentation of this file.
2 
4 
5 #include <QPainter>
6 #include <QPen>
7 #include <QStyleOptionGraphicsItem>
8 
9 namespace hal
10 {
11  qreal CircleSeparatedNet::sWireLength;
12  qreal CircleSeparatedNet::sCircleOffset;
13  qreal CircleSeparatedNet::sRadius;
14 
16  {
17  sWireLength = 26;
18  sCircleOffset = 0;
19  sRadius = 3;
20  }
21 
23  {
24  }
25 
27  {
28  Q_UNUSED(widget);
29 
30  if (sLod < graph_widget_constants::sEparatedNetMinLod)
31  return;
32 
33  QColor color = penColor(option->state);
34  color.setAlphaF(sAlpha);
35 
36  sPen.setColor(color);
37  painter->setPen(sPen);
38 
39  if (mFillIcon)
40  {
41  sBrush.setColor(color);
43  painter->setBrush(sBrush);
44  }
45 
46  const bool original_antialiasing = painter->renderHints() & QPainter::Antialiasing;
47  const Qt::PenStyle original_pen_style = sPen.style();
48 
49  for (const QPointF& position : mInputPositions)
50  {
51  QPointF to(position.x() - sWireLength, position.y());
52  painter->drawLine(position, to);
53  painter->setRenderHint(QPainter::Antialiasing, true);
54  sPen.setStyle(Qt::PenStyle::SolidLine);
55  painter->setPen(sPen);
56  painter->drawEllipse(QPointF(to.x() - sCircleOffset, to.y()), sRadius, sRadius);
57  sPen.setStyle(original_pen_style);
58  painter->setPen(sPen);
59  painter->setRenderHint(QPainter::Antialiasing, original_antialiasing);
60  }
61 
62  for (const QPointF& position : mOutputPositions)
63  {
64  QPointF to(position.x() + sWireLength, position.y());
65  painter->drawLine(position, to);
66  painter->setRenderHint(QPainter::Antialiasing, true);
67  sPen.setStyle(Qt::PenStyle::SolidLine);
68  painter->setPen(sPen);
69  painter->drawEllipse(QPointF(to.x() + sWireLength + sCircleOffset, to.y()), sRadius, sRadius);
70  sPen.setStyle(original_pen_style);
71  painter->setPen(sPen);
72  painter->setRenderHint(QPainter::Antialiasing, original_antialiasing);
73  }
74 
76  painter->setBrush(sBrush);
77 
78  #ifdef HAL_DEBUG_GUI_GRAPH_WIDGET
79  bool original_cosmetic = sPen.isCosmetic();
80  sPen.setCosmetic(true);
82  painter->setPen(sPen);
83  painter->setRenderHint(QPainter::Antialiasing, true);
84  painter->drawPath(mShape);
85  painter->setRenderHint(QPainter::Antialiasing, original_antialiasing);
86  sPen.setCosmetic(original_cosmetic);
87  #endif
88  }
89 
90  void CircleSeparatedNet::addInput(const QPointF& scene_position)
91  {
92  QPointF mapped_position = mapFromScene(scene_position);
93  mInputPositions.append(mapped_position);
94 
95  const qreal half_of_shape_width = sShapeWidth / 2;
96 
97  QPointF point(mapped_position.x() - sWireLength - half_of_shape_width, mapped_position.y() - half_of_shape_width);
98 
99  mShape.moveTo(point);
100  point.setX(point.x() + sWireLength + sShapeWidth);
101  mShape.lineTo(point);
102  point.setY(point.y() + sShapeWidth);
103  mShape.lineTo(point);
104  point.setX(point.x() - sWireLength - sShapeWidth);
105  mShape.lineTo(point);
107 
108  point.setX(mapped_position.x() - sWireLength - sCircleOffset);
109  point.setY(mapped_position.y());
110  const qreal radius = sRadius + half_of_shape_width;
111 
112  mShape.addEllipse(point, radius, radius);
113  }
114 
115  void CircleSeparatedNet::addOutput(const QPointF& scene_position)
116  {
117  QPointF mapped_position = mapFromScene(scene_position);
118  mOutputPositions.append(mapped_position);
119 
120  const qreal half_of_shape_width = sShapeWidth / 2;
121 
122  QPointF point(mapped_position.x() - half_of_shape_width, mapped_position.y() - half_of_shape_width);
123 
124  mShape.moveTo(point);
125  point.setX(point.x() + sWireLength + sShapeWidth);
126  mShape.lineTo(point);
127  point.setY(point.y() + sShapeWidth);
128  mShape.lineTo(point);
129  point.setX(point.x() - sWireLength - sShapeWidth);
130  mShape.lineTo(point);
132 
133  point.setX(mapped_position.x() + sWireLength + sCircleOffset);
134  point.setY(mapped_position.y());
135  const qreal radius = sRadius + half_of_shape_width;
136 
137  mShape.addEllipse(point, radius, radius);
138  }
139 
141  {
142  return sWireLength + sCircleOffset + sRadius + sLineWidth / 2;
143  }
144 
146  {
147  return sWireLength + sCircleOffset + sRadius + sLineWidth / 2;
148  }
149 }
qreal inputWidth() const override
void addOutput(const QPointF &scene_position) override
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
void addInput(const QPointF &scene_position) override
qreal outputWidth() const override
QColor penColor(QStyle::State state, const QColor &colorHint=QColor()) const
static qreal sLod
Definition: graphics_item.h:93
QPainterPath mShape
Definition: graphics_net.h:101
static qreal sLineWidth
Definition: graphics_net.h:94
static QPen sPen
Definition: graphics_net.h:97
static QBrush sBrush
Definition: graphics_net.h:98
static qreal sShapeWidth
Definition: graphics_net.h:95
Qt::BrushStyle mBrushStyle
Definition: graphics_net.h:107
Definition: net.h:58
Abstract base class for separated nets (e.g. ArrowSeparatedNet)
QVector< QPointF > mInputPositions
QVector< QPointF > mOutputPositions
S to(const T &str)
n
Definition: test.py:6
option(PL_GUI "PL_GUI" ON) if(PL_GUI OR BUILD_ALL_PLUGINS) cmake_minimum_required(VERSION 3.1.0) if(APPLE AND CMAKE_HOST_APPLE AND NOT Qt5_DIR) set(Qt5_DIR "/usr/local/opt/qt@5/lib/cmake") endif(APPLE AND CMAKE_HOST_APPLE AND NOT Qt5_DIR) find_package(Qt5 COMPONENTS Core REQUIRED) find_package(Qt5 COMPONENTS Widgets REQUIRED) if(Qt5Widgets_FOUND) message(VERBOSE "Qt5Widgets_INCLUDE_DIRS
Definition: CMakeLists.txt:1
void setColor(const QColor &color)
void setStyle(Qt::BrushStyle style)
void setAlphaF(qreal alpha)
QPointF mapFromScene(const QPointF &point) const const
void drawEllipse(const QRectF &rectangle)
void drawLine(const QLineF &line)
void drawPath(const QPainterPath &path)
QPainter::RenderHints renderHints() const const
void setBrush(const QBrush &brush)
void setPen(const QColor &color)
void setRenderHint(QPainter::RenderHint hint, bool on)
void addEllipse(const QRectF &boundingRectangle)
void closeSubpath()
void lineTo(const QPointF &endPoint)
void moveTo(const QPointF &point)
bool isCosmetic() const const
void setColor(const QColor &color)
void setCosmetic(bool cosmetic)
void setStyle(Qt::PenStyle style)
Qt::PenStyle style() const const
void setX(qreal x)
void setY(qreal y)
qreal x() const const
qreal y() const const
PenStyle
void append(const T &value)