public void Evaluate(int SpreadMax) { if (this.FInBodies.PluginIO.IsConnected) { int cnt = this.FInBodies.SliceCount; this.FOutPosition.SliceCount = cnt; this.FOutUserIndex.SliceCount = cnt; this.FOutClipped.SliceCount = cnt; this.FOutJointPosition.SliceCount = cnt * 25; this.FOutJointState.SliceCount = cnt * 25; this.FOutJointID.SliceCount = cnt * 25; this.FOutJointOrientation.SliceCount = cnt * 25; int jc = 0; for (int i = 0; i < cnt; i++) { Body sk = this.FInBodies[i]; Joint ce = sk.Joints[JointType.SpineBase]; this.FOutPosition[i] = new Vector3(ce.Position.X, ce.Position.Y, ce.Position.Z); this.FOutUserIndex[i] = (int)sk.TrackingId; Vector4 clip = Vector4.Zero; clip.X = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Left)); clip.Y = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Right)); clip.Z = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Top)); clip.W = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Bottom)); this.FOutClipped[i] = clip; foreach (Joint joint in sk.Joints.Values) { Microsoft.Kinect.Vector4 bo = sk.JointOrientations[joint.JointType].Orientation; this.FOutJointID[jc] = joint.JointType.ToString(); this.FOutJointPosition[jc] = new Vector3(joint.Position.X, joint.Position.Y, joint.Position.Z); this.FOutJointOrientation[jc] = new Quaternion(bo.X, bo.Y, bo.Z, bo.W); this.FOutJointState[jc] = joint.TrackingState.ToString(); jc++; } } } else { this.FOutPosition.SliceCount = 0; this.FOutUserIndex.SliceCount = 0; this.FOutJointID.SliceCount = 0; this.FOutJointPosition.SliceCount = 0; this.FOutJointState.SliceCount = 0; this.FOutJointOrientation.SliceCount = 0; this.FOutClipped.SliceCount = 0; } }
public void Evaluate(int SpreadMax) { if (this.FInvalidateConnect) { if (runtime != null) { this.runtime.SkeletonFrameReady -= SkeletonReady; } if (this.FInRuntime.PluginIO.IsConnected) { //Cache runtime node this.runtime = this.FInRuntime[0]; if (runtime != null) { this.FInRuntime[0].SkeletonFrameReady += SkeletonReady; } } this.FInvalidateConnect = false; } if (this.FInvalidate) { if (this.lastframe != null) { List <Body> skels = new List <Body>(); List <int> indices = new List <int>(); lock (m_lock) { for (int i = 0; i < this.lastframe.Length; i++) { if (this.lastframe[i].IsTracked) { skels.Add(this.lastframe[i]); indices.Add(i); } } } int cnt = skels.Count; this.FOutCount[0] = cnt; this.FOutPosition.SliceCount = cnt; this.FOutUserIndex.SliceCount = cnt; this.FOutShortIndex.SliceCount = cnt; this.FOutClipped.SliceCount = cnt; this.FOutJointPosition.SliceCount = cnt * 25; this.FOutJointState.SliceCount = cnt * 25; this.FOutJointID.SliceCount = cnt * 25; this.FOutJointPositionRGB.SliceCount = cnt * 25; this.FOutJointOrientation.SliceCount = cnt * 25; this.FOutFrameNumber[0] = this.frameid; int jc = 0; for (int i = 0; i < cnt; i++) { Body sk = skels[i]; Joint ce = sk.Joints[JointType.SpineBase]; this.FOutPosition[i] = new Vector3(ce.Position.X, ce.Position.Y, ce.Position.Z); this.FOutUserIndex[i] = sk.TrackingId.ToString(); this.FOutShortIndex[i] = indices[i]; Vector4 clip = Vector4.Zero; clip.X = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Left)); clip.Y = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Right)); clip.Z = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Top)); clip.W = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Bottom)); this.FOutClipped[i] = clip; foreach (Joint joint in sk.Joints.Values) { var jrgb = this.runtime.Runtime.CoordinateMapper.MapCameraPointToColorSpace(joint.Position); Microsoft.Kinect.Vector4 bo = sk.JointOrientations[joint.JointType].Orientation; this.FOutJointID[jc] = joint.JointType.ToString(); this.FOutJointPosition[jc] = new Vector3(joint.Position.X, joint.Position.Y, joint.Position.Z); this.FOutJointOrientation[jc] = new Quaternion(bo.X, bo.Y, bo.Z, bo.W); this.FOutJointState[jc] = joint.TrackingState.ToString(); this.FOutJointPositionRGB[jc] = new Vector2(jrgb.X, jrgb.Y); jc++; } } } else { this.FOutCount[0] = 0; this.FOutPosition.SliceCount = 0; this.FOutUserIndex.SliceCount = 0; this.FOutJointID.SliceCount = 0; this.FOutJointPosition.SliceCount = 0; this.FOutJointState.SliceCount = 0; this.FOutFrameNumber[0] = 0; this.FOutJointOrientation.SliceCount = 0; } this.FInvalidate = false; } }
public void Evaluate(int SpreadMax) { if (this.FInvalidateConnect) { if (runtime != null) { this.runtime.SkeletonFrameReady -= SkeletonReady; } if (this.FInRuntime.PluginIO.IsConnected) { //Cache runtime node this.runtime = this.FInRuntime[0]; if (runtime != null) { this.FInRuntime[0].SkeletonFrameReady += SkeletonReady; } } this.FInvalidateConnect = false; } if (this.FInvalidate) { if (this.lastframe != null) { List <Body> skels = new List <Body>(); float z = float.MaxValue; int id = -1; lock (m_lock) { foreach (Body sk in this.lastframe) { if (sk.IsTracked) { skels.Add(sk); } } } int cnt = skels.Count; this.FOutCount[0] = cnt; this.FOutPosition.SliceCount = cnt; this.FOutUserIndex.SliceCount = cnt; this.FOutClipped.SliceCount = cnt; this.FOutJointPosition.SliceCount = cnt * 25; this.FOutJointState.SliceCount = cnt * 25; this.FOutJointID.SliceCount = cnt * 25; this.FOutJointOrientation.SliceCount = cnt * 25; this.FOutFrameNumber[0] = this.frameid; this.FOutWearGlasses.SliceCount = cnt; this.FOutHappy.SliceCount = cnt; this.FOutNeutral.SliceCount = cnt; int jc = 0; for (int i = 0; i < cnt; i++) { Body sk = skels[i]; Joint ce = sk.Joints[JointType.SpineBase]; this.FOutPosition[i] = new Vector3(ce.Position.X, ce.Position.Y, ce.Position.Z); this.FOutUserIndex[i] = (int)sk.TrackingId; this.FOutWearGlasses[i] = sk.Appearance[Appearance.WearingGlasses]; this.FOutHappy[i] = sk.Expressions[Expression.Happy]; this.FOutNeutral[i] = sk.Expressions[Expression.Neutral]; //var t = sk.Expressions[Expression.] Vector4 clip = Vector4.Zero; clip.X = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Left)); clip.Y = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Right)); clip.Z = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Top)); clip.W = Convert.ToSingle(sk.ClippedEdges.HasFlag(FrameEdges.Bottom)); this.FOutClipped[i] = clip; foreach (Joint joint in sk.Joints.Values) { Microsoft.Kinect.Vector4 bo = sk.JointOrientations[joint.JointType].Orientation; this.FOutJointID[jc] = joint.JointType.ToString(); this.FOutJointPosition[jc] = new Vector3(joint.Position.X, joint.Position.Y, joint.Position.Z); this.FOutJointOrientation[jc] = new Quaternion(bo.X, bo.Y, bo.Z, bo.W); this.FOutJointState[jc] = joint.TrackingState.ToString(); jc++; } } } else { this.FOutCount[0] = 0; this.FOutPosition.SliceCount = 0; this.FOutUserIndex.SliceCount = 0; this.FOutJointID.SliceCount = 0; this.FOutJointPosition.SliceCount = 0; this.FOutJointState.SliceCount = 0; this.FOutFrameNumber[0] = 0; this.FOutJointOrientation.SliceCount = 0; this.FOutWearGlasses.SliceCount = 0; } this.FInvalidate = false; } }