src/FingersDance.GestureControl/GestureVector.cs
changeset 178 56041bd3761e
parent 177 89cbcb52b674
child 189 b37888f59cf2
equal deleted inserted replaced
177:89cbcb52b674 178:56041bd3761e
   124         /// </summary>
   124         /// </summary>
   125         /// <param name="list"></param>
   125         /// <param name="list"></param>
   126         private void Generate(List<SurfaceGesturePoint> list)
   126         private void Generate(List<SurfaceGesturePoint> list)
   127         {
   127         {
   128             if (list.Count < 2)
   128             if (list.Count < 2)
       
   129             {
       
   130                 this.Add(new SurfaceGestureVector { Direction = SurfaceGestureVectorDirection.TAP, Lenght = 0 });
   129                 return;
   131                 return;
       
   132             }
   130             SurfaceGestureVectorDirection lastDirection = SurfaceGestureVectorDirection.NONE;
   133             SurfaceGestureVectorDirection lastDirection = SurfaceGestureVectorDirection.NONE;
   131             int lastPoint = 0;
   134             int lastPoint = 0;
   132             SurfaceGesturePoint LastChange = list[0];
   135             SurfaceGesturePoint LastChange = list[0];
   133 
   136 
   134             /////// TEST///////////
   137             /////// TEST///////////
   211                     LastChange = list[i + 1];
   214                     LastChange = list[i + 1];
   212                     lastDirection = SurfaceGestureVectorDirection.DOWNRIGHT;
   215                     lastDirection = SurfaceGestureVectorDirection.DOWNRIGHT;
   213                 }
   216                 }
   214                 ++lastPoint;
   217                 ++lastPoint;
   215             }
   218             }
   216 
   219             Analyse(list);
       
   220         }
       
   221 
       
   222         private void Analyse(List<SurfaceGesturePoint> list)
       
   223         {
   217             //  Analyse de la forme
   224             //  Analyse de la forme
   218 
   225 
   219             int up = 0, down = 0, left = 0, right = 0, upleft = 0, upright = 0, downleft = 0, downright = 0;
   226             double up = 0, down = 0, left = 0, right = 0, upleft = 0, upright = 0, downleft = 0, downright = 0;
   220             foreach (SurfaceGestureVector elt in this)
   227             foreach (SurfaceGestureVector elt in this)
   221             {
   228             {
   222                 switch (elt.Direction)
   229                 switch (elt.Direction)
   223                 {
   230                 {
   224                     case SurfaceGestureVectorDirection.DOWN:
   231                     case SurfaceGestureVectorDirection.DOWN:
   225                         down++;
   232                         down += elt.Lenght;
   226                         break;
   233                         break;
   227                     case SurfaceGestureVectorDirection.DOWNLEFT:
   234                     case SurfaceGestureVectorDirection.DOWNLEFT:
   228                         downleft++;
   235                         downleft += elt.Lenght;
   229                         break;
   236                         break;
   230                     case SurfaceGestureVectorDirection.DOWNRIGHT:
   237                     case SurfaceGestureVectorDirection.DOWNRIGHT:
   231                         downright++;
   238                         downright += elt.Lenght;
   232                         break;
   239                         break;
   233                     case SurfaceGestureVectorDirection.LEFT:
   240                     case SurfaceGestureVectorDirection.LEFT:
   234                         left++;
   241                         left += elt.Lenght;
   235                         break;
   242                         break;
   236                     case SurfaceGestureVectorDirection.RIGHT:
   243                     case SurfaceGestureVectorDirection.RIGHT:
   237                         right++;
   244                         right += elt.Lenght;
   238                         break;
   245                         break;
   239                     case SurfaceGestureVectorDirection.UP:
   246                     case SurfaceGestureVectorDirection.UP:
   240                         up++;
   247                         up += elt.Lenght;
   241                         break;
   248                         break;
   242                     case SurfaceGestureVectorDirection.UPLEFT:
   249                     case SurfaceGestureVectorDirection.UPLEFT:
   243                         upleft++;
   250                         upleft += elt.Lenght;
   244                         break;
   251                         break;
   245                     case SurfaceGestureVectorDirection.UPRIGHT:
   252                     case SurfaceGestureVectorDirection.UPRIGHT:
   246                         upright++;
   253                         upright += elt.Lenght;
   247                         break;
   254                         break;
   248                 }
   255                 }
   249             }
   256             }
   250         }
   257 
       
   258             double diffX = Math.Abs(list[0].X - list[list.Count - 1].X);
       
   259             double diffY = Math.Abs(list[0].Y - list[list.Count - 1].Y);
       
   260 
       
   261             if (diffX < 5)
       
   262             {
       
   263                 this.Clear();
       
   264                 if (up > down)
       
   265                     this.Add(new SurfaceGestureVector { Direction = SurfaceGestureVectorDirection.UP, Lenght = up });
       
   266                 else
       
   267                     this.Add(new SurfaceGestureVector { Direction = SurfaceGestureVectorDirection.DOWN, Lenght = down });
       
   268             }
       
   269             else if (diffY < 5)
       
   270             {
       
   271                 this.Clear();
       
   272                 if (left > right)
       
   273                     this.Add(new SurfaceGestureVector { Direction = SurfaceGestureVectorDirection.LEFT, Lenght = left });
       
   274                 else
       
   275                     this.Add(new SurfaceGestureVector { Direction = SurfaceGestureVectorDirection.RIGHT, Lenght = right });
       
   276             }
       
   277         }
       
   278 
   251         private SurfaceGestureVectorDirection GetHorizontal(SurfaceGesturePoint p1, SurfaceGesturePoint p2)
   279         private SurfaceGestureVectorDirection GetHorizontal(SurfaceGesturePoint p1, SurfaceGesturePoint p2)
   252         {
   280         {
   253             if (p1.Y < p2.Y)
   281             if (p1.Y < p2.Y)
   254             {
   282             {
   255                 // go up
   283                 // go up