Esempio n. 1
0
 public GesturePipeline()
     : base()
 {
     EnableGesture();
     EnableImage(PXCMImage.ColorFormat.COLOR_FORMAT_RGB32, 640, 480);
     // Select a depth stream with resolution
     EnableImage(PXCMImage.ColorFormat.COLOR_FORMAT_DEPTH, 320, 240);
     nframes       = 0;
     device_lost   = false;
     geoNodeParams = new MyGestureParams();
 }
Esempio n. 2
0
        public static void Initialize()
        {
            viewControlHelper  = ViewControlHelper.Instance;
            geoNodeParams      = new MyGestureParams();
            myPath             = new MyGesturePath(oldPoint, newPoint);
            needDebouncing     = false;
            inkCanvasMouseDown = false;
            debouncingTimer    = null;
            hoveredButton      = null;
            hoveredInkCanvas   = null;

            parentWindow     = App.Current.MainWindow;
            XLabel           = (Label)parentWindow.FindName("XLabel");
            YLabel           = (Label)parentWindow.FindName("YLabel");
            hand_palm        = (Image)parentWindow.FindName("hand_palm");
            hand_grip        = (Image)parentWindow.FindName("hand_grip");
            testLabel        = (Label)parentWindow.FindName("testLabel");
            currentPageLabel = (Label)parentWindow.FindName("currentPageLabel");
            debouncingLabel  = (Label)parentWindow.FindName("debouncingLabel");
            eventBox         = (TextBox)parentWindow.FindName("eventBox");
            newPoint         = new Point();
            oldPoint         = new Point(-1, -1);
        }
Esempio n. 3
0
        public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            bgwk1Running = true;
            GesturePipeline pipeline = new GesturePipeline();

            PXCMGesture.Alert.Label alertLabel    = PXCMGesture.Alert.Label.LABEL_ANY;
            MyGestureParams         geoNodeParams = new MyGestureParams();

            pipeline.Init();
            if (MessageBox.Show("Initialise Voice pipeline?", "", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                backgroundWorker1.ReportProgress(1);
            }
            while (true)
            {
                //check if need to terminate the pipline when window is closing
                if (backgroundWorker1.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }

                if (pipeline.AcquireFrame(true))
                {
                    if (pipeline.IsImageFrame())
                    {
                        if (alertLabel != pipeline.geoNodeParams.alertLabel)
                        {
                            alertLabel = pipeline.geoNodeParams.alertLabel;
                        }
                        //check existance of geoNode
                        if ((alertLabel != PXCMGesture.Alert.Label.LABEL_ANY) &&
                            (alertLabel != PXCMGesture.Alert.Label.LABEL_GEONODE_INACTIVE) &&
                            (alertLabel != PXCMGesture.Alert.Label.LABEL_FOV_BLOCKED))
                        {
                            geoNodeParams = pipeline.geoNodeParams;
                            alertLabel    = geoNodeParams.alertLabel;
                            backgroundWorker1.ReportProgress(3, geoNodeParams);
                        }
                        else
                        {
                            geoNodeParams.reset();
                            geoNodeParams.alertLabel = alertLabel;
                            backgroundWorker1.ReportProgress(3, geoNodeParams);
                        }
                    }
                    else
                    {
                        pipeline.ReleaseFrame();
                        continue;
                    }
                    if (!pipeline.ReleaseFrame())
                    {
                        break;
                    }
                }
                else
                {
                    MessageBox.Show("Failed to initialize GesturePipeline");
                    break;
                }
            }
            pipeline.PauseGesture(true);
            //pipeline.ReleaseFrame();
            pipeline.Close();
            pipeline.Dispose();
            bgwk1Running = false;
            //MessageBox.Show("stopping backgroundWorker1");
        }
