-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEdge.cpp
75 lines (60 loc) · 1.59 KB
/
Edge.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "Edge.h"
#include <QDebug>
#include "Socket.h"
#include "Node.h"
#include "GraphicsEdge.h"
#include "GraphicsNode.h"
#include "NodeScene.h"
Edge::Edge()
{
}
Edge::~Edge()
{
}
Edge::Edge(Socket *a, Socket *b) : A(a), B(b)
{
id = QUuid::createUuid().toString(QUuid::WithoutBraces);
A->addEdge(this);
if (B) B->addEdge(this);
}
void Edge::setRenderer(GraphicsEdge *gEdge) {
graphicsEdge = gEdge;
// graphicsEdge->setSource(A->getSocketGlobalPosition());
// graphicsEdge->setDest(B->getSocketGlobalPosition());
updateWorldPosition();
}
QJsonObject Edge::serialize()
{
QVariantMap map;
map.insert("id", id);
map.insert("start", A->id);
map.insert("end", B->id);
return QJsonObject::fromVariantMap(map);
}
Edge* Edge::deserialize(QJsonObject object, NodeScene *nodeScene)
{
id = object.value("id").toString();
QString startingSocketId = object.value("start").toString();
QString endingSocketId = object.value("end").toString();
A = nodeScene->sockets.value(startingSocketId);
B = nodeScene->sockets.value(endingSocketId);
A->addEdge(this);
B->addEdge(this);
return this;
}
GraphicsEdge *Edge::getRenderer() {
return graphicsEdge;
}
void Edge::updateWorldPosition()
{
if (A) {
source = A->getParent()->getRenderer()->pos().toPoint() + A->getSocketLocalPosition();
graphicsEdge->setSource(source);
}
if (B) {
dest = B->getParent()->getRenderer()->pos().toPoint() + B->getSocketLocalPosition();
graphicsEdge->setDest(dest);
} else {
graphicsEdge->setDest(source);
}
}