plotboilerplate 1.14.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.md +2 -0
  2. package/changelog.md +57 -0
  3. package/dist/index.esm.js +856 -694
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.esm.min.js +1 -1
  6. package/dist/index.esm.min.js.map +1 -1
  7. package/dist/plotboilerplate.browser.min.js +1 -1
  8. package/dist/plotboilerplate.browser.min.js.map +1 -1
  9. package/dist/plotboilerplate.js +858 -598
  10. package/dist/plotboilerplate.min.js +1 -1
  11. package/package.json +1 -1
  12. package/src/cjs/BezierPath.d.ts +32 -14
  13. package/src/cjs/BezierPath.js +65 -24
  14. package/src/cjs/BezierPath.js.map +1 -1
  15. package/src/cjs/Bounds.d.ts +22 -1
  16. package/src/cjs/Bounds.js +24 -1
  17. package/src/cjs/Bounds.js.map +1 -1
  18. package/src/cjs/Circle.d.ts +15 -13
  19. package/src/cjs/Circle.js +16 -34
  20. package/src/cjs/Circle.js.map +1 -1
  21. package/src/cjs/CircleSector.d.ts +17 -16
  22. package/src/cjs/CircleSector.js +12 -24
  23. package/src/cjs/CircleSector.js.map +1 -1
  24. package/src/cjs/CubicBezierCurve.d.ts +16 -15
  25. package/src/cjs/CubicBezierCurve.js +57 -94
  26. package/src/cjs/CubicBezierCurve.js.map +1 -1
  27. package/src/cjs/KeyHandler.d.ts +10 -3
  28. package/src/cjs/KeyHandler.js +28 -23
  29. package/src/cjs/KeyHandler.js.map +1 -1
  30. package/src/cjs/Line.d.ts +2 -15
  31. package/src/cjs/Line.js +6 -31
  32. package/src/cjs/Line.js.map +1 -1
  33. package/src/cjs/MouseHandler.js +43 -53
  34. package/src/cjs/MouseHandler.js.map +1 -1
  35. package/src/cjs/PBImage.d.ts +15 -13
  36. package/src/cjs/PBImage.js +11 -15
  37. package/src/cjs/PBImage.js.map +1 -1
  38. package/src/cjs/PBText.d.ts +13 -12
  39. package/src/cjs/PBText.js +8 -12
  40. package/src/cjs/PBText.js.map +1 -1
  41. package/src/cjs/PlotBoilerplate.js +3 -2
  42. package/src/cjs/PlotBoilerplate.js.map +1 -1
  43. package/src/cjs/Polygon.d.ts +44 -14
  44. package/src/cjs/Polygon.js +116 -66
  45. package/src/cjs/Polygon.js.map +1 -1
  46. package/src/cjs/Triangle.d.ts +15 -13
  47. package/src/cjs/Triangle.js +23 -64
  48. package/src/cjs/Triangle.js.map +1 -1
  49. package/src/cjs/VEllipse.d.ts +14 -9
  50. package/src/cjs/VEllipse.js +10 -18
  51. package/src/cjs/VEllipse.js.map +1 -1
  52. package/src/cjs/VEllipseSector.d.ts +15 -1
  53. package/src/cjs/VEllipseSector.js +11 -1
  54. package/src/cjs/VEllipseSector.js.map +1 -1
  55. package/src/cjs/Vector.d.ts +3 -15
  56. package/src/cjs/Vector.js +9 -49
  57. package/src/cjs/Vector.js.map +1 -1
  58. package/src/cjs/VertTuple.d.ts +15 -1
  59. package/src/cjs/VertTuple.js +14 -19
  60. package/src/cjs/VertTuple.js.map +1 -1
  61. package/src/cjs/Vertex.d.ts +47 -13
  62. package/src/cjs/Vertex.js +62 -22
  63. package/src/cjs/Vertex.js.map +1 -1
  64. package/src/cjs/VertexListeners.d.ts +12 -8
  65. package/src/cjs/VertexListeners.js +18 -25
  66. package/src/cjs/VertexListeners.js.map +1 -1
  67. package/src/cjs/draw.d.ts +41 -2
  68. package/src/cjs/draw.js +140 -3
  69. package/src/cjs/draw.js.map +1 -1
  70. package/src/cjs/drawgl.d.ts +38 -2
  71. package/src/cjs/drawgl.js +41 -2
  72. package/src/cjs/drawgl.js.map +1 -1
  73. package/src/cjs/drawutilssvg.d.ts +66 -3
  74. package/src/cjs/drawutilssvg.js +140 -15
  75. package/src/cjs/drawutilssvg.js.map +1 -1
  76. package/src/cjs/index.d.ts +0 -1
  77. package/src/cjs/index.js +0 -1
  78. package/src/cjs/index.js.map +1 -1
  79. package/src/cjs/interfaces/DrawLib.d.ts +61 -26
  80. package/src/cjs/interfaces/DrawLib.js +2 -0
  81. package/src/cjs/interfaces/DrawLib.js.map +1 -1
  82. package/src/cjs/interfaces/core.d.ts +0 -12
  83. package/src/cjs/module.d.ts +1 -3
  84. package/src/cjs/module.js +2 -5
  85. package/src/cjs/module.js.map +1 -1
  86. package/src/cjs/utils/creategui.js +16 -2
  87. package/src/cjs/utils/datastructures/Girih.d.ts +5 -0
  88. package/src/cjs/utils/datastructures/Girih.js +18 -14
  89. package/src/cjs/utils/datastructures/Girih.js.map +1 -1
  90. package/src/cjs/utils/datastructures/GirihPenroseRhombus.js +42 -25
  91. package/src/cjs/utils/datastructures/GirihPenroseRhombus.js.map +1 -1
  92. package/src/cjs/utils/datastructures/GirihTile.js +2 -13
  93. package/src/cjs/utils/datastructures/GirihTile.js.map +1 -1
  94. package/src/cjs/utils/findInVertexArray.d.ts +19 -0
  95. package/src/cjs/utils/findInVertexArray.js +29 -0
  96. package/src/cjs/utils/findInVertexArray.js.map +1 -0
  97. package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +17 -1
  98. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +50 -32
  99. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  100. package/src/cjs/utils/io/DndFileHandler.d.ts +63 -0
  101. package/src/cjs/utils/io/DndFileHandler.js +112 -0
  102. package/src/cjs/utils/io/DndFileHandler.js.map +1 -0
  103. package/src/cjs/utils/io/FileDrop.d.ts +98 -0
  104. package/src/cjs/utils/io/FileDrop.js +142 -0
  105. package/src/cjs/utils/io/FileDrop.js.map +1 -0
  106. package/src/esm/BezierPath.d.ts +32 -14
  107. package/src/esm/BezierPath.js +65 -24
  108. package/src/esm/BezierPath.js.map +1 -1
  109. package/src/esm/Bounds.d.ts +22 -1
  110. package/src/esm/Bounds.js +24 -1
  111. package/src/esm/Bounds.js.map +1 -1
  112. package/src/esm/Circle.d.ts +15 -13
  113. package/src/esm/Circle.js +16 -34
  114. package/src/esm/Circle.js.map +1 -1
  115. package/src/esm/CircleSector.d.ts +17 -16
  116. package/src/esm/CircleSector.js +12 -24
  117. package/src/esm/CircleSector.js.map +1 -1
  118. package/src/esm/CubicBezierCurve.d.ts +16 -15
  119. package/src/esm/CubicBezierCurve.js +57 -94
  120. package/src/esm/CubicBezierCurve.js.map +1 -1
  121. package/src/esm/KeyHandler.d.ts +10 -3
  122. package/src/esm/KeyHandler.js +28 -23
  123. package/src/esm/KeyHandler.js.map +1 -1
  124. package/src/esm/Line.d.ts +2 -15
  125. package/src/esm/Line.js +6 -31
  126. package/src/esm/Line.js.map +1 -1
  127. package/src/esm/MouseHandler.js +43 -53
  128. package/src/esm/MouseHandler.js.map +1 -1
  129. package/src/esm/PBImage.d.ts +15 -13
  130. package/src/esm/PBImage.js +11 -15
  131. package/src/esm/PBImage.js.map +1 -1
  132. package/src/esm/PBText.d.ts +13 -12
  133. package/src/esm/PBText.js +8 -12
  134. package/src/esm/PBText.js.map +1 -1
  135. package/src/esm/PlotBoilerplate.js +3 -2
  136. package/src/esm/PlotBoilerplate.js.map +1 -1
  137. package/src/esm/Polygon.d.ts +44 -14
  138. package/src/esm/Polygon.js +116 -66
  139. package/src/esm/Polygon.js.map +1 -1
  140. package/src/esm/Triangle.d.ts +15 -13
  141. package/src/esm/Triangle.js +23 -64
  142. package/src/esm/Triangle.js.map +1 -1
  143. package/src/esm/VEllipse.d.ts +14 -9
  144. package/src/esm/VEllipse.js +10 -18
  145. package/src/esm/VEllipse.js.map +1 -1
  146. package/src/esm/VEllipseSector.d.ts +15 -1
  147. package/src/esm/VEllipseSector.js +11 -1
  148. package/src/esm/VEllipseSector.js.map +1 -1
  149. package/src/esm/Vector.d.ts +3 -15
  150. package/src/esm/Vector.js +9 -49
  151. package/src/esm/Vector.js.map +1 -1
  152. package/src/esm/VertTuple.d.ts +15 -1
  153. package/src/esm/VertTuple.js +14 -19
  154. package/src/esm/VertTuple.js.map +1 -1
  155. package/src/esm/Vertex.d.ts +47 -13
  156. package/src/esm/Vertex.js +62 -22
  157. package/src/esm/Vertex.js.map +1 -1
  158. package/src/esm/VertexListeners.d.ts +12 -8
  159. package/src/esm/VertexListeners.js +18 -25
  160. package/src/esm/VertexListeners.js.map +1 -1
  161. package/src/esm/draw.d.ts +41 -2
  162. package/src/esm/draw.js +139 -3
  163. package/src/esm/draw.js.map +1 -1
  164. package/src/esm/drawgl.d.ts +38 -2
  165. package/src/esm/drawgl.js +41 -2
  166. package/src/esm/drawgl.js.map +1 -1
  167. package/src/esm/drawutilssvg.d.ts +66 -3
  168. package/src/esm/drawutilssvg.js +140 -15
  169. package/src/esm/drawutilssvg.js.map +1 -1
  170. package/src/esm/index.d.ts +0 -1
  171. package/src/esm/index.js +0 -1
  172. package/src/esm/index.js.map +1 -1
  173. package/src/esm/interfaces/DrawLib.d.ts +61 -26
  174. package/src/esm/interfaces/DrawLib.js +2 -0
  175. package/src/esm/interfaces/DrawLib.js.map +1 -1
  176. package/src/esm/interfaces/core.d.ts +0 -12
  177. package/src/esm/module.d.ts +1 -3
  178. package/src/esm/module.js +5 -4
  179. package/src/esm/module.js.map +1 -1
  180. package/src/esm/utils/datastructures/Girih.d.ts +5 -0
  181. package/src/esm/utils/datastructures/Girih.js +18 -14
  182. package/src/esm/utils/datastructures/Girih.js.map +1 -1
  183. package/src/esm/utils/datastructures/GirihPenroseRhombus.js +42 -25
  184. package/src/esm/utils/datastructures/GirihPenroseRhombus.js.map +1 -1
  185. package/src/esm/utils/datastructures/GirihTile.js +2 -13
  186. package/src/esm/utils/datastructures/GirihTile.js.map +1 -1
  187. package/src/esm/utils/findInVertexArray.d.ts +19 -0
  188. package/src/esm/utils/findInVertexArray.js +25 -0
  189. package/src/esm/utils/findInVertexArray.js.map +1 -0
  190. package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +17 -1
  191. package/src/esm/utils/helpers/BezierPathInteractionHelper.js +49 -32
  192. package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  193. package/src/esm/utils/io/DndFileHandler.d.ts +63 -0
  194. package/src/esm/utils/io/DndFileHandler.js +106 -0
  195. package/src/esm/utils/io/DndFileHandler.js.map +1 -0
  196. package/src/esm/utils/io/FileDrop.d.ts +98 -0
  197. package/src/esm/utils/io/FileDrop.js +136 -0
  198. package/src/esm/utils/io/FileDrop.js.map +1 -0
  199. package/src/ts/BezierPath.ts +78 -22
  200. package/src/ts/Bounds.ts +25 -1
  201. package/src/ts/Circle.ts +187 -200
  202. package/src/ts/CircleSector.ts +141 -141
  203. package/src/ts/CubicBezierCurve.ts +738 -810
  204. package/src/ts/KeyHandler.ts +221 -212
  205. package/src/ts/Line.ts +48 -80
  206. package/src/ts/MouseHandler.ts +356 -368
  207. package/src/ts/PBImage.ts +67 -69
  208. package/src/ts/PBText.ts +16 -14
  209. package/src/ts/PlotBoilerplate.ts +4 -2
  210. package/src/ts/Polygon.ts +493 -451
  211. package/src/ts/Triangle.ts +444 -489
  212. package/src/ts/VEllipse.ts +18 -17
  213. package/src/ts/VEllipseSector.ts +20 -1
  214. package/src/ts/Vector.ts +124 -160
  215. package/src/ts/VertTuple.ts +333 -338
  216. package/src/ts/Vertex.ts +75 -21
  217. package/src/ts/VertexListeners.ts +248 -266
  218. package/src/ts/draw.ts +192 -3
  219. package/src/ts/drawgl.ts +44 -2
  220. package/src/ts/drawutilssvg.ts +181 -15
  221. package/src/ts/index.ts +0 -1
  222. package/src/ts/interfaces/DrawLib.ts +69 -26
  223. package/src/ts/interfaces/core.ts +0 -11
  224. package/src/ts/module.ts +2 -4
  225. package/src/ts/utils/datastructures/Girih.ts +204 -209
  226. package/src/ts/utils/datastructures/GirihPenroseRhombus.ts +170 -152
  227. package/src/ts/utils/datastructures/GirihTile.ts +394 -419
  228. package/src/ts/utils/findInVertexArray.ts +28 -0
  229. package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +56 -34
  230. package/src/ts/utils/io/FileDrop.ts +178 -0
  231. package/src/ts/SVGBuilder.ts +0 -109
  232. package/src/ts/utils/algorithms/sh-tmp.ts~ +0 -59
