private static List <Filter <IUserChangedEvent> > GetStandardSelfTouchFilters(JointID[] joints)
        {
            if (joints.Length < 2)
            {
                throw new ArgumentException("At least 2 joints are expected for a SelfTouchGesture", "joints");
            }

            var list = new List <Filter <IUserChangedEvent> >();

            list.Add(new FramesFilter(6));
            var correctionFilter = new CorrectionFilter(joints[1], new Point3D());
            var collisionFilter  = new CollisionFilter(new Point3D(), joints);

            return(list);
        }
        private static List <Filter <IUserChangedEvent> > GetFilters(XElement filters, params JointID[] joints)
        {
            IOrderedEnumerable <XElement> myFilters = from node in filters.Descendants()
                                                      orderby node.Attribute(XName.Get("Sequence")).Value ascending
                                                      select node;

            var filterCollection = new List <Filter <IUserChangedEvent> >(myFilters.Count());

            foreach (XElement filter in myFilters)
            {
                Filter <IUserChangedEvent> createdFilter = null;
                if (filter.Name == "FramesFilter")
                {
                    int    fpsCount;
                    string fps = filter.Attribute(XName.Get("FPS")).Value;
                    if (int.TryParse(fps, out fpsCount))
                    {
                        createdFilter = new FramesFilter(fpsCount);
                    }
                    else
                    {
                        createdFilter = new FramesFilter(10);
                    }
                }
                else if (filter.Name == "CollisionFilter")
                {
                    int    x, y, z;
                    string xValue = filter.Attribute(XName.Get("MarginX")).Value;
                    string yValue = filter.Attribute(XName.Get("MarginY")).Value;
                    string zValue = filter.Attribute(XName.Get("MarginZ")).Value;

                    if (int.TryParse(xValue, out x) && int.TryParse(yValue, out y) && int.TryParse(zValue, out z))
                    {
                        createdFilter = new CollisionFilter(new Point3D(x, y, z), joints);
                    }
                    else
                    {
                        var exception = new ArgumentException("You need to provide the XYZ margins");

                        _log.IfError(string.Empty, exception);

                        throw exception;
                    }
                }
                else if (filter.Name == "CorrectionFilter")
                {
                    var correction = new Point3D();
                    correction.X = SafeFloatParse(filter.Attribute(XName.Get("MarginX")));
                    correction.Y = SafeFloatParse(filter.Attribute(XName.Get("MarginY")));
                    correction.Z = SafeFloatParse(filter.Attribute(XName.Get("MarginZ")));
                    JointID joint;

                    //TODO better catch if XML isn't correct? DTD
                    if (Enum.TryParse(filter.Attribute(XName.Get("SkeletonJoint")).Value, out joint))
                    {
                        createdFilter = new CorrectionFilter(joint, correction);
                    }
                    else
                    {
                        var exception = new ArgumentException("You need to provide a SkeletonJoint to correct");

                        _log.IfError(string.Empty, exception);

                        throw exception;
                    }
                }
                else
                {
                    var exception = new ArgumentException("The provided filter isn't supported");

                    _log.IfError(string.Empty, exception);

                    throw exception;
                }

                if (createdFilter != null)
                {
                    filterCollection.Add(createdFilter);
                }
            }
            return(filterCollection);
        }
示例#3
0
        private static List<Filter<IUserChangedEvent>> GetFilters(XElement filters, params JointID[] joints)
        {
            IOrderedEnumerable<XElement> myFilters = from node in filters.Descendants()
                                                     orderby node.Attribute(XName.Get("Sequence")).Value ascending
                                                     select node;

            var filterCollection = new List<Filter<IUserChangedEvent>>(myFilters.Count());
            foreach (XElement filter in myFilters)
            {
                Filter<IUserChangedEvent> createdFilter = null;
                if (filter.Name == "FramesFilter")
                {
                    int fpsCount;
                    string fps = filter.Attribute(XName.Get("FPS")).Value;
                    if (int.TryParse(fps, out fpsCount))
                    {
                        createdFilter = new FramesFilter(fpsCount);
                    }
                    else
                    {
                        createdFilter = new FramesFilter(10);
                    }
                }
                else if (filter.Name == "CollisionFilter")
                {
                    int x, y, z;
                    string xValue = filter.Attribute(XName.Get("MarginX")).Value;
                    string yValue = filter.Attribute(XName.Get("MarginY")).Value;
                    string zValue = filter.Attribute(XName.Get("MarginZ")).Value;

                    if (int.TryParse(xValue, out x) && int.TryParse(yValue, out y) && int.TryParse(zValue, out z))
                    {
                        createdFilter = new CollisionFilter(new Point3D(x, y, z), joints);
                    }
                    else
                    {
                        var exception = new ArgumentException("You need to provide the XYZ margins");

                        _log.IfError(string.Empty, exception);

                        throw exception;
                    }
                }
                else if (filter.Name == "CorrectionFilter")
                {
                    var correction = new Point3D();
                    correction.X = SafeFloatParse(filter.Attribute(XName.Get("MarginX")));
                    correction.Y = SafeFloatParse(filter.Attribute(XName.Get("MarginY")));
                    correction.Z = SafeFloatParse(filter.Attribute(XName.Get("MarginZ")));
                    JointID joint;

                    //TODO better catch if XML isn't correct? DTD
                    if (Enum.TryParse(filter.Attribute(XName.Get("SkeletonJoint")).Value, out joint))
                    {
                        createdFilter = new CorrectionFilter(joint, correction);
                    }
                    else
                    {
                        var exception = new ArgumentException("You need to provide a SkeletonJoint to correct");

                        _log.IfError(string.Empty, exception);

                        throw exception;
                    }
                }
                else
                {
                    var exception = new ArgumentException("The provided filter isn't supported");

                    _log.IfError(string.Empty, exception);

                    throw exception;
                }

                if (createdFilter != null)
                {
                    filterCollection.Add(createdFilter);
                }
            }
            return filterCollection;
        }
示例#4
0
        private static List<Filter<IUserChangedEvent>> GetStandardSelfTouchFilters(JointID[] joints)
        {
            if (joints.Length < 2)
            {
                throw new ArgumentException("At least 2 joints are expected for a SelfTouchGesture", "joints");
            }

            var list = new List<Filter<IUserChangedEvent>>();
            list.Add(new FramesFilter(6));
            var correctionFilter = new CorrectionFilter(joints[1], new Point3D());
            var collisionFilter = new CollisionFilter(new Point3D(), joints);
            return list;
        }