/src/org/mt4j/input/inputProcessors/componentProcessors/unistrokeProcessor/UnistrokeTemplates.java

http://mt4j.googlecode.com/ · Java · 470 lines · 368 code · 55 blank · 47 comment · 1 complexity · 3d7b2cdb26b107819bb2b4916ff36d24 MD5 · raw file

  1. /***********************************************************************
  2. * mt4j Copyright (c) 2008 - 2010 C.Ruff, Fraunhofer-Gesellschaft All rights reserved.
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. *
  17. ***********************************************************************/
  18. package org.mt4j.input.inputProcessors.componentProcessors.unistrokeProcessor;
  19. import java.util.Arrays;
  20. import java.util.List;
  21. import org.mt4j.input.inputProcessors.componentProcessors.unistrokeProcessor.UnistrokeUtils.Direction;
  22. import org.mt4j.input.inputProcessors.componentProcessors.unistrokeProcessor.UnistrokeUtils.UnistrokeGesture;
  23. import org.mt4j.util.math.Vector3D;
  24. /**
  25. * The Class MTDollarTemplates.
  26. */
  27. public class UnistrokeTemplates {
  28. /** The List of registered templates. */
  29. List <Template> templates;
  30. /** The Utilities. */
  31. UnistrokeUtils du;
  32. /**
  33. * Instantiates new MTDollarTemplates.
  34. *
  35. * @param templates the List of registered templates
  36. * @param du the Utils
  37. */
  38. public UnistrokeTemplates (List<Template> templates, UnistrokeUtils du) {
  39. this.templates = templates;
  40. this.du = du;
  41. }
  42. /**
  43. * The Class Template.
  44. */
  45. class Template{
  46. /** The gesture. */
  47. UnistrokeGesture gesture;
  48. /** The direction. */
  49. Direction direction;
  50. /** The Points. */
  51. List<Vector3D> Points;
  52. /**
  53. * Instantiates a new template.
  54. *
  55. * @param gesture the gesture
  56. * @param points the points
  57. * @param direction the direction
  58. */
  59. Template(UnistrokeGesture gesture, List<Vector3D> points, Direction direction){
  60. this.gesture = gesture;
  61. this.direction = direction;
  62. Points = du.Resample( points, du.getNumPoints(), direction);
  63. Points = du.RotateToZero( Points );
  64. Points = du.ScaleToSquare( Points, du.getSquareSize());
  65. Points = du.TranslateToOrigin( Points );
  66. }
  67. }
  68. /**
  69. * Adds the template by gesture/direction.
  70. *
  71. * @param gesture the gesture
  72. * @param direction the direction
  73. */
  74. public void addTemplate(UnistrokeGesture gesture, Direction direction) {
  75. List<Vector3D> points = null;
  76. switch (gesture) {
  77. case TRIANGLE:
  78. Vector3D[] point0_array = {
  79. new Vector3D(137,139),new Vector3D(135,141),new Vector3D(133,144),new Vector3D(132,146),
  80. new Vector3D(130,149),new Vector3D(128,151),new Vector3D(126,155),new Vector3D(123,160),
  81. new Vector3D(120,166),new Vector3D(116,171),new Vector3D(112,177),new Vector3D(107,183),
  82. new Vector3D(102,188),new Vector3D(100,191),new Vector3D(95,195),new Vector3D(90,199),
  83. new Vector3D(86,203),new Vector3D(82,206),new Vector3D(80,209),new Vector3D(75,213),
  84. new Vector3D(73,213),new Vector3D(70,216),new Vector3D(67,219),new Vector3D(64,221),
  85. new Vector3D(61,223),new Vector3D(60,225),new Vector3D(62,226),new Vector3D(65,225),
  86. new Vector3D(67,226),new Vector3D(74,226),new Vector3D(77,227),new Vector3D(85,229),
  87. new Vector3D(91,230),new Vector3D(99,231),new Vector3D(108,232),new Vector3D(116,233),
  88. new Vector3D(125,233),new Vector3D(134,234),new Vector3D(145,233),new Vector3D(153,232),
  89. new Vector3D(160,233),new Vector3D(170,234),new Vector3D(177,235),new Vector3D(179,236),
  90. new Vector3D(186,237),new Vector3D(193,238),new Vector3D(198,239),new Vector3D(200,237),
  91. new Vector3D(202,239),new Vector3D(204,238),new Vector3D(206,234),new Vector3D(205,230),
  92. new Vector3D(202,222),new Vector3D(197,216),new Vector3D(192,207),new Vector3D(186,198),
  93. new Vector3D(179,189),new Vector3D(174,183),new Vector3D(170,178),new Vector3D(164,171),
  94. new Vector3D(161,168),new Vector3D(154,160),new Vector3D(148,155),new Vector3D(143,150),
  95. new Vector3D(138,148),new Vector3D(136,148) };
  96. points = Arrays.asList(point0_array);
  97. break;
  98. case X:
  99. Vector3D [] point1_array = {
  100. new Vector3D(87,142),new Vector3D(89,145),new Vector3D(91,148),new Vector3D(93,151),
  101. new Vector3D(96,155),new Vector3D(98,157),new Vector3D(100,160),new Vector3D(102,162),
  102. new Vector3D(106,167),new Vector3D(108,169),new Vector3D(110,171),new Vector3D(115,177),
  103. new Vector3D(119,183),new Vector3D(123,189),new Vector3D(127,193),new Vector3D(129,196),
  104. new Vector3D(133,200),new Vector3D(137,206),new Vector3D(140,209),new Vector3D(143,212),
  105. new Vector3D(146,215),new Vector3D(151,220),new Vector3D(153,222),new Vector3D(155,223),
  106. new Vector3D(157,225),new Vector3D(158,223),new Vector3D(157,218),new Vector3D(155,211),
  107. new Vector3D(154,208),new Vector3D(152,200),new Vector3D(150,189),new Vector3D(148,179),
  108. new Vector3D(147,170),new Vector3D(147,158),new Vector3D(147,148),new Vector3D(147,141),
  109. new Vector3D(147,136),new Vector3D(144,135),new Vector3D(142,137),new Vector3D(140,139),
  110. new Vector3D(135,145),new Vector3D(131,152),new Vector3D(124,163),new Vector3D(116,177),
  111. new Vector3D(108,191),new Vector3D(100,206),new Vector3D(94,217),new Vector3D(91,222),
  112. new Vector3D(89,225),new Vector3D(87,226),new Vector3D(87,224) } ;
  113. points = Arrays.asList(point1_array);
  114. break;
  115. case RECTANGLE:
  116. Vector3D[] point2_array = {
  117. new Vector3D(78,149),new Vector3D(78,153),new Vector3D(78,157),new Vector3D(78,160),
  118. new Vector3D(79,162),new Vector3D(79,164),new Vector3D(79,167),new Vector3D(79,169),
  119. new Vector3D(79,173),new Vector3D(79,178),new Vector3D(79,183),new Vector3D(80,189),
  120. new Vector3D(80,193),new Vector3D(80,198),new Vector3D(80,202),new Vector3D(81,208),
  121. new Vector3D(81,210),new Vector3D(81,216),new Vector3D(82,222),new Vector3D(82,224),
  122. new Vector3D(82,227),new Vector3D(83,229),new Vector3D(83,231),new Vector3D(85,230),
  123. new Vector3D(88,232),new Vector3D(90,233),new Vector3D(92,232),new Vector3D(94,233),
  124. new Vector3D(99,232),new Vector3D(102,233),new Vector3D(106,233),new Vector3D(109,234),
  125. new Vector3D(117,235),new Vector3D(123,236),new Vector3D(126,236),new Vector3D(135,237),
  126. new Vector3D(142,238),new Vector3D(145,238),new Vector3D(152,238),new Vector3D(154,239),
  127. new Vector3D(165,238),new Vector3D(174,237),new Vector3D(179,236),new Vector3D(186,235),
  128. new Vector3D(191,235),new Vector3D(195,233),new Vector3D(197,233),new Vector3D(200,233),
  129. new Vector3D(201,235),new Vector3D(201,233),new Vector3D(199,231),new Vector3D(198,226),
  130. new Vector3D(198,220),new Vector3D(196,207),new Vector3D(195,195),new Vector3D(195,181),
  131. new Vector3D(195,173),new Vector3D(195,163),new Vector3D(194,155),new Vector3D(192,145),
  132. new Vector3D(192,143),new Vector3D(192,138),new Vector3D(191,135),new Vector3D(191,133),
  133. new Vector3D(191,130),new Vector3D(190,128),new Vector3D(188,129),new Vector3D(186,129),
  134. new Vector3D(181,132),new Vector3D(173,131),new Vector3D(162,131),new Vector3D(151,132),
  135. new Vector3D(149,132),new Vector3D(138,132),new Vector3D(136,132),new Vector3D(122,131),
  136. new Vector3D(120,131),new Vector3D(109,130),new Vector3D(107,130),new Vector3D(90,132),
  137. new Vector3D(81,133),new Vector3D(76,133)};
  138. points = Arrays.asList(point2_array);
  139. break;
  140. case CIRCLE:
  141. Vector3D[] point3_array = {
  142. new Vector3D(127,141),new Vector3D(124,140),new Vector3D(120,139),new Vector3D(118,139),
  143. new Vector3D(116,139),new Vector3D(111,140),new Vector3D(109,141),new Vector3D(104,144),
  144. new Vector3D(100,147),new Vector3D(96,152),new Vector3D(93,157),new Vector3D(90,163),
  145. new Vector3D(87,169),new Vector3D(85,175),new Vector3D(83,181),new Vector3D(82,190),
  146. new Vector3D(82,195),new Vector3D(83,200),new Vector3D(84,205),new Vector3D(88,213),
  147. new Vector3D(91,216),new Vector3D(96,219),new Vector3D(103,222),new Vector3D(108,224),
  148. new Vector3D(111,224),new Vector3D(120,224),new Vector3D(133,223),new Vector3D(142,222),
  149. new Vector3D(152,218),new Vector3D(160,214),new Vector3D(167,210),new Vector3D(173,204),
  150. new Vector3D(178,198),new Vector3D(179,196),new Vector3D(182,188),new Vector3D(182,177),
  151. new Vector3D(178,167),new Vector3D(170,150),new Vector3D(163,138),new Vector3D(152,130),
  152. new Vector3D(143,129),new Vector3D(140,131),new Vector3D(129,136),new Vector3D(126,139)};
  153. points = Arrays.asList(point3_array);
  154. break;
  155. case CHECK:
  156. Vector3D[] point4_array = {
  157. new Vector3D(91,185),new Vector3D(93,185),new Vector3D(95,185),new Vector3D(97,185),new Vector3D(100,188),
  158. new Vector3D(102,189),new Vector3D(104,190),new Vector3D(106,193),new Vector3D(108,195),new Vector3D(110,198),
  159. new Vector3D(112,201),new Vector3D(114,204),new Vector3D(115,207),new Vector3D(117,210),new Vector3D(118,212),
  160. new Vector3D(120,214),new Vector3D(121,217),new Vector3D(122,219),new Vector3D(123,222),new Vector3D(124,224),
  161. new Vector3D(126,226),new Vector3D(127,229),new Vector3D(129,231),new Vector3D(130,233),new Vector3D(129,231),
  162. new Vector3D(129,228),new Vector3D(129,226),new Vector3D(129,224),new Vector3D(129,221),new Vector3D(129,218),
  163. new Vector3D(129,212),new Vector3D(129,208),new Vector3D(130,198),new Vector3D(132,189),new Vector3D(134,182),
  164. new Vector3D(137,173),new Vector3D(143,164),new Vector3D(147,157),new Vector3D(151,151),new Vector3D(155,144),
  165. new Vector3D(161,137),new Vector3D(165,131),new Vector3D(171,122),new Vector3D(174,118),new Vector3D(176,114),
  166. new Vector3D(177,112),new Vector3D(177,114),new Vector3D(175,116),new Vector3D(173,118) };
  167. points = Arrays.asList(point4_array);
  168. ;
  169. break;
  170. case CARET:
  171. Vector3D[] point5_array = {
  172. new Vector3D(79,245),new Vector3D(79,242),new Vector3D(79,239),new Vector3D(80,237),new Vector3D(80,234),
  173. new Vector3D(81,232),new Vector3D(82,230),new Vector3D(84,224),new Vector3D(86,220),new Vector3D(86,218),
  174. new Vector3D(87,216),new Vector3D(88,213),new Vector3D(90,207),new Vector3D(91,202),new Vector3D(92,200),
  175. new Vector3D(93,194),new Vector3D(94,192),new Vector3D(96,189),new Vector3D(97,186),new Vector3D(100,179),
  176. new Vector3D(102,173),new Vector3D(105,165),new Vector3D(107,160),new Vector3D(109,158),new Vector3D(112,151),
  177. new Vector3D(115,144),new Vector3D(117,139),new Vector3D(119,136),new Vector3D(119,134),new Vector3D(120,132),
  178. new Vector3D(121,129),new Vector3D(122,127),new Vector3D(124,125),new Vector3D(126,124),new Vector3D(129,125),
  179. new Vector3D(131,127),new Vector3D(132,130),new Vector3D(136,139),new Vector3D(141,154),new Vector3D(145,166),
  180. new Vector3D(151,182),new Vector3D(156,193),new Vector3D(157,196),new Vector3D(161,209),new Vector3D(162,211),
  181. new Vector3D(167,223),new Vector3D(169,229),new Vector3D(170,231),new Vector3D(173,237),new Vector3D(176,242),
  182. new Vector3D(177,244),new Vector3D(179,250),new Vector3D(181,255),new Vector3D(182,257) };
  183. points = Arrays.asList(point5_array);
  184. break;
  185. case QUESTION:
  186. Vector3D[] point6_array = {
  187. new Vector3D(104,145),new Vector3D(103,142),new Vector3D(103,140),new Vector3D(103,138),new Vector3D(103,135),
  188. new Vector3D(104,133),new Vector3D(105,131),new Vector3D(106,128),new Vector3D(107,125),new Vector3D(108,123),
  189. new Vector3D(111,121),new Vector3D(113,118),new Vector3D(115,116),new Vector3D(117,116),new Vector3D(119,116),
  190. new Vector3D(121,115),new Vector3D(124,116),new Vector3D(126,115),new Vector3D(128,114),new Vector3D(130,115),
  191. new Vector3D(133,116),new Vector3D(135,117),new Vector3D(140,120),new Vector3D(142,121),new Vector3D(144,123),
  192. new Vector3D(146,125),new Vector3D(149,127),new Vector3D(150,129),new Vector3D(152,130),new Vector3D(154,132),
  193. new Vector3D(156,134),new Vector3D(158,137),new Vector3D(159,139),new Vector3D(160,141),new Vector3D(160,143),
  194. new Vector3D(160,146),new Vector3D(160,149),new Vector3D(159,153),new Vector3D(158,155),new Vector3D(157,157),
  195. new Vector3D(155,159),new Vector3D(153,161),new Vector3D(151,163),new Vector3D(146,167),new Vector3D(142,170),
  196. new Vector3D(138,172),new Vector3D(134,173),new Vector3D(132,175),new Vector3D(127,175),new Vector3D(124,175),
  197. new Vector3D(122,176),new Vector3D(120,178),new Vector3D(119,180),new Vector3D(119,183),new Vector3D(119,185),
  198. new Vector3D(120,190),new Vector3D(121,194),new Vector3D(122,200),new Vector3D(123,205),new Vector3D(123,211),
  199. new Vector3D(124,215),new Vector3D(124,223),new Vector3D(124,225)};
  200. points = Arrays.asList(point6_array);
  201. break;
  202. case ARROW:
  203. Vector3D[] point7_array = {
  204. new Vector3D(68,222),new Vector3D(70,220),new Vector3D(73,218),new Vector3D(75,217),
  205. new Vector3D(77,215),new Vector3D(80,213),new Vector3D(82,212),new Vector3D(84,210),
  206. new Vector3D(87,209),new Vector3D(89,208),new Vector3D(92,206),new Vector3D(95,204),
  207. new Vector3D(101,201),new Vector3D(106,198),new Vector3D(112,194),new Vector3D(118,191),
  208. new Vector3D(124,187),new Vector3D(127,186),new Vector3D(132,183),new Vector3D(138,181),
  209. new Vector3D(141,180),new Vector3D(146,178),new Vector3D(154,173),new Vector3D(159,171),
  210. new Vector3D(161,170),new Vector3D(166,167),new Vector3D(168,167),new Vector3D(171,166),
  211. new Vector3D(174,164),new Vector3D(177,162),new Vector3D(180,160),new Vector3D(182,158),
  212. new Vector3D(183,156),new Vector3D(181,154),new Vector3D(178,153),new Vector3D(171,153),
  213. new Vector3D(164,153),new Vector3D(160,153),new Vector3D(150,154),new Vector3D(147,155),
  214. new Vector3D(141,157),new Vector3D(137,158),new Vector3D(135,158),new Vector3D(137,158),
  215. new Vector3D(140,157),new Vector3D(143,156),new Vector3D(151,154),new Vector3D(160,152),
  216. new Vector3D(170,149),new Vector3D(179,147),new Vector3D(185,145),new Vector3D(192,144),
  217. new Vector3D(196,144),new Vector3D(198,144),new Vector3D(200,144),new Vector3D(201,147),
  218. new Vector3D(199,149),new Vector3D(194,157),new Vector3D(191,160),new Vector3D(186,167),
  219. new Vector3D(180,176),new Vector3D(177,179),new Vector3D(171,187),new Vector3D(169,189),
  220. new Vector3D(165,194),new Vector3D(164,196)};
  221. points = Arrays.asList(point7_array);
  222. break;
  223. case LEFTSQUAREBRACKET:
  224. Vector3D[] point8_array = {
  225. new Vector3D(140,124),new Vector3D(138,123),new Vector3D(135,122),new Vector3D(133,123),
  226. new Vector3D(130,123),new Vector3D(128,124),new Vector3D(125,125),new Vector3D(122,124),
  227. new Vector3D(120,124),new Vector3D(118,124),new Vector3D(116,125),new Vector3D(113,125),
  228. new Vector3D(111,125),new Vector3D(108,124),new Vector3D(106,125),new Vector3D(104,125),
  229. new Vector3D(102,124),new Vector3D(100,123),new Vector3D(98,123),new Vector3D(95,124),
  230. new Vector3D(93,123),new Vector3D(90,124),new Vector3D(88,124),new Vector3D(85,125),
  231. new Vector3D(83,126),new Vector3D(81,127),new Vector3D(81,129),new Vector3D(82,131),
  232. new Vector3D(82,134),new Vector3D(83,138),new Vector3D(84,141),new Vector3D(84,144),
  233. new Vector3D(85,148),new Vector3D(85,151),new Vector3D(86,156),new Vector3D(86,160),
  234. new Vector3D(86,164),new Vector3D(86,168),new Vector3D(87,171),new Vector3D(87,175),
  235. new Vector3D(87,179),new Vector3D(87,182),new Vector3D(87,186),new Vector3D(88,188),
  236. new Vector3D(88,195),new Vector3D(88,198),new Vector3D(88,201),new Vector3D(88,207),
  237. new Vector3D(89,211),new Vector3D(89,213),new Vector3D(89,217),new Vector3D(89,222),
  238. new Vector3D(88,225),new Vector3D(88,229),new Vector3D(88,231),new Vector3D(88,233),
  239. new Vector3D(88,235),new Vector3D(89,237),new Vector3D(89,240),new Vector3D(89,242),
  240. new Vector3D(91,241),new Vector3D(94,241),new Vector3D(96,240),new Vector3D(98,239),
  241. new Vector3D(105,240),new Vector3D(109,240),new Vector3D(113,239),new Vector3D(116,240),
  242. new Vector3D(121,239),new Vector3D(130,240),new Vector3D(136,237),new Vector3D(139,237),
  243. new Vector3D(144,238),new Vector3D(151,237),new Vector3D(157,236),new Vector3D(159,237)};
  244. points = Arrays.asList(point8_array);
  245. break;
  246. case RIGHTSQUAREBRACKET:
  247. Vector3D[] point9_array = {
  248. new Vector3D(112,138),new Vector3D(112,136),new Vector3D(115,136),new Vector3D(118,137),
  249. new Vector3D(120,136),new Vector3D(123,136),new Vector3D(125,136),new Vector3D(128,136),
  250. new Vector3D(131,136),new Vector3D(134,135),new Vector3D(137,135),new Vector3D(140,134),
  251. new Vector3D(143,133),new Vector3D(145,132),new Vector3D(147,132),new Vector3D(149,132),
  252. new Vector3D(152,132),new Vector3D(153,134),new Vector3D(154,137),new Vector3D(155,141),
  253. new Vector3D(156,144),new Vector3D(157,152),new Vector3D(158,161),new Vector3D(160,170),
  254. new Vector3D(162,182),new Vector3D(164,192),new Vector3D(166,200),new Vector3D(167,209),
  255. new Vector3D(168,214),new Vector3D(168,216),new Vector3D(169,221),new Vector3D(169,223),
  256. new Vector3D(169,228),new Vector3D(169,231),new Vector3D(166,233),new Vector3D(164,234),
  257. new Vector3D(161,235),new Vector3D(155,236),new Vector3D(147,235),new Vector3D(140,233),
  258. new Vector3D(131,233),new Vector3D(124,233),new Vector3D(117,235),new Vector3D(114,238),
  259. new Vector3D(112,238)};
  260. points = Arrays.asList(point9_array);
  261. break;
  262. case V:
  263. Vector3D[] point10_array = {
  264. new Vector3D(89,164),new Vector3D(90,162),new Vector3D(92,162),new Vector3D(94,164),
  265. new Vector3D(95,166),new Vector3D(96,169),new Vector3D(97,171),new Vector3D(99,175),
  266. new Vector3D(101,178),new Vector3D(103,182),new Vector3D(106,189),new Vector3D(108,194),
  267. new Vector3D(111,199),new Vector3D(114,204),new Vector3D(117,209),new Vector3D(119,214),
  268. new Vector3D(122,218),new Vector3D(124,222),new Vector3D(126,225),new Vector3D(128,228),
  269. new Vector3D(130,229),new Vector3D(133,233),new Vector3D(134,236),new Vector3D(136,239),
  270. new Vector3D(138,240),new Vector3D(139,242),new Vector3D(140,244),new Vector3D(142,242),
  271. new Vector3D(142,240),new Vector3D(142,237),new Vector3D(143,235),new Vector3D(143,233),
  272. new Vector3D(145,229),new Vector3D(146,226),new Vector3D(148,217),new Vector3D(149,208),
  273. new Vector3D(149,205),new Vector3D(151,196),new Vector3D(151,193),new Vector3D(153,182),
  274. new Vector3D(155,172),new Vector3D(157,165),new Vector3D(159,160),new Vector3D(162,155),
  275. new Vector3D(164,150),new Vector3D(165,148),new Vector3D(166,146)};
  276. points = Arrays.asList(point10_array);
  277. break;
  278. case DELETE:
  279. Vector3D[] point11_array = {
  280. new Vector3D(123,129),new Vector3D(123,131),new Vector3D(124,133),new Vector3D(125,136),
  281. new Vector3D(127,140),new Vector3D(129,142),new Vector3D(133,148),new Vector3D(137,154),
  282. new Vector3D(143,158),new Vector3D(145,161),new Vector3D(148,164),new Vector3D(153,170),
  283. new Vector3D(158,176),new Vector3D(160,178),new Vector3D(164,183),new Vector3D(168,188),
  284. new Vector3D(171,191),new Vector3D(175,196),new Vector3D(178,200),new Vector3D(180,202),
  285. new Vector3D(181,205),new Vector3D(184,208),new Vector3D(186,210),new Vector3D(187,213),
  286. new Vector3D(188,215),new Vector3D(186,212),new Vector3D(183,211),new Vector3D(177,208),
  287. new Vector3D(169,206),new Vector3D(162,205),new Vector3D(154,207),new Vector3D(145,209),
  288. new Vector3D(137,210),new Vector3D(129,214),new Vector3D(122,217),new Vector3D(118,218),
  289. new Vector3D(111,221),new Vector3D(109,222),new Vector3D(110,219),new Vector3D(112,217),
  290. new Vector3D(118,209),new Vector3D(120,207),new Vector3D(128,196),new Vector3D(135,187),
  291. new Vector3D(138,183),new Vector3D(148,167),new Vector3D(157,153),new Vector3D(163,145),
  292. new Vector3D(165,142),new Vector3D(172,133),new Vector3D(177,127),new Vector3D(179,127),
  293. new Vector3D(180,125)};
  294. points = Arrays.asList(point11_array);
  295. break;
  296. case LEFTCURLYBRACE:
  297. Vector3D[] point12_array = {
  298. new Vector3D(150,116),new Vector3D(147,117),new Vector3D(145,116),new Vector3D(142,116),
  299. new Vector3D(139,117),new Vector3D(136,117),new Vector3D(133,118),new Vector3D(129,121),
  300. new Vector3D(126,122),new Vector3D(123,123),new Vector3D(120,125),new Vector3D(118,127),
  301. new Vector3D(115,128),new Vector3D(113,129),new Vector3D(112,131),new Vector3D(113,134),
  302. new Vector3D(115,134),new Vector3D(117,135),new Vector3D(120,135),new Vector3D(123,137),
  303. new Vector3D(126,138),new Vector3D(129,140),new Vector3D(135,143),new Vector3D(137,144),
  304. new Vector3D(139,147),new Vector3D(141,149),new Vector3D(140,152),new Vector3D(139,155),
  305. new Vector3D(134,159),new Vector3D(131,161),new Vector3D(124,166),new Vector3D(121,166),
  306. new Vector3D(117,166),new Vector3D(114,167),new Vector3D(112,166),new Vector3D(114,164),
  307. new Vector3D(116,163),new Vector3D(118,163),new Vector3D(120,162),new Vector3D(122,163),
  308. new Vector3D(125,164),new Vector3D(127,165),new Vector3D(129,166),new Vector3D(130,168),
  309. new Vector3D(129,171),new Vector3D(127,175),new Vector3D(125,179),new Vector3D(123,184),
  310. new Vector3D(121,190),new Vector3D(120,194),new Vector3D(119,199),new Vector3D(120,202),
  311. new Vector3D(123,207),new Vector3D(127,211),new Vector3D(133,215),new Vector3D(142,219),
  312. new Vector3D(148,220),new Vector3D(151,221)};
  313. points = Arrays.asList(point12_array);
  314. break;
  315. case RIGHTCURLYBRACE:
  316. Vector3D[] point13_array = {
  317. new Vector3D(117,132),new Vector3D(115,132),new Vector3D(115,129),new Vector3D(117,129),
  318. new Vector3D(119,128),new Vector3D(122,127),new Vector3D(125,127),new Vector3D(127,127),
  319. new Vector3D(130,127),new Vector3D(133,129),new Vector3D(136,129),new Vector3D(138,130),
  320. new Vector3D(140,131),new Vector3D(143,134),new Vector3D(144,136),new Vector3D(145,139),
  321. new Vector3D(145,142),new Vector3D(145,145),new Vector3D(145,147),new Vector3D(145,149),
  322. new Vector3D(144,152),new Vector3D(142,157),new Vector3D(141,160),new Vector3D(139,163),
  323. new Vector3D(137,166),new Vector3D(135,167),new Vector3D(133,169),new Vector3D(131,172),
  324. new Vector3D(128,173),new Vector3D(126,176),new Vector3D(125,178),new Vector3D(125,180),
  325. new Vector3D(125,182),new Vector3D(126,184),new Vector3D(128,187),new Vector3D(130,187),
  326. new Vector3D(132,188),new Vector3D(135,189),new Vector3D(140,189),new Vector3D(145,189),
  327. new Vector3D(150,187),new Vector3D(155,186),new Vector3D(157,185),new Vector3D(159,184),
  328. new Vector3D(156,185),new Vector3D(154,185),new Vector3D(149,185),new Vector3D(145,187),
  329. new Vector3D(141,188),new Vector3D(136,191),new Vector3D(134,191),new Vector3D(131,192),
  330. new Vector3D(129,193),new Vector3D(129,195),new Vector3D(129,197),new Vector3D(131,200),
  331. new Vector3D(133,202),new Vector3D(136,206),new Vector3D(139,211),new Vector3D(142,215),
  332. new Vector3D(145,220),new Vector3D(147,225),new Vector3D(148,231),new Vector3D(147,239),
  333. new Vector3D(144,244),new Vector3D(139,248),new Vector3D(134,250),new Vector3D(126,253),
  334. new Vector3D(119,253),new Vector3D(115,253)};
  335. points = Arrays.asList(point13_array);
  336. break;
  337. case STAR:
  338. Vector3D[] point14_array = {
  339. new Vector3D(75,250),new Vector3D(75,247),new Vector3D(77,244),new Vector3D(78,242),
  340. new Vector3D(79,239),new Vector3D(80,237),new Vector3D(82,234),new Vector3D(82,232),
  341. new Vector3D(84,229),new Vector3D(85,225),new Vector3D(87,222),new Vector3D(88,219),
  342. new Vector3D(89,216),new Vector3D(91,212),new Vector3D(92,208),new Vector3D(94,204),
  343. new Vector3D(95,201),new Vector3D(96,196),new Vector3D(97,194),new Vector3D(98,191),
  344. new Vector3D(100,185),new Vector3D(102,178),new Vector3D(104,173),new Vector3D(104,171),
  345. new Vector3D(105,164),new Vector3D(106,158),new Vector3D(107,156),new Vector3D(107,152),
  346. new Vector3D(108,145),new Vector3D(109,141),new Vector3D(110,139),new Vector3D(112,133),
  347. new Vector3D(113,131),new Vector3D(116,127),new Vector3D(117,125),new Vector3D(119,122),
  348. new Vector3D(121,121),new Vector3D(123,120),new Vector3D(125,122),new Vector3D(125,125),
  349. new Vector3D(127,130),new Vector3D(128,133),new Vector3D(131,143),new Vector3D(136,153),
  350. new Vector3D(140,163),new Vector3D(144,172),new Vector3D(145,175),new Vector3D(151,189),
  351. new Vector3D(156,201),new Vector3D(161,213),new Vector3D(166,225),new Vector3D(169,233),
  352. new Vector3D(171,236),new Vector3D(174,243),new Vector3D(177,247),new Vector3D(178,249),
  353. new Vector3D(179,251),new Vector3D(180,253),new Vector3D(180,255),new Vector3D(179,257),
  354. new Vector3D(177,257),new Vector3D(174,255),new Vector3D(169,250),new Vector3D(164,247),
  355. new Vector3D(160,245),new Vector3D(149,238),new Vector3D(138,230),new Vector3D(127,221),
  356. new Vector3D(124,220),new Vector3D(112,212),new Vector3D(110,210),new Vector3D(96,201),
  357. new Vector3D(84,195),new Vector3D(74,190),new Vector3D(64,182),new Vector3D(55,175),
  358. new Vector3D(51,172),new Vector3D(49,170),new Vector3D(51,169),new Vector3D(56,169),
  359. new Vector3D(66,169),new Vector3D(78,168),new Vector3D(92,166),new Vector3D(107,164),
  360. new Vector3D(123,161),new Vector3D(140,162),new Vector3D(156,162),new Vector3D(171,160),
  361. new Vector3D(173,160),new Vector3D(186,160),new Vector3D(195,160),new Vector3D(198,161),
  362. new Vector3D(203,163),new Vector3D(208,163),new Vector3D(206,164),new Vector3D(200,167),
  363. new Vector3D(187,172),new Vector3D(174,179),new Vector3D(172,181),new Vector3D(153,192),
  364. new Vector3D(137,201),new Vector3D(123,211),new Vector3D(112,220),new Vector3D(99,229),
  365. new Vector3D(90,237),new Vector3D(80,244),new Vector3D(73,250),new Vector3D(69,254),
  366. new Vector3D(69,252)};
  367. points = Arrays.asList(point14_array);
  368. break;
  369. case PIGTAIL:
  370. Vector3D[] point15_array = {
  371. new Vector3D(81,219),new Vector3D(84,218),new Vector3D(86,220),new Vector3D(88,220),
  372. new Vector3D(90,220),new Vector3D(92,219),new Vector3D(95,220),new Vector3D(97,219),
  373. new Vector3D(99,220),new Vector3D(102,218),new Vector3D(105,217),new Vector3D(107,216),
  374. new Vector3D(110,216),new Vector3D(113,214),new Vector3D(116,212),new Vector3D(118,210),
  375. new Vector3D(121,208),new Vector3D(124,205),new Vector3D(126,202),new Vector3D(129,199),
  376. new Vector3D(132,196),new Vector3D(136,191),new Vector3D(139,187),new Vector3D(142,182),
  377. new Vector3D(144,179),new Vector3D(146,174),new Vector3D(148,170),new Vector3D(149,168),
  378. new Vector3D(151,162),new Vector3D(152,160),new Vector3D(152,157),new Vector3D(152,155),
  379. new Vector3D(152,151),new Vector3D(152,149),new Vector3D(152,146),new Vector3D(149,142),
  380. new Vector3D(148,139),new Vector3D(145,137),new Vector3D(141,135),new Vector3D(139,135),
  381. new Vector3D(134,136),new Vector3D(130,140),new Vector3D(128,142),new Vector3D(126,145),
  382. new Vector3D(122,150),new Vector3D(119,158),new Vector3D(117,163),new Vector3D(115,170),
  383. new Vector3D(114,175),new Vector3D(117,184),new Vector3D(120,190),new Vector3D(125,199),
  384. new Vector3D(129,203),new Vector3D(133,208),new Vector3D(138,213),new Vector3D(145,215),
  385. new Vector3D(155,218),new Vector3D(164,219),new Vector3D(166,219),new Vector3D(177,219),
  386. new Vector3D(182,218),new Vector3D(192,216),new Vector3D(196,213),new Vector3D(199,212),
  387. new Vector3D(201,211)};
  388. points = Arrays.asList(point15_array);
  389. break;
  390. case PACKAGE:
  391. Vector3D[] point20_array = {
  392. new Vector3D(332,174),new Vector3D(347,173),new Vector3D(363,171),new Vector3D(382,168),
  393. new Vector3D(390,166),new Vector3D(405,163),new Vector3D(419,162),new Vector3D(421,172),
  394. new Vector3D(422,186),new Vector3D(421,203),new Vector3D(419,213),new Vector3D(417,233),
  395. new Vector3D(416,244),new Vector3D(413,261),new Vector3D(411,275),new Vector3D(413,283),
  396. new Vector3D(427,284),new Vector3D(439,283),new Vector3D(447,284),new Vector3D(467,282),
  397. new Vector3D(477,280),new Vector3D(493,279),new Vector3D(508,277),new Vector3D(520,277),
  398. new Vector3D(525,284),new Vector3D(525,295),new Vector3D(522,315),new Vector3D(519,328),
  399. new Vector3D(517,340),new Vector3D(516,354),new Vector3D(513,367),new Vector3D(511,385),
  400. new Vector3D(509,397),new Vector3D(505,410),new Vector3D(502,424),new Vector3D(491,432),
  401. new Vector3D(471,435),new Vector3D(453,434),new Vector3D(439,434),new Vector3D(422,433),
  402. new Vector3D(400,433),new Vector3D(388,431),new Vector3D(367,430),new Vector3D(353,429),
  403. new Vector3D(332,430),new Vector3D(317,427),new Vector3D(311,413),new Vector3D(309,390),
  404. new Vector3D(308,386),new Vector3D(307,370),new Vector3D(308,352),new Vector3D(310,335),
  405. new Vector3D(311,306),new Vector3D(312,289),new Vector3D(310,273),new Vector3D(309,259),
  406. new Vector3D(309,243),new Vector3D(311,226),new Vector3D(315,209),new Vector3D(316,200),
  407. new Vector3D(320,180),new Vector3D(323,164),new Vector3D(331,157),new Vector3D(332,158),
  408. };
  409. points = Arrays.asList(point20_array);
  410. break;
  411. default: break;
  412. }
  413. templates.add(new Template(gesture, points, direction));
  414. }
  415. }