Leap Motion: Move Cursorを参考に、 C#とLeapMotionを使ったカーソル操作のためのコードを、 なるべく簡素に記述します。
※VisualStudio2012を利用しています。
- LeapMotion用に、dllの参照などを設定しておきます。
LeapMotionをC#で使う方法を参照。 - Consoleアプリケーションを作成します。
- マウスを動かすためのWin32APIを呼び出すクラスを準備します。
- LeapMotionの動作の根幹となるクラスを作成します。
- 最後にMainを作成します。
- あとは実行すれば手でマウスカーソルが動かせるはずです。
using System.Runtime.InteropServices;
namespace MoveCursor
{
class MouseCursor
{
[DllImport("user32.dll")]
private static extern bool SetCursorPos(int x, int y);
public static void MoveCursor(int x, int y)
{
SetCursorPos(x, y);
}
}
}
using System;
using Leap;
namespace MoveCursor
{
class LeapListnerMin : Listener
{
public override void OnInit(Controller cntrlr)
{
Console.WriteLine("Initialized");
}
public override void OnConnect(Controller cntrlr)
{
Console.WriteLine("Connected");
}
public override void OnDisconnect(Controller cntrlr)
{
Console.WriteLine("Disconnected");
}
public override void OnExit(Controller cntrlr)
{
Console.WriteLine("Exited");
}
public override void OnFrame(Controller cntrl)
{
Frame currentFrame = cntrl.Frame();
// スクリーンに一番近い指を取得している。
Finger finger = currentFrame.Fingers[0];
Screen screen =
cntrl.CalibratedScreens.ClosestScreenHit(finger);
// スクリーンとLeapMotion上の指の位置を合成するために、
// 一度正規化している。
var xScreenIntersect = screen.Intersect(finger, true).x;
var yScreenIntersect = screen.Intersect(finger, true).y;
// 上記で取得した値を元に、指の位置をマウスの位置へ計算する。
// LeapMotionの場合、x軸・y軸の0は画面左下になるため、
// y座標をscreenHeitPixelsから差分を計算する必要がある。
var x = (int)(xScreenIntersect * screen.WidthPixels);
var y = (int)(screen.HeightPixels -
(yScreenIntersect * screen.HeightPixels));
MouseCursor.MoveCursor(x, y);
}
}
}
using System;
using Leap;
namespace MoveCursor
{
class Program
{
static void Main(string[] args)
{
Controller cntrl = new Controller();
LeapListnerMin leapListner = new LeapListnerMin();
cntrl.AddListener(leapListner);
Console.WriteLine("Press Enter to quit...");
Console.ReadLine();
cntrl.RemoveListener(leapListner);
cntrl.Dispose();
}
}
}
コメント
コメントを投稿