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(); } } }
コメント
コメントを投稿