Как получить положение пальцев в Leap Motion с помощью C#

Я хочу получить положение пальцев в движении Leap с помощью С#. Я новичок в контроллере движения прыжка. Поэтому я не смог найти пример кода для определения положения пальцев, но я попытался придумать какой-нибудь код. Я думаю, что в нем много ошибок. Итак, как получить положение пальцев в Leap Motion с помощью C#?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Leap;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form, ILeapEventDelegate
{


    private Controller controller;
    private LeapEventListener listener;
    public Form1()
    {
        InitializeComponent();

        this.controller = new Controller();
        this.listener = new LeapEventListener(this);
        controller.AddListener(listener);
    }


    delegate void LeapEventDelegate(string EventName);
    public void LeapEventNotification(string EventName)
    {
        if (!this.InvokeRequired)
        {
            switch (EventName)
            {
                case "onInit":
                    MessageBox.Show("onInit");
                    break;
                case "onConnect":
                    MessageBox.Show("onConnect");
                    break;
                case "onFrame":
                    MessageBox.Show("onFrame");
                    break;
            }
        }
        else
        {
  BeginInvoke(new LeapEventDelegate(LeapEventNotification), new object[] {
  EventName });   
         }
    }
    private void Form1_Load(object sender, EventArgs e)
    {

    }
    }


   public interface ILeapEventDelegate
   {
    void LeapEventNotification(string EventName);
    }

    public class LeapEventListener : Listener
   {
    ILeapEventDelegate eventDelegate;

    public LeapEventListener(ILeapEventDelegate delegateObject)
    {
        this.eventDelegate = delegateObject;
    }
    public override void OnInit(Controller controller)
    {
        this.eventDelegate.LeapEventNotification("onInit");
    }
    public override void OnConnect(Controller controller)
    {
        this.eventDelegate.LeapEventNotification("onConnect");
    }
    public override void OnFrame(Controller controller)
    {
        this.eventDelegate.LeapEventNotification("onFrame");
    }
    public override void OnExit(Controller controller)
    {
        this.eventDelegate.LeapEventNotification("onExit");
    }
    public override void OnDisconnect(Controller controller)
    {
        this.eventDelegate.LeapEventNotification("onDisconnect");
    }
     } 
    }

person Ashan Nuwaneth    schedule 31.03.2016    source источник
comment
Это поможет показать ваши усилия, вставив код в ваш вопрос.   -  person Mixxiphoid    schedule 31.03.2016
comment
Спасибо за совет # Mixxiphoid   -  person Ashan Nuwaneth    schedule 31.03.2016


Ответы (1)


Ваш код выглядит так, как будто он взят из примера документации. Однако вы пропустили фактические обработчики событий, поэтому ничего не произойдет.

В связанном примере вы увидите, что есть функция newFrameHandler. Вы можете изменить это, чтобы получить доступ к позициям пальцев в объекте кадра, который является снимком отслеживаемых рук в определенный момент времени.

    void newFrameHandler(Frame frame)
    {
        foreach(Finger in frame.Fingers){
            Vector fingerPosition = finger.TipPosition;
            //Do something with this information...
        }
    }

Вы можете аналогичным образом получить руки, а затем получить доступ к пальцам каждой руки, что часто является более естественным подходом:

foreach(Hand hand in frame.Hands){
    foreach(Finger in hand.Fingers){
        Vector fingerPosition = finger.TipPosition;
        //Do something with this information...
    }        
}
person Charles Ward    schedule 01.04.2016