public List<IPrimitiveConditionData> GenerateRules(List<TouchPoint2> points)
        {
            // Paths generally contain a lot of points, we are skipping some points
               // to improve performance. The 'step' variable decides how much we should skip

            List<IPrimitiveConditionData> primitives = new List<IPrimitiveConditionData>();
            bool singlePoint = false;
            foreach (TouchPoint2 point in points)
            {
                if (!point.isFinger)
                {
                    primitives.Add(null);
                    continue;
                }

                singlePoint = TrigonometricCalculationHelper.isASinglePoint(point);
                if (singlePoint)
                {
                    primitives.Add(null);
                    continue;
                }

                StylusPoint p1 = point.Stroke.StylusPoints[0];
                StylusPoint p2 = point.Stroke.StylusPoints[point.Stroke.StylusPoints.Count - 1];

                double slope = TrigonometricCalculationHelper.GetSlopeBetweenPoints(p1, p2);
                string sDirection = TouchPointExtensions.SlopeToDirection(slope);
                TouchDirection direction = new TouchDirection();
                direction.Values = sDirection;
                primitives.Add(direction);
            }

            return primitives;
        }
 public void Init(IPrimitiveConditionData ruleData)
 {
     _data = ruleData as TouchDirection;
 }