예제 #1
0
    private void MyDataFrameReady(object sender, Xtr3D.Net.ExtremeMotion.Data.DataFrameReadyEventArgs e)
    {
        using (var dataFrame = e.OpenFrame() as DataFrame)
        {
            if (dataFrame != null)
            {
                currFrameID = dataFrame.FrameKey.FrameNumberKey;
                Debug.Log("Skeleton frame: " + currFrameID + ", state: " + dataFrame.Skeletons[0].TrackingState + ", proximity: " + dataFrame.Skeletons[0].Proximity.SkeletonProximity);
                if (currFrameID <= lastFrameID && currFrameID != 1)                //currFrameId=1 on reset/resume!!!
                {
                    return;
                }

                lastFrameID = currFrameID;

                //update frameRateCalc, we need to call this every frame as we are calculating avarage fps in the last x frames.
                frameRateCalc.UpdateAvgFps();
                JointCollection skl = dataFrame.Skeletons[0].Joints;

                //use a copy of the Joints data structure as the dataFrame values can change.
                typesToJoints[JointType.ShoulderCenter] = skl.ShoulderCenter;
                typesToJoints[JointType.Spine]          = skl.Spine;
                typesToJoints[JointType.HipCenter]      = skl.HipCenter;
                typesToJoints[JointType.ShoulderLeft]   = skl.ShoulderLeft;
                typesToJoints[JointType.ShoulderRight]  = skl.ShoulderRight;
                typesToJoints[JointType.ElbowLeft]      = skl.ElbowLeft;
                typesToJoints[JointType.ElbowRight]     = skl.ElbowRight;
                typesToJoints[JointType.HandRight]      = skl.HandRight;
                typesToJoints[JointType.HandLeft]       = skl.HandLeft;
                typesToJoints[JointType.Head]           = skl.Head;
            }
        }
    }
 private void OnDataFrameReceived(object sender, Xtr3D.Net.ExtremeMotion.Data.DataFrameReadyEventArgs e)
 {
     using (var dataFrame = e.OpenFrame() as DataFrame)
     {
         if (dataFrame != null)
         {
             if (!stateTextDictionary.TryGetValue(trackingState, out text))
             {
                 text = "UNRECOGNIZED STATE";
             }
             trackingState = dataFrame.Skeletons[0].TrackingState;
         }
     }
 }
예제 #3
0
 private void MyDataFrameReady(object sender, Xtr3D.Net.ExtremeMotion.Data.DataFrameReadyEventArgs e)
 {
     using (var dataFrame = e.OpenFrame() as DataFrame)
     {
         if (dataFrame != null)
         {
             Skeleton skl = dataFrame.Skeletons[0];
             edgeWarnings = skl.ClippedEdges;
             StringBuilder sb = new StringBuilder(basicWarningsText);
             CheckEdgeWarnings(sb);
             int warningsCount = CountLines(sb.ToString()) - 1;
             Debug.Log("Warnings frame: " + dataFrame.FrameKey.FrameNumberKey + ", contains " + (warningsCount - 1) + " " + sb.ToString());
         }
     }
 }
예제 #4
0
        void MyDataFrameReady(object sender, Xtr3D.Net.ExtremeMotion.Data.DataFrameReadyEventArgs e)
        {
            // Opening the received frame
            using (var dataFrame = e.OpenFrame() as DataFrame)
            {
                if (dataFrame != null) // Making sure it's really DataFrame
                {
                    StringBuilder text = new StringBuilder();
                    Skeleton      skel = dataFrame.Skeletons[0];
                    text.AppendFormat("Skeleton frame: {0}, state: {1}, proximity: {2}",
                                      dataFrame.FrameKey.FrameNumberKey, skel.TrackingState.ToString(), skel.Proximity.SkeletonProximity);
                    //Console.WriteLine(text);//written to console for automatic tests
                    if (dataFrame.Skeletons[0] != null)
                    {
                        var           joints = dataFrame.Skeletons[0].Joints; // Possibly several Skeletons, we'll use the first
                        TrackingState state  = dataFrame.Skeletons[0].TrackingState;
                        SkeletonTrackingState.Text = state.ToString();
                        SetCalibrationIconVisibility(state);
                        // We only want to display a tracked Skeleton
                        if (joints.Head.jointTrackingState == JointTrackingState.Tracked)
                        {
                            m_skeletonDrawer.DrawSkeleton(joints);
                        }
                        else
                        {
                            m_skeletonDrawer.WipeSkeleton();
                            maestro.DisableAll();
                        }

                        if (state == TrackingState.Tracked)
                        {
                            double L0 = Math.Atan2(
                                joints.ElbowLeft.skeletonPoint.Y - joints.ShoulderLeft.skeletonPoint.Y,
                                -1 * joints.ElbowLeft.skeletonPoint.X - -1 * joints.ShoulderLeft.skeletonPoint.X) * 180.0 / Math.PI;

                            double L1 = Math.Atan2(
                                joints.HandLeft.skeletonPoint.Y - joints.ElbowLeft.skeletonPoint.Y,
                                -1 * joints.HandLeft.skeletonPoint.X - -1 * joints.ElbowLeft.skeletonPoint.X) * 180.0 / Math.PI;

                            double R0 = Math.Atan2(
                                joints.ElbowRight.skeletonPoint.Y - joints.ShoulderRight.skeletonPoint.Y,
                                joints.ElbowRight.skeletonPoint.X - joints.ShoulderRight.skeletonPoint.X) * 180.0 / Math.PI;

                            double R1 = Math.Atan2(
                                joints.HandRight.skeletonPoint.Y - joints.ElbowRight.skeletonPoint.Y,
                                joints.HandRight.skeletonPoint.X - joints.ElbowRight.skeletonPoint.X) * 180.0 / Math.PI;

                            StringBuilder text2 = new StringBuilder();
                            text2.AppendFormat("{4} L0:{0},R0:{1},L1:{2},R1:{3} \t",
                                               Math.Round(L0), Math.Round(R0), Math.Round(L1) - Math.Round(L0), Math.Round(R1) - Math.Round(R0), DateTime.UtcNow.ToString("yy-MM-ddThh:mm:ss"));

                            ushort TL0 = maestro.DegreeToTarget(1, (int)Math.Round(L0));
                            ushort TR0 = maestro.DegreeToTarget(2, (int)Math.Round(R0));
                            ushort TL1 = maestro.DegreeToTarget(4, (int)(Math.Round(L1) - Math.Round(L0)));
                            ushort TR1 = maestro.DegreeToTarget(5, (int)(Math.Round(R1) - Math.Round(R0)));
                            text2.AppendFormat("TL0:{0},TR0:{1},TL1:{2},TR1:{3}",
                                               TL0, TR0, TL1, TR1);

                            file.WriteLine(text2);//written to console for automatic tests

                            maestro.TrySetTarget(1, TL0);
                            maestro.TrySetTarget(2, TR0);
                            maestro.TrySetTarget(4, TL1);
                            maestro.TrySetTarget(5, TR1);
                        }

                        UpdateFrameEdges(dataFrame.Skeletons[0].ClippedEdges);     // Reading the Skeleton Edge warnings
                    }
                }
            }
        }