Пользовательский курсор Kinect - PullRequest
1 голос
/ 07 февраля 2012

Мне нужно сделать курсор в Kinect, но я не знаю с чего начать.Мне нужно сделать это с помощью WPF и C #.Курсор должен быть в форме руки, и при наведении курсора на элемент должен появиться круг «загрузки», а когда он «загрузится», он должен инициировать событие щелчка на элементе наведения.Я уверен, что вы все знакомы с этим.

Было бы очень полезно, если бы кто-то мог написать мне несколько указаний о том, как этого добиться.

Ответы [ 2 ]

3 голосов
/ 07 февраля 2012

Вот фрагмент кода, который может вам помочь:

using Microsoft.Research.Kinect.Nui;

Runtime nui = Runtime.Kinects[0];
nui.Initialize(RuntimeOptions.UseSkeletalTracking);
nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);

void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
    SkeletonFrame sf = e.SkeletonFrame;
    SkeletonData d = (from s in sf.Skeletons
                      where s.TrackingState == SkeletonTrackingState.Tracked
                      select s).FirstOrDefault();

     if (d != null)
     {
          SetHandPosition(imageCursor, d.Joints[JointID.HandLeft]);
     }
}

void SetHandPosition(FrameworkElement e, Joint joint)
{
    Joint scaledJoint = Coding4Fun.Kinect.Wpf.SkeletalExtensions.ScaleTo(joint, 600, 400, 0.75f, 0.75f);

    Canvas.SetLeft(e, scaledJoint.Position.X);
    Canvas.SetTop(e, scaledJoint.Position.Y);
} 

Если вы хотите, чтобы курсор зависал на элементе, просто перейдите к свойствам элементов и установите курсор для этого элемента.В Visual Studio вы можете выбрать курсор в свойствах элементов.

Чтобы щелкнуть курсор над элементом, вам нужно реализовать событие MouseEnter

private void button1_MouseEnter(object sender, MouseEventArgs e)
{
....        
}

Вот некоторые сведения оэто:

button1.PerformClick () в wpf

1 голос
/ 10 мая 2012

Вот хорошее решение с использованием официального SDK, но даже если вы этого не сделаете, это может быть очень (!) Полезно (это было для меня):

Вам следует взглянуть на (бесплатный) код, доступный здесь Начало программирования Kinect с примером кода Microsoft Kinect SDK вы нажимаете «Исходный код / ​​Загрузки» и что вас заинтересует в Пример главы 6 (название папки).

В основном они используют статический класс KinectInput, который позволяет вызывать новое событие, например KinectCursorEnterEvent, есть менеджер курсоров KinectCursorManager, который почти все получает положение руки / обновляет курсор ... и они используйте курсор для установки курсора, с FrameworkElement, который вы хотите использовать в качестве курсора.

Они реализуют HoverButton, о котором вы говорите. Он запускает событие щелчка по истечении таймера (таймер запускается при наступлении KinectCursorEnterEvent) Предлагаемое ими решение элегантно и позволяет легко реализовать приятные элементы управления. Вы можете легко изменить код для обработки двух курсоров (это добавленная стоимость Kinect, не так ли?)

с перечислением CursorSide:

public enum CursorSide
{
    Left,
    Right
}

и модифицируйте только KinectCursorManager, имеющий словарь с емкостью 2, а перечисление является ключом и имеющее указатель на элемент под курсором для каждой руки:

    private Dictionary<CursorSide, CursorAdorner> _cursorAdorner;
    private UIElement _lastElementOverRightHand;
    private UIElement _lastElementOverLeftHand;

Но прежде чем вам нужно будет удалить часть кода, которая делает выбор первичной руки (в основном это рука, ближайшая к Kinect).

Надеюсь, это кому-нибудь поможет: -]

Книга очень интересная, купить ее можно за несколько баксов.

...