2016-03-31 4 views
0

Ich möchte Fingerpositionen in der Leap-Bewegung mit C# erhalten. Ich bin neu im Sprungbewegungscontroller. So konnte ich keinen Beispielcode für die Erkennung von Fingerpositionen finden, aber ich versuchte, etwas Code zu finden. Ich denke, es hat viele Fehler. Also, wie bekommt man Fingerpositionen in Leap Motion mit C#?So erhalten Sie Fingerpositionen in Leap Motion mit 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"); 
    } 
    } 
    } 
+1

Es würde helfen Ihre Bemühungen zu zeigen, indem Sie den Code in Ihre Frage einfügen. – Mixxiphoid

+0

Danke für Ihren Ratschlag # Mixxiphoid –

Antwort

0

Ihr Code sieht aus wie es aus dem documentation example abgeleitet wird. Sie haben jedoch die eigentlichen Ereignishandler weggelassen, so dass nichts passieren wird.

Im verknüpften Beispiel sehen Sie eine newFrameHandler-Funktion. Sie können dies ändern, um auf die Fingerpositionen im Rahmenobjekt zuzugreifen, bei dem es sich um einen Schnappschuss der verfolgten Zeiger zu einem bestimmten Zeitpunkt handelt.

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

Sie können in ähnlicher Weise die Hände bekommen und dann jeden Finger der Hand zugreifen, die oft die natürlichen Ansatz:

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