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 |