Esempio n. 4
0
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            if (e.ProgressPercentage == 1)
            {
                backgroundWorker2.RunWorkerAsync();
                return;
            }

            //GestureControlHelper.geoNodeParams = (MyGestureParams)e.UserState;
            //GestureControlHelper.hoveredButton = hoveredButton;
            //GestureControlHelper.hoveredInkCanvas = hoveredInkCanvas;
            //GestureControlHelper.RunGestureControl();


            MyGestureParams geoNodeParams = new MyGestureParams();

            geoNodeParams = (MyGestureParams)e.UserState;
            MyGesturePath myPath = null;

            //move the hand
            XLabel.Content = geoNodeParams.nodeX.ToString();
            YLabel.Content = geoNodeParams.nodeY.ToString();

            //check existance of geoNode
            if ((geoNodeParams.alertLabel != PXCMGesture.Alert.Label.LABEL_ANY) &&
                (geoNodeParams.alertLabel != PXCMGesture.Alert.Label.LABEL_GEONODE_INACTIVE) &&
                (geoNodeParams.alertLabel != PXCMGesture.Alert.Label.LABEL_FOV_BLOCKED))
            {
                NativeMethods.SetCursorPos(
                    (int)Application.Current.MainWindow.Left + (int)SystemParameters.FixedFrameVerticalBorderWidth + 1 + 640 - (int)geoNodeParams.nodeX * 2,
                    (int)Application.Current.MainWindow.Top + (int)SystemParameters.FixedFrameHorizontalBorderHeight + (int)SystemParameters.WindowCaptionHeight + 1 + (int)geoNodeParams.nodeY * 2
                    );

                if ((geoNodeParams.alertLabel == PXCMGesture.Alert.Label.LABEL_FOV_LEFT) ||
                    (geoNodeParams.alertLabel == PXCMGesture.Alert.Label.LABEL_FOV_RIGHT) ||
                    (geoNodeParams.alertLabel == PXCMGesture.Alert.Label.LABEL_FOV_TOP) ||
                    (geoNodeParams.alertLabel == PXCMGesture.Alert.Label.LABEL_FOV_BOTTOM))
                {
                    //signalLight.FillColor = Color.Yellow;
                    //signalLabel.Text = "Too close to dection boundary";
                }
                else
                {
                    // signalLight.FillColor = Color.Green;
                    //signalLabel.Text = "Under detection";
                }

                newPoint = new Point(640 - Convert.ToInt32(geoNodeParams.nodeX) * 2, Convert.ToInt32(geoNodeParams.nodeY) * 2);
                //check opennes
                if (geoNodeParams.opennes > opennesThreadshold)
                {
                    this.hand_palm.Visibility = Visibility.Visible;
                    this.hand_grip.Visibility = Visibility.Hidden;

                    //======Start of method 1========
                    raiseInkCanvasMouseEvent("MouseUpEvent");
                    //======End of method 1========
                }
                else if (geoNodeParams.opennes >= 0 && geoNodeParams.opennes <= opennesThreadshold)
                {
                    this.hand_palm.Visibility = Visibility.Hidden;
                    this.hand_grip.Visibility = Visibility.Visible;

                    //draw line
                    //SolidBrush color = new SolidBrush(Color.Black);

                    if ((oldPoint.X == -1) || (oldPoint.Y == -1))
                    {
                        oldPoint = newPoint;
                    }
                    else
                    {
                        myPath = new MyGesturePath(oldPoint, newPoint);

                        //if ((newPoint.X > 160) && (newPoint.X < 480) &&
                        //      (newPoint.Y > 110) && (newPoint.Y < 430))
                        //  {
                        //      myPath = new MyGesturePath(oldPoint, newPoint);

                        //      if ((oldPoint.X != newPoint.X) || (oldPoint.Y != newPoint.Y))
                        //      {
                        //          //this.myPathList.Add(myPath);
                        //      }
                        //      //panel1.Invalidate();
                        //      //drawingCanvas.Invalidate();
                        //      // signalLight.Invalidate();
                        //  }
                    }
                    // Perform actions on the hit test results list.
                    //Raise the Button mouse click event
                    if (hoveredButton != null && needDebouncing == false)
                    {
                        needDebouncing = true;
                        hoveredButton.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, Environment.TickCount, MouseButton.Left)
                        {
                            RoutedEvent = Button.ClickEvent
                        });
                        debouncingTimer = EasyTimer.SetTimeout(() =>
                        {
                            needDebouncing = false;
                        }, 1000);
                    }
                    //Raise the InkCanvas mouse down event
                    //if (hoveredInkCanvas != null)
                    if (hoveredInkCanvas != null && inkCanvasMouseDown == false)
                    {
                        //======Start of method 1========
                        raiseInkCanvasMouseEvent("MouseDownEvent");
                        //======End of method 1========

                        //======Start of method 2========

                        //  Problem: can show the stroke correctly, but very high latency
                        //  Findings: probably because this method simply add child to Inkcanvas, processing power and memory consuming
                        //Line linetodraw = new Line();
                        //linetodraw.X1 = myPath.OldPoint.X;//0
                        //linetodraw.Y1 = myPath.OldPoint.Y;//0
                        //linetodraw.X2 = myPath.NewPoint.X;//10
                        //linetodraw.Y2 = myPath.NewPoint.Y;//10
                        //linetodraw.StrokeThickness = 2;
                        //linetodraw.Stroke = new SolidColorBrush(Colors.Black);
                        //this.hoveredInkCanvas.Children.Add(linetodraw);
                        //=======End of method 2=========

                        //======Method 3 under investigation=====

                        //  Target:
                        //StrokeCollection strokeCollection = new StrokeCollection();
                        //Stroke stroke = new Stroke();
                        //strokeCollection.

                        //======Method 3 under investigation=====
                    }
                }
                //if (geoNodeParams.opennes <= opennesThreadshold) selectable = false;
                oldPoint = newPoint;

                if (geoNodeParams.gestureLabel == PXCMGesture.Gesture.Label.LABEL_NAV_SWIPE_DOWN)
                {
                    viewControlHelper.gotoPreviousView();
                }
            }
            else
            {
                this.hand_palm.Visibility = Visibility.Hidden;
                this.hand_grip.Visibility = Visibility.Hidden;
                //======Start of method 1========
                raiseInkCanvasMouseEvent("MouseUpEvent");
                //======End of method 1========
            }
            var viewString = "Views:";

            foreach (var view in viewControlHelper.getViewsHistory())
            {
                viewString += view.ToString() + ",";
            }
            this.testLabel.Content = viewString;
            //this.testLabel.Content = viewControlHelper.previousViews.Count().ToString();
            this.currentPageLabel.Content = viewControlHelper.getCurrentView().ToString();
            this.debouncingLabel.Content  = needDebouncing.ToString();

            //capture the events
            //var events = EventManager.GetRoutedEvents();
            //foreach (var routedEvent in events)
            //{
            //    EventManager.RegisterClassHandler(typeof(UserControl), routedEvent, new RoutedEventHandler(handler));
            //}
            //eventBox.ScrollToEnd();
        }