예제 #1
0
        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;
            }
        }
예제 #2
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;
            }
        }
예제 #3
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>();
                    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;
            }
        }