private void getGesture(Astra.Joint joint) { var mainWin = Application.Current.Windows .Cast <Window>() .FirstOrDefault(window => window is test123) as test123; Stopwatch timer = new Stopwatch(); timer.Start(); if (joint.WorldPosition.X == 0.07) // first action? // when do i determine that, tat its the before or after position { timer.Stop(); firstPos = joint.WorldPosition.X; //store time //before (1) action } timer.Start(); if (joint.WorldPosition.X > 0.07) // second action? { timer.Stop(); //store time secPos = joint.WorldPosition.X; } diff = firstPos - secPos; if (diff >= 0)//what action // tbd { mainWin.result.Text = "hand moving left"; } else if (diff <= 0) //tbd { mainWin.result.Text = "hand moving right"; } }
// Draws text with 3D coordinates of joint near joint circle private void DrawJointLabel(DrawingContext dc, Astra.Joint joint, double radius) { // joint.WorldPosition - is in millimeters // format as meters with centimeters after decimal point var label = string.Format("{0}\r\nX: {1:0.00} m\r\nY: {2:0.00} m\r\nZ: {3:0.00} m", /*{0}*/ joint.Type, /*{1}*/ MillimetersToMeters(joint.WorldPosition.X), /*{2}*/ MillimetersToMeters(joint.WorldPosition.Y), /*{3}*/ MillimetersToMeters(joint.WorldPosition.Z)); // formated text of label var txt = new FormattedText(label, CultureInfo.InvariantCulture, FlowDirection.LeftToRight, Fonts.SystemTypefaces.First(), JointLabelFontSizeEm, JointLabelShadow); txt.SetFontFamily(JointLabelFontFamily); txt.SetFontStretch(FontStretches.Normal); txt.SetFontStyle(FontStyles.Normal); txt.SetFontWeight(FontWeights.Heavy); txt.SetFontSize(25); // left-top corner of text label var labelPositionOnImage = ToImagePoint(joint); labelPositionOnImage.X += 1.5 * radius; labelPositionOnImage.Y -= txt.Height / 2.0; //// draw shadow //dc.DrawText(txt, labelPositionOnImage); // draw foreground with slight shift txt.SetForegroundBrush(JointLabelForeground); labelPositionOnImage.X -= 2; labelPositionOnImage.Y -= 2; dc.DrawText(txt, labelPositionOnImage); }
private void detectRight(float x, float y, float z, Astra.Joint joint) { if (joint.WorldPosition.X > 0.1 && joint.WorldPosition.Y == 0 && joint.WorldPosition.Z == 0.1) // getting hand position at right side x if its bigger than *, Y and Z stay put { //---- } }
private void DrawLine(Astra.Joint startJoint, Astra.Joint endJoint, int index) { if (startJoint.Status == Astra.JointStatus.Tracked && endJoint.Status == Astra.JointStatus.Tracked) { var jointPos = startJoint.WorldPosition; var startPos = transform.TransformVector(jointPos.X, jointPos.Y, jointPos.Z); jointPos = endJoint.WorldPosition; var endPos = transform.TransformVector(jointPos.X, jointPos.Y, jointPos.Z); jointLines[index].SetPositions(new Vector3[] { startPos, endPos }); jointLines[index].gameObject.SetActive(true); } else { jointLines[index].gameObject.SetActive(false); } }
private static Point ToImagePoint(Astra.Joint joint) => new Point(joint.DepthPosition.X, joint.DepthPosition.Y);
//new Bone(Astra.JointType.ShoulderSpine, Astra.JointType.RightShoulder), // new Bone(Astra.JointType.RightShoulder, Astra.JointType.RightElbow), // new Bone(Astra.JointType.RightElbow, Astra.JointType.RightWrist), // new Bone(Astra.JointType.RightWrist, Astra.JointType.RightHand), //private void DetectRightArmJoint(Astra.Body body, Astra.Joint joint) //{ // foreach (var bone in bones) // { // var HandJoint = FindJoint(body, Astra.JointType.RightHand); // if (IsJointOk(HandJoint)) // { // var WristJoint = FindJoint(body, Astra.JointType.RightWrist); // if (IsJointOk(WristJoint)) // { // var ElbowJoint = FindJoint(body, Astra.JointType.RightElbow); // if (IsJointOk(ElbowJoint)) // { // var ShoulderJoint = FindJoint(body, Astra.JointType.RightShoulder); // if (IsJointOk(ShoulderJoint)) // { // var isTracked = HandJoint.Status == Astra.JointStatus.Tracked // && WristJoint.Status == Astra.JointStatus.Tracked && ElbowJoint.Status == Astra.JointStatus.Tracked // && ShoulderJoint.Status == Astra.JointStatus.Tracked; // // if right arm is raised... what happen // } // } // } // } // } //} private static bool IsJointOk(Astra.Joint joint) => joint != null && joint.Status != Astra.JointStatus.NotTracked;
private string GetJointName(Astra.Joint joint) { return((joint.ToString().Split(' ')[1]).Split(',')[0]); }
private Vector3 V3(Astra.Joint joint1, Astra.Joint joint2) { Astra.Vector3D value1 = joint1.WorldPosition; Astra.Vector3D value2 = joint2.WorldPosition; return(new Vector3(value2.X - value1.X, value2.Y - value1.Y, value2.Z - value1.Z)); }