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