UNPKG

leapmotion-ts

Version:

TypeScript framework for Leap Motion.

123 lines (107 loc) 5.41 kB
import Leap = require('../build/leapmotionts-2.2.4'); class DOMVisualizerInterface implements Leap.Listener { private controller:Leap.Controller; private fingers:number[] = []; private spheres:number[] = []; constructor() { this.controller = new Leap.Controller(); this.controller.setListener( this ); } public onInit( controller:Leap.Controller ) { } public onConnect( controller:Leap.Controller ) { } public onDisconnect( controller:Leap.Controller ) { } public onExit( controller:Leap.Controller ) { } public onFrame( controller:Leap.Controller, frame:Leap.Frame ) { var fingerIds:boolean[] = []; var handIds:boolean[] = []; if (frame.hands === undefined ) { var handsLength = 0 } else { var handsLength = frame.hands.length; } for (var handId:number = 0, handCount:number = handsLength; handId != handCount; handId++) { var hand:Leap.Hand = frame.hands[handId]; var posX:number = (hand.palmPosition.x*3); var posY:number = (hand.palmPosition.z*3)-200; var posZ:number = (hand.palmPosition.y*3)-400; var rotX:number = (hand.rotation.xBasis.z*90); var rotY:number = (hand.rotation.xBasis.y*90); var rotZ:number = (hand.rotation.xBasis.x*90); var sphere:number = this.spheres[hand.id]; if (!sphere) { var sphereDiv:HTMLDivElement = <HTMLDivElement>document.getElementById("sphere").cloneNode(true); sphereDiv.setAttribute('id',hand.id.toString()); sphereDiv.style.backgroundColor='#'+Math.floor(Math.random()*16777215).toString(16); document.getElementById('scene').appendChild(sphereDiv); this.spheres[hand.id] = hand.id; } else { var sphereDiv:HTMLDivElement = <HTMLDivElement>document.getElementById(hand.id.toString()); if (typeof(sphereDiv) != 'undefined' && sphereDiv != null) { this.moveSphere(sphereDiv, posX, posY, posZ, rotX, rotY, rotZ); } } handIds[hand.id] = true; } for (var handIdSphere in this.spheres) { if (!handIds[handIdSphere]) { var sphereDiv:HTMLDivElement = <HTMLDivElement>document.getElementById(String(this.spheres[handIdSphere])); sphereDiv.parentNode.removeChild(sphereDiv); delete this.spheres[handIdSphere]; } } for (var pointableId:number = 0, pointableCount:number = frame.pointables.length; pointableId != pointableCount; pointableId++) { var pointable:Leap.Pointable = frame.pointables[pointableId]; var posX:number = (pointable.tipPosition.x*3); var posY:number = (pointable.tipPosition.z*3)-200; var posZ:number = (pointable.tipPosition.y*3)-400; var dirX:number = -(pointable.direction.y*90); var dirY:number = -(pointable.direction.z*90); var dirZ:number = (pointable.direction.x*90); var finger:number = this.fingers[pointable.id]; if (!finger) { var fingerDiv:HTMLDivElement = <HTMLDivElement>document.getElementById("finger").cloneNode(true); fingerDiv.setAttribute('id',pointable.id.toString()); fingerDiv.style.backgroundColor='#'+Math.floor(Math.random()*16777215).toString(16); document.getElementById('scene').appendChild(fingerDiv); this.fingers[pointable.id] = pointable.id; } else { var fingerDiv:HTMLDivElement = <HTMLDivElement>document.getElementById(pointable.id.toString()); if (typeof(fingerDiv) != 'undefined' && fingerDiv != null) { this.moveFinger(fingerDiv, posX, posY, posZ, dirX, dirY, dirZ); } } fingerIds[pointable.id] = true; } for (var fingerId in this.fingers) { if (!fingerIds[fingerId]) { var fingerDiv:HTMLDivElement = <HTMLDivElement>document.getElementById(String(this.fingers[fingerId])); fingerDiv.parentNode.removeChild(fingerDiv); delete this.fingers[fingerId]; } } document.getElementById('showHands').addEventListener('mousedown', function() { document.getElementById('app').setAttribute('class','show-hands'); }, false); document.getElementById('hideHands').addEventListener('mousedown', function() { document.getElementById('app').setAttribute('class',''); }, false); } private moveFinger(finger:HTMLDivElement, posX:number, posY:number, posZ:number, dirX:number, dirY:number, dirZ:number) { finger.style["webkitTransform"] = "translateX("+posX+"px) translateY("+posY+"px) translateZ("+posZ+"px) rotateX("+dirX+"deg) rotateY(0deg) rotateZ("+dirZ+"deg)"; } private moveSphere(sphere:HTMLDivElement, posX:number, posY:number, posZ:number, rotX:number, rotY:number, rotZ:number) { sphere.style["webkitTransform"] = "translateX("+posX+"px) translateY("+posY+"px) translateZ("+posZ+"px) rotateX("+rotX+"deg) rotateY(0deg) rotateZ(0deg)"; } } new DOMVisualizerInterface();