var graph = {}; graph.colors = ["red", "green"]; graph.prepare = function() { materials.prepare(); websocket.connect(graph.update); }; graph.center = function() { var middle = new THREE.Vector3(0, 0, 0); for (var i in abj.node) { middle = middle.add(abj.node[i].position); } middle = middle.multiplyScalar(1.0/abj.order()); return middle; }; graph.update = function(newState) { if (newState){abj.update(newState);} var gs = gui.scene.getObjectByName("graphstate"); if (gs){ gui.scene.remove(gs); } var geometry = new THREE.Geometry(); geometry.colors = []; for (var i in abj.node) { var color = graph.colors[abj.node[i].vop % graph.colors.length]; if (abj.node[i].color !== undefined){ color = abj.node[i].color; } geometry.vertices.push(abj.node[i].position); geometry.colors.push(new THREE.Color(color)); } graph.center(); gui.controls.target.copy(graph.center()); var edges = new THREE.Object3D(); var my_edges = abj.edgelist(); for (i = 0; i < my_edges.length; ++i) { var edge = my_edges[i]; var start = abj.node[edge[0]].position; var startpos = new THREE.Vector3(start.x, start.y, start.z); var end = abj.node[edge[1]].position; var endpos = new THREE.Vector3(end.x, end.y, end.z); var newEdge = materials.makeCurve(startpos, endpos); edges.add(newEdge); } if (editor.selection) { console.log(editor.selection); var node = editor.selection; if (Object.prototype.hasOwnProperty.call(abj.node, node)) { editor.grid.position.copy(abj.node[node].position); gui.controls.target.copy(abj.node[node].position); node_name.innerHTML = "Node " + node; node_data.className = "visible"; node_vop.innerHTML = "VOP: " + abj.node[node].vop; } else { editor.selection = undefined; node_data.className = "hidden"; } } else { node_data.className = "hidden"; } var particles = new THREE.Points(geometry, materials.qubit); var object = new THREE.Object3D(); object.name = "graphstate"; object.add(particles); object.add(edges); gui.scene.add(object); gui.render(); };