昨晚搗鼓完Leap的數據輸出,一看時間還早,寫完前一篇博文,後手就開始寫這個東西。團隊是做飛行模擬設備的,我就直接拿微軟模擬飛行來做個例子(模擬器接口部分不放開,主要看怎麼整合Leap應用到外圍)。測試視頻鏈接:http://player.youku.com/player.php/sid/XMTU1MTkwNzU4MA==/v.swf
public partial class Form1 : Form
{
FListener MyListener = new FListener();
Controller MyController = new Controller();
short PitchFS;//模擬器中的Pitch值
short RollFS;//模擬器中的Roll值
short YawFS;//模擬器中的Yaw值
public Form1()
{
InitializeComponent();
}
private void ConnectToLeap_Click(object sender, EventArgs e)
{
MyController.AddListener(MyListener);
try
{
//FSX 通道預位
DisConnectToLeap.Enabled = true;
ConnectToLeap.Enabled = false;
timer1.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void DisConnectToLeap_Click(object sender, EventArgs e)
{
MyController.RemoveListener(MyListener);
MyController.Dispose();
DisConnectToLeap.Enabled =false;
ConnectToLeap.Enabled = true;
timer1.Enabled = false;
//FSX 通道關閉
}
private void timer1_Tick(object sender, EventArgs e)
{
PitchFS = (short)(MyListener.PitchRaw / 90 * 16383);
RollFS = (short)(MyListener.RollRaw / 90 * 16383);
YawFS = (short)(MyListener.YawRaw / 90 * 16383);
textPitch.Text = ((short)(MyListener.PitchRaw / 90 * 16383)).ToString();
textRoll.Text = ((short)(MyListener.RollRaw / 90 * 16383)).ToString();
textYaw.Text = ((short)(MyListener.YawRaw / 90 * 16383)).ToString();
}
private void Form1_Load(object sender, EventArgs e)
{
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
}
}
以上是Form類中的代碼,與Leap提供的example幾乎一致。後面看一下Listener的代碼,我只取得了我需要的數據,剩下不需要的統統不要。
public class FListener : Listener
{
public float PitchRaw, RollRaw, YawRaw;
public override void OnInit(Controller arg0)
{
Console.WriteLine("Initialized.");
}
public override void OnConnect(Controller arg0)
{
Console.WriteLine("Connected.");
arg0.EnableGesture(Gesture.GestureType.TYPE_CIRCLE);
arg0.EnableGesture(Gesture.GestureType.TYPE_KEY_TAP);
arg0.EnableGesture(Gesture.GestureType.TYPE_SCREEN_TAP);
arg0.EnableGesture(Gesture.GestureType.TYPE_SWIPE);
}
public override void OnDisconnect(Controller arg0)
{
Console.WriteLine("Disconnected.");
}
public override void OnExit(Controller arg0)
{
Console.WriteLine("Exited");
}
public override void OnFrame(Controller arg0)
{
Frame frame = arg0.Frame();
foreach (Hand hand in frame.Hands)
{
Vector normal = hand.PalmNormal;
Vector direction = hand.Direction;
Console.WriteLine("Hand pitch: " + direction.Pitch * 180.0f / (float)Math.PI + " "
+ "roll: " + normal.Roll * 180.0f / (float)Math.PI + " "
+ "yaw: " + direction.Yaw * 180.0f / (float)Math.PI + " ");
PitchRaw = direction.Pitch * 180.0f / (float)Math.PI;
RollRaw = normal.Roll * 180.0f / (float)Math.PI;
YawRaw = direction.Yaw * 180.0f / (float)Math.PI;
}
}
}
這篇寫的比較簡單,沒有創新什麼東西,只是將第一篇的東西做了一個“東西”出來,後面將測試幾個手勢。