-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgraphLayout.h
107 lines (80 loc) · 2.87 KB
/
graphLayout.h
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
MIT License
Copyright (c) 2021 Ramesh Choudhary
*/
#ifndef GRAPH_LAYOUT_H
#define GRAPH_LAYOUT_H
#include<QRandomGenerator>
#include<QTimer>
class QGraphicsNodeItem;
class QGraphicsEdgeItem;
class View;
class Scene;
class GraphLayout:public QObject
{
Q_OBJECT
public:
enum EditingMode
{
NodeInsertion=Qt::UserRole+1,NodeRemoval,ConnectNode,DisconnectNode,NoEditing
};
static QList<QColor> colors;
GraphLayout(const QList<QList<bool>> & adjacencyMatrix,
Scene * scene,View * view ,QObject * parent=nullptr);
void loadAdjacencyMatrix(const QList<QList<bool>> & adjacencyMatrix,QStringList nodeLs);
void loadIncidenceMatrix(const QList<QList<int>> & incidenceMatrix,QStringList nodeLs);
void loadAdjacencyMatrix(const QString & adjacencyMatrix,QStringList nodeLs);
void loadIncidencMatrix(const QString & incidenceMatrix,QStringList nodeLs);
QList<QList<bool>>getAdjacenyMatrix();
QList<QList<int>> getIncidenceMatrix();
QString getAdjacenyMatrix_AsString(bool withBracket=false);
QString getIncidenceMatrix_AsString(bool withBracket=false);
QString getNodeName();
void insertNode(const QPointF& point);
void removeNode(QGraphicsNodeItem* node);
void connectNode(QGraphicsNodeItem * node1,QGraphicsNodeItem * node2);
void disconnectNode(QGraphicsNodeItem * node1,QGraphicsNodeItem * node2);
void clearLayout();
void startAnimation();
void stopAnimation();
void setFrameInterval(int value);
void setNodeRadius(uint size);
void setEdgeSize(uint size);
void setSpring_RestingLength(float value);
void setDRAG(float value);
void setMaxSpeed(int value);
void setCharge( int value);
void editingEvent(QPointF scenePos);
void setEditingMode(EditingMode mode);
void fitInView();
void exportLayoutAsImage(QString filePath);
private:
void balanceLayout();
void grabAnimationStateAndPause();
void resumeAnimationState();
void moveNodesBy(QPointF point);
bool hasEdge(int source,int destination) const;
QList<QList<bool>> incidenceToAdjacentMat(const QList<QList<int>> & inciDenceMat);
QList<QList<int>> adjacenceToIncidenceMat(const QList<QList<bool>> adjacenceMat );
QList<QList<bool>> adjMat_StringToNumeric(const QString & adjMat);
QList<QList<int>> inciMat_StringToNumeric(const QString & inciMat);
private:
QList<QGraphicsNodeItem * > nodes;
QList<QList<bool>> adjacencyMatrix;
int nodeRadius;
int edgePenSize;
Scene * scene;
View * view;
QTimer timer;
int colorCount=0;
float spring_RestingLength=100;
int charge = 5000;
float DRAG=0.005;
int maxSpeed=40;
int currentNodeIndexCount=0;
bool m_isAnimationRunning=false;
bool is_AnimationPaused=false;
EditingMode m_editingMode=NoEditing;
QGraphicsNodeItem * editingNodeHolder=nullptr;
};
#endif // GRAPH_LAYOUT_H