Skip to content

Commit 075e806

Browse files
committed
Improve connections drawing
1 parent fa1ec08 commit 075e806

3 files changed

Lines changed: 34 additions & 11 deletions

File tree

‎src/Connection.cpp‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
#include <iostream>
1010
#include <math.h>
1111

12-
#define DEBUG_DRAWING 1
13-
1412
Connection::
1513
Connection()
1614
//: _id(QUuid())

‎src/ConnectionGeometry.hpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class ConnectionGeometry
5252
inline
5353
QRectF boundingRect() const
5454
{
55-
double protectOvershooting = 20;
55+
double protectOvershooting = 200;
5656

5757
QPointF addon(_pointDiameter + protectOvershooting,
5858
_pointDiameter + protectOvershooting);

‎src/ConnectionPainter.hpp‎

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,50 @@
55

66
#include "ConnectionGeometry.hpp"
77

8+
//#define DEBUG_DRAWING 1
9+
810
class ConnectionPainter
911
{
1012
public:
1113
ConnectionPainter(ConnectionGeometry& connectionGeometry)
1214
: _connectionGeometry(connectionGeometry)
13-
{
14-
}
15+
{}
1516

1617
public:
18+
19+
inline
1720
void paint(QPainter* painter) const
1821
{
1922
QPointF const& source = _connectionGeometry.source();
20-
QPointF const& sink = _connectionGeometry.sink();
21-
double const lineWidth = _connectionGeometry.lineWidth();
23+
QPointF const& sink = _connectionGeometry.sink();
24+
25+
QPointF diff = (sink - source);
26+
27+
double xDistance = sink.x() - source.x();
28+
double distance = std::sqrt(QPointF::dotProduct(diff, diff));
29+
30+
double const defaultOffset = 200;
31+
32+
double const lineWidth = _connectionGeometry.lineWidth();
2233
double const pointDiameter = _connectionGeometry.pointDiameter();
2334

2435
double const ratio1 = 0.5;
25-
double const ratio2 = 1 - ratio1;
26-
QPointF c1(sink.x() * ratio2 + source.x() * ratio1, source.y());
27-
QPointF c2(sink.x() * ratio1 + source.x() * ratio2, sink.y());
36+
//double const ratio2 = 1 - ratio1;
37+
//QPointF c1(sink.x() * ratio2 + source.x() * ratio1, source.y());
38+
//QPointF c2(sink.x() * ratio1 + source.x() * ratio2, sink.y());
39+
40+
41+
double verticalOffset = 0;
42+
if (xDistance <= 0)
43+
{
44+
verticalOffset = - qMin(defaultOffset, std::abs(xDistance));
45+
}
46+
47+
48+
QPointF c1(source.x() + defaultOffset * ratio1, source.y() + 2 * verticalOffset);
49+
QPointF c2(sink.x() - defaultOffset * ratio1, sink.y() + verticalOffset);
50+
51+
2852

2953
#ifdef DEBUG_DRAWING
3054

@@ -40,7 +64,8 @@ class ConnectionPainter
4064
}
4165
#endif
4266

43-
QPen p;
67+
QPen p;
68+
4469
p.setWidth(lineWidth);
4570
p.setColor(QColor(Qt::cyan).darker());
4671
painter->setPen(p);

0 commit comments

Comments
 (0)