Skip to content

Commit 3e0d8d0

Browse files
committed
Add missing JavaScript libraries for cart pole visualization
1 parent 4851c19 commit 3e0d8d0

File tree

5 files changed

+907
-0
lines changed

5 files changed

+907
-0
lines changed
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
function neighbourhoodHighlight(params) {
2+
// console.log("in nieghbourhoodhighlight");
3+
allNodes = nodes.get({ returnType: "Object" });
4+
// originalNodes = JSON.parse(JSON.stringify(allNodes));
5+
// if something is selected:
6+
if (params.nodes.length > 0) {
7+
highlightActive = true;
8+
var i, j;
9+
var selectedNode = params.nodes[0];
10+
var degrees = 2;
11+
12+
// mark all nodes as hard to read.
13+
for (let nodeId in allNodes) {
14+
// nodeColors[nodeId] = allNodes[nodeId].color;
15+
allNodes[nodeId].color = "rgba(200,200,200,0.5)";
16+
if (allNodes[nodeId].hiddenLabel === undefined) {
17+
allNodes[nodeId].hiddenLabel = allNodes[nodeId].label;
18+
allNodes[nodeId].label = undefined;
19+
}
20+
}
21+
var connectedNodes = network.getConnectedNodes(selectedNode);
22+
var allConnectedNodes = [];
23+
24+
// get the second degree nodes
25+
for (i = 1; i < degrees; i++) {
26+
for (j = 0; j < connectedNodes.length; j++) {
27+
allConnectedNodes = allConnectedNodes.concat(
28+
network.getConnectedNodes(connectedNodes[j])
29+
);
30+
}
31+
}
32+
33+
// all second degree nodes get a different color and their label back
34+
for (i = 0; i < allConnectedNodes.length; i++) {
35+
// allNodes[allConnectedNodes[i]].color = "pink";
36+
allNodes[allConnectedNodes[i]].color = "rgba(150,150,150,0.75)";
37+
if (allNodes[allConnectedNodes[i]].hiddenLabel !== undefined) {
38+
allNodes[allConnectedNodes[i]].label =
39+
allNodes[allConnectedNodes[i]].hiddenLabel;
40+
allNodes[allConnectedNodes[i]].hiddenLabel = undefined;
41+
}
42+
}
43+
44+
// all first degree nodes get their own color and their label back
45+
for (i = 0; i < connectedNodes.length; i++) {
46+
// allNodes[connectedNodes[i]].color = undefined;
47+
allNodes[connectedNodes[i]].color = nodeColors[connectedNodes[i]];
48+
if (allNodes[connectedNodes[i]].hiddenLabel !== undefined) {
49+
allNodes[connectedNodes[i]].label =
50+
allNodes[connectedNodes[i]].hiddenLabel;
51+
allNodes[connectedNodes[i]].hiddenLabel = undefined;
52+
}
53+
}
54+
55+
// the main node gets its own color and its label back.
56+
// allNodes[selectedNode].color = undefined;
57+
allNodes[selectedNode].color = nodeColors[selectedNode];
58+
if (allNodes[selectedNode].hiddenLabel !== undefined) {
59+
allNodes[selectedNode].label = allNodes[selectedNode].hiddenLabel;
60+
allNodes[selectedNode].hiddenLabel = undefined;
61+
}
62+
} else if (highlightActive === true) {
63+
// console.log("highlightActive was true");
64+
// reset all nodes
65+
for (let nodeId in allNodes) {
66+
// allNodes[nodeId].color = "purple";
67+
allNodes[nodeId].color = nodeColors[nodeId];
68+
// delete allNodes[nodeId].color;
69+
if (allNodes[nodeId].hiddenLabel !== undefined) {
70+
allNodes[nodeId].label = allNodes[nodeId].hiddenLabel;
71+
allNodes[nodeId].hiddenLabel = undefined;
72+
}
73+
}
74+
highlightActive = false;
75+
}
76+
77+
// transform the object into an array
78+
var updateArray = [];
79+
if (params.nodes.length > 0) {
80+
for (let nodeId in allNodes) {
81+
if (allNodes.hasOwnProperty(nodeId)) {
82+
// console.log(allNodes[nodeId]);
83+
updateArray.push(allNodes[nodeId]);
84+
}
85+
}
86+
nodes.update(updateArray);
87+
} else {
88+
// console.log("Nothing was selected");
89+
for (let nodeId in allNodes) {
90+
if (allNodes.hasOwnProperty(nodeId)) {
91+
// console.log(allNodes[nodeId]);
92+
// allNodes[nodeId].color = {};
93+
updateArray.push(allNodes[nodeId]);
94+
}
95+
}
96+
nodes.update(updateArray);
97+
}
98+
}
99+
100+
function filterHighlight(params) {
101+
allNodes = nodes.get({ returnType: "Object" });
102+
// if something is selected:
103+
if (params.nodes.length > 0) {
104+
filterActive = true;
105+
let selectedNodes = params.nodes;
106+
107+
// hiding all nodes and saving the label
108+
for (let nodeId in allNodes) {
109+
allNodes[nodeId].hidden = true;
110+
if (allNodes[nodeId].savedLabel === undefined) {
111+
allNodes[nodeId].savedLabel = allNodes[nodeId].label;
112+
allNodes[nodeId].label = undefined;
113+
}
114+
}
115+
116+
for (let i=0; i < selectedNodes.length; i++) {
117+
allNodes[selectedNodes[i]].hidden = false;
118+
if (allNodes[selectedNodes[i]].savedLabel !== undefined) {
119+
allNodes[selectedNodes[i]].label = allNodes[selectedNodes[i]].savedLabel;
120+
allNodes[selectedNodes[i]].savedLabel = undefined;
121+
}
122+
}
123+
124+
} else if (filterActive === true) {
125+
// reset all nodes
126+
for (let nodeId in allNodes) {
127+
allNodes[nodeId].hidden = false;
128+
if (allNodes[nodeId].savedLabel !== undefined) {
129+
allNodes[nodeId].label = allNodes[nodeId].savedLabel;
130+
allNodes[nodeId].savedLabel = undefined;
131+
}
132+
}
133+
filterActive = false;
134+
}
135+
136+
// transform the object into an array
137+
var updateArray = [];
138+
if (params.nodes.length > 0) {
139+
for (let nodeId in allNodes) {
140+
if (allNodes.hasOwnProperty(nodeId)) {
141+
updateArray.push(allNodes[nodeId]);
142+
}
143+
}
144+
nodes.update(updateArray);
145+
} else {
146+
for (let nodeId in allNodes) {
147+
if (allNodes.hasOwnProperty(nodeId)) {
148+
updateArray.push(allNodes[nodeId]);
149+
}
150+
}
151+
nodes.update(updateArray);
152+
}
153+
}
154+
155+
function selectNode(nodes) {
156+
network.selectNodes(nodes);
157+
neighbourhoodHighlight({ nodes: nodes });
158+
return nodes;
159+
}
160+
161+
function selectNodes(nodes) {
162+
network.selectNodes(nodes);
163+
filterHighlight({nodes: nodes});
164+
return nodes;
165+
}
166+
167+
function highlightFilter(filter) {
168+
let selectedNodes = []
169+
let selectedProp = filter['property']
170+
if (filter['item'] === 'node') {
171+
let allNodes = nodes.get({ returnType: "Object" });
172+
for (let nodeId in allNodes) {
173+
if (allNodes[nodeId][selectedProp] && filter['value'].includes((allNodes[nodeId][selectedProp]).toString())) {
174+
selectedNodes.push(nodeId)
175+
}
176+
}
177+
}
178+
else if (filter['item'] === 'edge'){
179+
let allEdges = edges.get({returnType: 'object'});
180+
// check if the selected property exists for selected edge and select the nodes connected to the edge
181+
for (let edge in allEdges) {
182+
if (allEdges[edge][selectedProp] && filter['value'].includes((allEdges[edge][selectedProp]).toString())) {
183+
selectedNodes.push(allEdges[edge]['from'])
184+
selectedNodes.push(allEdges[edge]['to'])
185+
}
186+
}
187+
}
188+
selectNodes(selectedNodes)
189+
}

0 commit comments

Comments
 (0)