|
- var mouse = {};
- var interaction = {};
-
- interaction.raycaster = new THREE.Raycaster();
- interaction.xyplane = new THREE.Plane(new THREE.Vector3(0, 0, 1), 0);
-
- // Gets a reference to the node nearest to the mouse cursor
- interaction.nearestNode = function() {
- this.raycaster.setFromCamera(mouse, camera);
- for (var i = 0; i < nodeGeometry.vertices.length; ++i) {
- var v = nodeGeometry.vertices[i];
- if (this.raycaster.ray.distanceSqToPoint(v) < 0.01) {
- return i;
- }
- }
- return undefined;
- };
-
-
- // Find out: what is the mouse pointing at?
- interaction.checkIntersections = function() {
- var new_selection = nearestNode();
- if (new_selection != this.selection) {
- this.selection = new_selection;
- info.className = this.selection ? "visible" : "hidden";
- info.innerHTML = this.selection ? nodeGeometry.labels[new_selection] : info.innerHTML;
- render();
- }
- };
-
- // Update the mouse position tracker
- interaction.onMouseMove = function(event) {
- mouse.wasClick = false;
- mouse.absx = event.clientX;
- mouse.absy = event.clientY;
- mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
- mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
- //w = 200; //h = 15; //info.style.top = mouse.absy - h - 40 + "px"; //info.style.left = mouse.absx - w / 2 + "px"; //checkIntersections();
- };
-
- // Try to add a qubit at the current mouse position
- interaction.addQubitAtMouse = function(event) {
- this.raycaster.setFromCamera(mouse, camera);
- var intersection = this.raycaster.ray.intersectPlane(this.plane);
- intersection.x = Math.round(intersection.x);
- intersection.y = Math.round(intersection.y);
- abj.add_node(Object.keys(vops).length, {
- "position": intersection
- });
- updateScene();
- }
-
- interaction.bind = function() {
- var el = renderer.domElement;
- el.addEventListener("mousedown", this.onMouseDown);
- el.addEventListener("mouseup", this.onMouseDown);
- el.addEventListener("mousemove", this.onMouseMove);
- };
|