Maki
Formally verfied low-code orchestration
Loading...
Searching...
No Matches
edge_router.h
1#pragma once
2
3#include <QObject>
4#include <QPainterPath>
5#include <QPointF>
6
7#include "elements/node.h"
8#include "elements/transition.h"
9
10class EdgeRouter : public QObject
11{
12 Q_OBJECT
13public:
14 enum class Option
15 {
16 DIRECT = 0,
17 MANHATTAN,
18 CURVED,
19 OGDF,
20 END
21 };
22
23 EdgeRouter(QObject* parent = nullptr);
24 virtual ~EdgeRouter() = default;
25
26 Option option() const;
27 void setRouteOption(Option option);
28 virtual QPainterPath route(const QPointF& sourceRect, const QPointF& destinationRect, const QList<QRectF>& obstacleRects) const;
29 QHash<const TransitionItem*, QPainterPath> route(const QList<NodeItem*>& nodes, const QList<TransitionItem*>& transitions) const;
30
31 static QString optionToString(int option);
32 static QString optionToString(Option option);
33
34private:
35 Option mOption;
36
37 QPainterPath pathFromPoints(const QVector<QPointF>& points) const;
38 void appendPoint(QVector<QPointF>& points, const QPointF& point) const;
39
40 QPainterPath curvedRoute(const QPointF& start, const QPointF& end) const;
41 QVector<QPointF> directRoute(const QPointF& source, const QPointF& destination) const;
42 QVector<QPointF> manhattanRoute(const QPointF& source, const QPointF& destination) const;
43};