@@ -15,8 +15,6 @@ import { GirihPenroseRhombus } from "./GirihPenroseRhombus";
15
15
  import { GirihPentagon } from "./GirihPentagon";
16
16
  import { GirihRhombus } from "./GirihRhombus";
17
17
 
18
-
19
-
20
18
  /**
21
19
  * @classdesc The Girih datastructure for generating patterns.
22
20
  *
@@ -30,210 +28,207 @@ import { GirihRhombus } from "./GirihRhombus";
30
28
  * @requires GirihRhombus
31
29
  */
32
30
  export class Girih {
33
-
34
- /**
35
- * The edge length to use in this Girih pattern.
36
- *
37
- * @member {number}
38
- * @memberof Girih
39
- * @type {number}
40
- * @instance
41
- */
42
- public readonly edgeLength:number;
43
-
44
- /**
45
- * An array of all available Girih tiles. Use them as templates for copy-and-paste.
46
- *
47
- * @member {Array<GirihTile>}
48
- * @memberof Girih
49
- * @type {Array<GirihTile>}
50
- * @instance
51
- */
52
- public readonly TILE_TEMPLATES:Array<GirihTile>;
53
-
54
- /**
55
- * The actual set of Girih tiles used in this Girih pattern.
56
- *
57
- * @member {Array<GirihTile>}
58
- * @memberof Girih
59
- * @type {Array<GirihTile>}
60
- * @instance
61
- */
62
- public readonly tiles:Array<GirihTile>;
63
-
64
-
65
-
66
- /**
67
- * Create a new empty Girih pattern.
68
- *
69
- * @constructor
70
- * @memberof Girih
71
- * @param {number} edgeLength
72
- */
73
- constructor( edgeLength:number ) {
74
- this.edgeLength = edgeLength;
75
-
76
- // Initialize templates, one for each Girih tile type.
77
- // The template array will be filled on initialization (see below).
78
- this.TILE_TEMPLATES = [];
79
-
80
- // The set of all Girih tiles in scene
81
- this.tiles = [];
82
-
83
- this.initTemplates( edgeLength );
84
- };
85
-
86
-
87
- /**
88
- * Initialize the TILE_TEMPLATES array.
89
- *
90
- * @name initTemplates
91
- * @private
92
- * @memberof Girih
93
- * @instance
94
- * @param {number} edgeLength - The edge length to use for the template tiles.
95
- * @return {void}
96
- */
97
- private initTemplates( edgeLength:number ) : void {
98
- // Positions actually don't matter here.
99
- // Tiles will be moved to correct position conerning adjacency.
100
- var decagon = new GirihDecagon( new Vertex(0,0), edgeLength );
101
- var pentagon = new GirihPentagon( new Vertex(0,0), edgeLength );
102
- var hexagon = new GirihHexagon( new Vertex(0,0), edgeLength );
103
- var bowtie = new GirihBowtie( new Vertex(0,0), edgeLength );
104
- var rhombus = new GirihRhombus( new Vertex(0,0), edgeLength );
105
- var penrose = new GirihPenroseRhombus( new Vertex(0,0), edgeLength, true ); // Add center polygon
106
-
107
- // Add tiles to array and put them in the correct adjacency position.
108
- this.TILE_TEMPLATES.push( decagon );
109
- this.TILE_TEMPLATES.push( decagon.transformTilePositionToAdjacency( 2, pentagon ) );
110
- this.TILE_TEMPLATES.push( pentagon.transformTilePositionToAdjacency( 1, penrose ) );
111
- this.TILE_TEMPLATES.push( penrose.transformTilePositionToAdjacency( 3, hexagon ) );
112
- this.TILE_TEMPLATES.push( decagon.transformTilePositionToAdjacency( 5, bowtie ) );
113
- this.TILE_TEMPLATES.push( pentagon.transformTilePositionToAdjacency( 4, rhombus ) );
114
- };
115
-
116
-
117
- /**
118
- * Add a new tile to this Girih pattern.
119
- *
120
- * @name addTile
121
- * @memberof Girih
122
- * @instance
123
- * @param {GirihTile} tile - The tile to add (instance must not already be part of this pattern).
124
- * @return {void}
125
- */
126
- addTile( tile:GirihTile ) : void {
127
- this.tiles.push( tile );
128
- };
129
-
130
-
131
- /**
132
- * Remove the tile at given array position. The index must be inside valid bounds.
133
- *
134
- * @name removeTile
135
- * @memberof Girih
136
- * @instance
137
- * @param {number} index - The index in the `tiles` Array.
138
- * @return {void}
139
- */
140
- removeTileAt( index:number ) : void {
141
- this.tiles.splice( index, 1 );
142
- };
143
-
144
-
145
- /**
146
- * Find that tile (index) which contains the given position. First match will be returned.
147
- *
148
- * @name locateContainingTile
149
- * @memberof Girih
150
- * @instance
151
- * @param {Vertex} position
152
- * @return {number} The index of the containing tile or -1 if none was found.
153
- **/
154
- locateConatiningTile( position:Vertex ) : number {
155
- for( var i = 0; i < this.tiles.length; i++ ) {
156
- if( this.tiles[i].containsVert( position ) )
157
- return i;
158
- }
159
- return -1;
160
- };
161
-
162
-
163
- /**
164
- * Turn the tile the mouse is hovering over.
165
- * The turnCount is ab abstract number: -1 for one turn left, +1 for one turn right.
166
- * The turning angle is defined by the tile with the lowest turn symmetry: the Decagon,
167
- * so angle is 36°.
168
- *
169
- * @name turnTile
170
- * @memberof Girih
171
- * @instance
172
- * @param {number} tileIndex - The index of the tile to rotate.
173
- * @param {number} turnCount - A discrete number indicating the number of turn steps.
174
- * @return {void}
175
- */
176
- turnTile( tileIndex:number, turnCount:number ) : void {
177
- if( tileIndex == -1 ) // TODO: still required?
178
- return;
179
- const tile : GirihTile = this.tiles[tileIndex];
180
- tile.rotate( turnCount * Math.PI*2/tile.symmetry );
181
- };
182
-
183
-
184
- /**
185
- * Move that tile the mouse is hovering over.
186
- * The move amounts are abstract numbers, 1 indicating one unit along each axis.
187
- *
188
- * @name moveTile
189
- * @memberof Girih
190
- * @instance
191
- * @param {number} tileIndex - The index of the tile to rotate.
192
- * @param {number} moveXAmount - The amount to move along the x axis (in pixels).
193
- * @param {number} moveYAmount - The amount to move along the y axis (in pixels).
194
- * @return {void}
195
- */
196
- moveTile( tileIndex:number, moveXAmount:number, moveYAmount:number ) : void {
197
- if( tileIndex == -1 ) // TODO: still required?
198
- return;
199
- const tile : GirihTile = this.tiles[tileIndex];
200
- tile.move( { x: moveXAmount*10, y : moveYAmount*10 } );
201
- };
202
-
203
-
204
- /**
205
- * Find all possible adjadent tiles and their locations (type, rotation and offset). The
206
- * function will return an array of all possible tiles matching at the given tile and edge.
207
- *
208
- * @name findPossibleAdjacentTiles
209
- * @memberof Girih
210
- * @instance
211
- * @param {number} tileIndex - The index of the tile to rotate.
212
- * @param {number} edgeIndex - The index of the tile's edge.
213
- * @return {Array<GirihTile>} - An array of possible adjecent tiles (already positioned and rotated).
214
- */
215
- findPossibleAdjacentTiles( tileIndex:number, edgeIndex:number ) : Array<GirihTile> {
216
- var adjTiles : Array<GirihTile> = [];
217
- if( tileIndex == -1 || edgeIndex == -1 ) // TODO: still required?
218
- return [];
219
-
220
- let template : GirihTile = null;
221
- for( var i in this.TILE_TEMPLATES ) {
222
- template = this.TILE_TEMPLATES[ i ].clone();
223
- // Find all rotations and positions for that tile to match
224
- const foundTiles : Array<GirihTile> =
225
- this.tiles[tileIndex].transformTileToAdjacencies(
226
- edgeIndex,
227
- template
228
- );
229
- if( foundTiles.length != 0 ) {
230
- adjTiles = adjTiles.concat( foundTiles );
231
- }
232
- }
233
- // Set pointer to save range.
234
- // previewTilePointer = Math.min( adjTiles.length-1, previewTiilePointer );
235
- return adjTiles;
236
- };
237
-
238
- }; // END class Girih
239
-
31
+ /**
32
+ * The edge length to use in this Girih pattern.
33
+ *
34
+ * @member {number}
35
+ * @memberof Girih
36
+ * @type {number}
37
+ * @instance
38
+ */
39
+ public readonly edgeLength: number;
40
+
41
+ /**
42
+ * An array of all available Girih tiles. Use them as templates for copy-and-paste.
43
+ *
44
+ * @member {Array<GirihTile>}
45
+ * @memberof Girih
46
+ * @type {Array<GirihTile>}
47
+ * @instance
48
+ */
49
+ public readonly TILE_TEMPLATES: Array<GirihTile>;
50
+
51
+ /**
52
+ * The actual set of Girih tiles used in this Girih pattern.
53
+ *
54
+ * @member {Array<GirihTile>}
55
+ * @memberof Girih
56
+ * @type {Array<GirihTile>}
57
+ * @instance
58
+ */
59
+ public readonly tiles: Array<GirihTile>;
60
+
61
+ /**
62
+ * Create a new empty Girih pattern.
63
+ *
64
+ * @constructor
65
+ * @memberof Girih
66
+ * @param {number} edgeLength
67
+ */
68
+ constructor(edgeLength: number) {
69
+ this.edgeLength = edgeLength;
70
+
71
+ // Initialize templates, one for each Girih tile type.
72
+ // The template array will be filled on initialization (see below).
73
+ this.TILE_TEMPLATES = [];
74
+
75
+ // The set of all Girih tiles in scene
76
+ this.tiles = [];
77
+
78
+ this.initTemplates(edgeLength);
79
+ }
80
+
81
+ /**
82
+ * Initialize the TILE_TEMPLATES array.
83
+ *
84
+ * @name initTemplates
85
+ * @private
86
+ * @memberof Girih
87
+ * @instance
88
+ * @param {number} edgeLength - The edge length to use for the template tiles.
89
+ * @return {void}
90
+ */
91
+ private initTemplates(edgeLength: number): void {
92
+ // Positions actually don't matter here.
93
+ // Tiles will be moved to correct position conerning adjacency.
94
+ var decagon = new GirihDecagon(new Vertex(0, 0), edgeLength);
95
+ var pentagon = new GirihPentagon(new Vertex(0, 0), edgeLength);
96
+ var hexagon = new GirihHexagon(new Vertex(0, 0), edgeLength);
97
+ var bowtie = new GirihBowtie(new Vertex(0, 0), edgeLength);
98
+ var rhombus = new GirihRhombus(new Vertex(0, 0), edgeLength);
99
+ var penrose = new GirihPenroseRhombus(new Vertex(0, 0), edgeLength, true); // Add center polygon
100
+
101
+ // Add tiles to array and put them in the correct adjacency position.
102
+ this.TILE_TEMPLATES.push(decagon);
103
+ this.TILE_TEMPLATES.push(decagon.transformTilePositionToAdjacency(2, pentagon));
104
+ this.TILE_TEMPLATES.push(pentagon.transformTilePositionToAdjacency(1, penrose));
105
+ this.TILE_TEMPLATES.push(penrose.transformTilePositionToAdjacency(3, hexagon));
106
+ this.TILE_TEMPLATES.push(decagon.transformTilePositionToAdjacency(5, bowtie));
107
+ this.TILE_TEMPLATES.push(pentagon.transformTilePositionToAdjacency(4, rhombus));
108
+ }
109
+
110
+ /**
111
+ * Add a new tile to this Girih pattern.
112
+ *
113
+ * @name addTile
114
+ * @memberof Girih
115
+ * @instance
116
+ * @param {GirihTile} tile - The tile to add (instance must not already be part of this pattern).
117
+ * @return {void}
118
+ */
119
+ addTile(tile: GirihTile): void {
120
+ this.tiles.push(tile);
121
+ }
122
+
123
+ /**
124
+ * Remove the tile at given array position. The index must be inside valid bounds.
125
+ *
126
+ * @name removeTile
127
+ * @memberof Girih
128
+ * @instance
129
+ * @param {number} index - The index in the `tiles` Array.
130
+ * @return {void}
131
+ */
132
+ removeTileAt(index: number): void {
133
+ this.tiles.splice(index, 1);
134
+ }
135
+
136
+ /**
137
+ *
138
+ * @param tiles
139
+ */
140
+ replaceTiles(tiles: GirihTile): void {
141
+ this.tiles.splice(0, this.tiles.length);
142
+ for (var i in tiles) {
143
+ this.addTile(tiles[i]);
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Find that tile (index) which contains the given position. First match will be returned.
149
+ *
150
+ * @name locateContainingTile
151
+ * @memberof Girih
152
+ * @instance
153
+ * @param {Vertex} position
154
+ * @return {number} The index of the containing tile or -1 if none was found.
155
+ **/
156
+ locateConatiningTile(position: Vertex): number {
157
+ for (var i = 0; i < this.tiles.length; i++) {
158
+ if (this.tiles[i].containsVert(position)) return i;
159
+ }
160
+ return -1;
161
+ }
162
+
163
+ /**
164
+ * Turn the tile the mouse is hovering over.
165
+ * The turnCount is ab abstract number: -1 for one turn left, +1 for one turn right.
166
+ * The turning angle is defined by the tile with the lowest turn symmetry: the Decagon,
167
+ * so angle is 36°.
168
+ *
169
+ * @name turnTile
170
+ * @memberof Girih
171
+ * @instance
172
+ * @param {number} tileIndex - The index of the tile to rotate.
173
+ * @param {number} turnCount - A discrete number indicating the number of turn steps.
174
+ * @return {void}
175
+ */
176
+ turnTile(tileIndex: number, turnCount: number): void {
177
+ if (tileIndex == -1)
178
+ // TODO: still required?
179
+ return;
180
+ const tile: GirihTile = this.tiles[tileIndex];
181
+ tile.rotate((turnCount * Math.PI * 2) / tile.symmetry);
182
+ }
183
+
184
+ /**
185
+ * Move that tile the mouse is hovering over.
186
+ * The move amounts are abstract numbers, 1 indicating one unit along each axis.
187
+ *
188
+ * @name moveTile
189
+ * @memberof Girih
190
+ * @instance
191
+ * @param {number} tileIndex - The index of the tile to rotate.
192
+ * @param {number} moveXAmount - The amount to move along the x axis (in pixels).
193
+ * @param {number} moveYAmount - The amount to move along the y axis (in pixels).
194
+ * @return {void}
195
+ */
196
+ moveTile(tileIndex: number, moveXAmount: number, moveYAmount: number): void {
197
+ if (tileIndex == -1)
198
+ // TODO: still required?
199
+ return;
200
+ const tile: GirihTile = this.tiles[tileIndex];
201
+ tile.move({ x: moveXAmount * 10, y: moveYAmount * 10 });
202
+ }
203
+
204
+ /**
205
+ * Find all possible adjadent tiles and their locations (type, rotation and offset). The
206
+ * function will return an array of all possible tiles matching at the given tile and edge.
207
+ *
208
+ * @name findPossibleAdjacentTiles
209
+ * @memberof Girih
210
+ * @instance
211
+ * @param {number} tileIndex - The index of the tile to rotate.
212
+ * @param {number} edgeIndex - The index of the tile's edge.
213
+ * @return {Array<GirihTile>} - An array of possible adjecent tiles (already positioned and rotated).
214
+ */
215
+ findPossibleAdjacentTiles(tileIndex: number, edgeIndex: number): Array<GirihTile> {
216
+ var adjTiles: Array<GirihTile> = [];
217
+ if (tileIndex == -1 || edgeIndex == -1)
218
+ // TODO: still required?
219
+ return [];
220
+
221
+ let template: GirihTile = null;
222
+ for (var i in this.TILE_TEMPLATES) {
223
+ template = this.TILE_TEMPLATES[i].clone();
224
+ // Find all rotations and positions for that tile to match
225
+ const foundTiles: Array<GirihTile> = this.tiles[tileIndex].transformTileToAdjacencies(edgeIndex, template);
226
+ if (foundTiles.length != 0) {
227
+ adjTiles = adjTiles.concat(foundTiles);
228
+ }
229
+ }
230
+ // Set pointer to save range.
231
+ // previewTilePointer = Math.min( adjTiles.length-1, previewTiilePointer );
232
+ return adjTiles;
233
+ }
234
+ } // END class Girih