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; } } }
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()); } } }
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 } } } }