void _listener_Frame(object sender, ControllerEventArgs e) { //Todo: Get rid of the dispatcher if possible Dispatcher.Invoke((Action)(() => { Frame frame = _leap.Frame(); if (frame.Fingers.Count > 0) { Finger finger = frame.Fingers.First(); if (finger != null) { Vector vec = finger.Direction; RawRotation = QuaternionHelper.EulerAnglesInRadToQuaternion( RotationFactor * vec.Pitch, RotationFactor * vec.Yaw, 0); RawPosition = new Vector3D( finger.TipPosition.x, -finger.TipPosition.y, finger.TipPosition.z ); } if (frame.Fingers.Count >= 5) { Calibrate(); } UpdatePositionAndRotation(); } })); }