-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathGraph.pde
More file actions
123 lines (98 loc) · 2.35 KB
/
Graph.pde
File metadata and controls
123 lines (98 loc) · 2.35 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//Copyright 2005 Sean McCullough
//banksean at yahoo
public class Graph {
ArrayList nodes;
ArrayList edges;
HashMap edgesFrom;
HashMap edgesTo;
Node selectedNode = null;
Node dragNode = null;
Node hoverNode = null;
public Graph() {
nodes = new ArrayList();
edges = new ArrayList();
edgesFrom = new HashMap();
edgesTo = new HashMap();
}
public void setSelectedNode(Node n) {
selectedNode = n;
}
public Node getSelectedNode() {
return selectedNode;
}
public void setHoverNode(Node n) {
hoverNode = n;
}
public Node getHoverNode() {
return hoverNode;
}
public void setDragNode(Node n) {
dragNode = n;
}
public Node getDragNode() {
return dragNode;
}
public Vector3D getCentroid() {
float x = 0;
float y = 0;
for (int i=0; i<nodes.size(); i++) {
Node n = (Node)nodes.get(i);
x += n.getX();
y += n.getY();
}
return new Vector3D(x/nodes.size(), y/nodes.size(), 0);
}
public void addEdge(Edge e) {
edges.add(e);
ArrayList f = getEdgesFrom(e.getFrom());
f.add(e);
ArrayList t = getEdgesTo(e.getTo());
t.add(e);
e.setGraph(this);
}
public ArrayList getEdgesFrom(Node n) {
ArrayList f = (ArrayList)edgesFrom.get(n);
if (f == null) {
f = new ArrayList();
edgesFrom.put(n, f);
}
return f;
}
public ArrayList getEdgesTo(Node n) {
ArrayList t = (ArrayList)edgesTo.get(n);
if (t == null) {
t = new ArrayList();
edgesTo.put(n, t);
}
return t;
}
boolean isConnected(Node a, Node b) {
Iterator i;
i = edges.iterator();
while (i.hasNext()) {
Edge e = (Edge)i.next();
if (e.getFrom() == a && e.getTo() == b ||
e.getFrom() == b && e.getTo() == a) {
return true;
}
}
return false;
}
public void addNode(Node n) {
nodes.add(n);
n.setGraph(this);
}
public ArrayList getNodes() {
return nodes;
}
public void draw(float xOffset,float yOffset,float zoom,PFont font,boolean withText) {
for (int i=0; i<edges.size(); i++) {
Edge e = (Edge)edges.get(i);
e.draw(xOffset,yOffset,zoom);
}
for (int i=0; i<nodes.size(); i++) {
Node n = (Node)nodes.get(i);
n.draw(xOffset,yOffset,zoom,font,withText);
}
}
}