processing 0.5.32 → 0.5.34
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog.md +49 -1
- data/VERSION +1 -1
- data/lib/processing/all.rb +3 -1
- data/lib/processing/context.rb +232 -16
- data/lib/processing/events.rb +22 -0
- data/lib/processing/font.rb +5 -0
- data/lib/processing/graphics.rb +11 -2
- data/lib/processing/graphics_context.rb +968 -74
- data/lib/processing/image.rb +92 -1
- data/lib/processing/shader.rb +29 -16
- data/lib/processing/shape.rb +268 -12
- data/lib/processing/vector.rb +126 -0
- data/lib/processing/window.rb +98 -58
- data/processing.gemspec +4 -4
- data/test/helper.rb +5 -2
- data/test/p5.rb +1 -1
- data/test/test_font.rb +1 -1
- data/test/test_graphics_context.rb +442 -8
- data/test/test_utility.rb +0 -19
- metadata +12 -11
data/lib/processing/shape.rb
CHANGED
@@ -3,6 +3,8 @@ module Processing
|
|
3
3
|
|
4
4
|
# Shape object.
|
5
5
|
#
|
6
|
+
# @see https://processing.org/reference/PShape.html
|
7
|
+
#
|
6
8
|
class Shape
|
7
9
|
|
8
10
|
# @private
|
@@ -18,6 +20,8 @@ module Processing
|
|
18
20
|
#
|
19
21
|
# @return [Numeric] width of shape
|
20
22
|
#
|
23
|
+
# @see https://processing.org/reference/PShape_width.html
|
24
|
+
#
|
21
25
|
def width()
|
22
26
|
polygon = getInternal__ or return 0
|
23
27
|
(@bounds ||= polygon.bounds).width
|
@@ -27,6 +31,8 @@ module Processing
|
|
27
31
|
#
|
28
32
|
# @return [Numeric] height of shape
|
29
33
|
#
|
34
|
+
# @see https://processing.org/reference/PShape_height.html
|
35
|
+
#
|
30
36
|
def height()
|
31
37
|
polygon = getInternal__ or return 0
|
32
38
|
(@bounds ||= polygon.bounds).height
|
@@ -39,6 +45,8 @@ module Processing
|
|
39
45
|
#
|
40
46
|
# @return [Boolean] visible or not
|
41
47
|
#
|
48
|
+
# @see https://processing.org/reference/PShape_isVisible_.html
|
49
|
+
#
|
42
50
|
def isVisible()
|
43
51
|
@visible
|
44
52
|
end
|
@@ -49,11 +57,19 @@ module Processing
|
|
49
57
|
#
|
50
58
|
# @return [nil] nil
|
51
59
|
#
|
60
|
+
# @see https://processing.org/reference/PShape_setVisible_.html
|
61
|
+
#
|
52
62
|
def setVisible(visible)
|
53
63
|
@visible = !!visible
|
54
64
|
nil
|
55
65
|
end
|
56
66
|
|
67
|
+
# Starts shape data definition.
|
68
|
+
#
|
69
|
+
# @return [nil] nil
|
70
|
+
#
|
71
|
+
# @see https://processing.org/reference/PShape_beginShape_.html
|
72
|
+
#
|
57
73
|
def beginShape(type = nil)
|
58
74
|
raise "beginShape() cannot be called twice" if drawingShape__
|
59
75
|
@type = type
|
@@ -67,6 +83,12 @@ module Processing
|
|
67
83
|
nil
|
68
84
|
end
|
69
85
|
|
86
|
+
# Ends shape data definition.
|
87
|
+
#
|
88
|
+
# @return [nil] nil
|
89
|
+
#
|
90
|
+
# @see https://processing.org/reference/PShape_endShape_.html
|
91
|
+
#
|
70
92
|
def endShape(close = nil)
|
71
93
|
raise "endShape() must be called after beginShape()" unless drawingShape__
|
72
94
|
@close = close == GraphicsContext::CLOSE || @contours.size > 0
|
@@ -78,12 +100,24 @@ module Processing
|
|
78
100
|
nil
|
79
101
|
end
|
80
102
|
|
103
|
+
# Starts a new contour definition.
|
104
|
+
#
|
105
|
+
# @return [nil] nil
|
106
|
+
#
|
107
|
+
# @see https://processing.org/reference/PShape_beginContour_.html
|
108
|
+
#
|
81
109
|
def beginContour()
|
82
110
|
raise "beginContour() must be called after beginShape()" unless drawingShape__
|
83
111
|
@contourPoints, @contourColors, @contourTexCoords = [], [], []
|
84
112
|
nil
|
85
113
|
end
|
86
114
|
|
115
|
+
# Ends contour definition.
|
116
|
+
#
|
117
|
+
# @return [nil] nil
|
118
|
+
#
|
119
|
+
# @see https://processing.org/reference/PShape_endContour_.html
|
120
|
+
#
|
87
121
|
def endContour()
|
88
122
|
raise "endContour() must be called after beginContour()" unless drawingContour__
|
89
123
|
@contours << Rays::Polyline.new(
|
@@ -93,6 +127,21 @@ module Processing
|
|
93
127
|
nil
|
94
128
|
end
|
95
129
|
|
130
|
+
# Append vertex for shape polygon.
|
131
|
+
#
|
132
|
+
# @overload vertex(x, y)
|
133
|
+
# @overload vertex(x, y, u, v)
|
134
|
+
#
|
135
|
+
# @param x [Numeric] x position of vertex
|
136
|
+
# @param y [Numeric] y position of vertex
|
137
|
+
# @param u [Numeric] u texture coordinate of vertex
|
138
|
+
# @param v [Numeric] v texture coordinate of vertex
|
139
|
+
#
|
140
|
+
# @return [nil] nil
|
141
|
+
#
|
142
|
+
# @see https://processing.org/reference/vertex_.html
|
143
|
+
# @see https://p5js.org/reference/#/p5/vertex
|
144
|
+
#
|
96
145
|
def vertex(x, y, u = nil, v = nil)
|
97
146
|
raise "vertex() must be called after beginShape()" unless drawingShape__
|
98
147
|
raise "Either 'u' or 'v' is missing" if (u == nil) != (v == nil)
|
@@ -108,8 +157,19 @@ module Processing
|
|
108
157
|
@colors << color
|
109
158
|
@texcoords << u << v
|
110
159
|
end
|
160
|
+
nil
|
111
161
|
end
|
112
162
|
|
163
|
+
# Append curve vertex for shape polygon.
|
164
|
+
#
|
165
|
+
# @param x [Numeric] x position of vertex
|
166
|
+
# @param y [Numeric] y position of vertex
|
167
|
+
#
|
168
|
+
# @return [nil] nil
|
169
|
+
#
|
170
|
+
# @see https://processing.org/reference/curveVertex_.html
|
171
|
+
# @see https://p5js.org/reference/#/p5/curveVertex
|
172
|
+
#
|
113
173
|
def curveVertex(x, y)
|
114
174
|
raise "curveVertex() must be called after beginShape()" unless drawingShape__
|
115
175
|
@curvePoints << x << y
|
@@ -121,6 +181,16 @@ module Processing
|
|
121
181
|
nil
|
122
182
|
end
|
123
183
|
|
184
|
+
# Append bezier vertex for shape polygon.
|
185
|
+
#
|
186
|
+
# @param x [Numeric] x position of vertex
|
187
|
+
# @param y [Numeric] y position of vertex
|
188
|
+
#
|
189
|
+
# @return [nil] nil
|
190
|
+
#
|
191
|
+
# @see https://processing.org/reference/bezierVertex_.html
|
192
|
+
# @see https://p5js.org/reference/#/p5/bezierVertex
|
193
|
+
#
|
124
194
|
def bezierVertex(x2, y2, x3, y3, x4, y4)
|
125
195
|
raise "bezierVertex() must be called after beginShape()" unless drawingShape__
|
126
196
|
x1, y1 = @points[-2, 2]
|
@@ -131,6 +201,16 @@ module Processing
|
|
131
201
|
nil
|
132
202
|
end
|
133
203
|
|
204
|
+
# Append quadratic vertex for shape polygon.
|
205
|
+
#
|
206
|
+
# @param x [Numeric] x position of vertex
|
207
|
+
# @param y [Numeric] y position of vertex
|
208
|
+
#
|
209
|
+
# @return [nil] nil
|
210
|
+
#
|
211
|
+
# @see https://processing.org/reference/quadraticVertex_.html
|
212
|
+
# @see https://p5js.org/reference/#/p5/quadraticVertex
|
213
|
+
#
|
134
214
|
def quadraticVertex(cx, cy, x3, y3)
|
135
215
|
x1, y1 = @points[-2, 2]
|
136
216
|
raise "vertex() is required before calling quadraticVertex()" unless x1 && y1
|
@@ -151,15 +231,57 @@ module Processing
|
|
151
231
|
@contourPoints
|
152
232
|
end
|
153
233
|
|
234
|
+
# Sets fill color.
|
235
|
+
#
|
236
|
+
# @overload fill(gray)
|
237
|
+
# @overload fill(gray, alpha)
|
238
|
+
# @overload fill(r, g, b)
|
239
|
+
# @overload fill(r, g, b, alpha)
|
240
|
+
#
|
241
|
+
# @param gray [Integer] gray value (0..255)
|
242
|
+
# @param r [Integer] red value (0..255)
|
243
|
+
# @param g [Integer] green value (0..255)
|
244
|
+
# @param b [Integer] blue value (0..255)
|
245
|
+
# @param alpha [Integer] alpha value (0..255)
|
246
|
+
#
|
247
|
+
# @return [nil] nil
|
248
|
+
#
|
249
|
+
# @see https://processing.org/reference/fill_.html
|
250
|
+
# @see https://p5js.org/reference/#/p5/fill
|
251
|
+
#
|
154
252
|
def fill(*args)
|
155
|
-
@fill = @context.
|
253
|
+
@fill = @context.rawColor__(*args)
|
254
|
+
nil
|
156
255
|
end
|
157
256
|
|
257
|
+
# Sets the vertex at the index position.
|
258
|
+
#
|
259
|
+
# @overload setVertex(index, x, y)
|
260
|
+
# @overload setVertex(index, vec)
|
261
|
+
#
|
262
|
+
# @param index [Integer] the index fo the vertex
|
263
|
+
# @param x [Numeric] x position of the vertex
|
264
|
+
# @param y [Numeric] y position of the vertex
|
265
|
+
# @param vec [Vector] position for the vertex
|
266
|
+
#
|
267
|
+
# @return [nil] nil
|
268
|
+
#
|
269
|
+
# @see https://processing.org/reference/PShape_setVertex_.html
|
270
|
+
#
|
158
271
|
def setVertex(index, point)
|
159
272
|
return nil unless @points && @points[index * 2, 2]&.size == 2
|
160
273
|
@points[index * 2, 2] = [point.x, point.y]
|
274
|
+
nil
|
161
275
|
end
|
162
276
|
|
277
|
+
# Returns the vertex at the index position.
|
278
|
+
#
|
279
|
+
# @param index [Integer] the index fo the vertex
|
280
|
+
#
|
281
|
+
# @return [Vector] the vertex position
|
282
|
+
#
|
283
|
+
# @see https://processing.org/reference/PShape_getVertex_.html
|
284
|
+
#
|
163
285
|
def getVertex(index)
|
164
286
|
return nil unless @points
|
165
287
|
point = @points[index * 2, 2]
|
@@ -167,13 +289,36 @@ module Processing
|
|
167
289
|
@context.createVector(*point)
|
168
290
|
end
|
169
291
|
|
292
|
+
# Returns the total number of vertices.
|
293
|
+
#
|
294
|
+
# @return [Integer] vertex count
|
295
|
+
#
|
296
|
+
# @see https://processing.org/reference/PShape_getVertexCount_.html
|
297
|
+
#
|
170
298
|
def getVertexCount()
|
171
299
|
return 0 unless @points
|
172
300
|
@points.size / 2
|
173
301
|
end
|
174
302
|
|
303
|
+
# Sets the fill color.
|
304
|
+
#
|
305
|
+
# @overload fill(gray)
|
306
|
+
# @overload fill(gray, alpha)
|
307
|
+
# @overload fill(r, g, b)
|
308
|
+
# @overload fill(r, g, b, alpha)
|
309
|
+
#
|
310
|
+
# @param gray [Integer] gray value (0..255)
|
311
|
+
# @param r [Integer] red value (0..255)
|
312
|
+
# @param g [Integer] green value (0..255)
|
313
|
+
# @param b [Integer] blue value (0..255)
|
314
|
+
# @param alpha [Integer] alpha value (0..255)
|
315
|
+
#
|
316
|
+
# @return [nil] nil
|
317
|
+
#
|
318
|
+
# @see https://processing.org/reference/PShape_setFill_.html
|
319
|
+
#
|
175
320
|
def setFill(*args)
|
176
|
-
color = @context.
|
321
|
+
color = @context.rawColor__(*args)
|
177
322
|
count = getVertexCount
|
178
323
|
if count > 0
|
179
324
|
if @colors
|
@@ -187,45 +332,156 @@ module Processing
|
|
187
332
|
polylines.map {|pl| pl.with colors: pl.points.map {color}}
|
188
333
|
end
|
189
334
|
end
|
335
|
+
nil
|
190
336
|
end
|
191
337
|
|
192
|
-
|
338
|
+
# @private
|
339
|
+
def setStroke__()
|
340
|
+
raise NotImplementedError
|
341
|
+
end
|
342
|
+
|
343
|
+
# Adds a new child shape.
|
344
|
+
#
|
345
|
+
# @param child [Shape] child shape
|
346
|
+
# @param index [Integer] insert position
|
347
|
+
#
|
348
|
+
# @return [nil] nil
|
349
|
+
#
|
350
|
+
# @see https://processing.org/reference/PShape_addChild_.html
|
351
|
+
#
|
352
|
+
def addChild(child, index = -1)
|
193
353
|
return unless @children
|
194
|
-
|
354
|
+
if index < 0
|
355
|
+
@children.push child
|
356
|
+
else
|
357
|
+
@children.insert index, child
|
358
|
+
end
|
195
359
|
nil
|
196
360
|
end
|
197
361
|
|
362
|
+
# Returns a child shape at the index position.
|
363
|
+
#
|
364
|
+
# @param index [Integer] child index
|
365
|
+
#
|
366
|
+
# @return [nil] nil
|
367
|
+
#
|
368
|
+
# @see https://processing.org/reference/PShape_getChild_.html
|
369
|
+
#
|
198
370
|
def getChild(index)
|
199
371
|
@children&.[](index)
|
200
372
|
end
|
201
373
|
|
374
|
+
# Returns the number of children.
|
375
|
+
#
|
376
|
+
# @return [Integer] child count
|
377
|
+
#
|
378
|
+
# @see https://processing.org/reference/PShape_getChildCount_.html
|
379
|
+
#
|
202
380
|
def getChildCount()
|
203
381
|
@children&.size || 0
|
204
382
|
end
|
205
383
|
|
384
|
+
# Applies translation matrix to the shape.
|
385
|
+
#
|
386
|
+
# @overload translate(x, y)
|
387
|
+
# @overload translate(x, y, z)
|
388
|
+
#
|
389
|
+
# @param x [Numeric] left/right translation
|
390
|
+
# @param y [Numeric] up/down translation
|
391
|
+
# @param z [Numeric] forward/backward translation
|
392
|
+
#
|
393
|
+
# @return [nil] nil
|
394
|
+
#
|
395
|
+
# @see https://processing.org/reference/PShape_translate_.html
|
396
|
+
#
|
206
397
|
def translate(x, y, z = 0)
|
207
|
-
matrix__.translate x, y, z
|
398
|
+
matrix__.translate! x, y, z
|
399
|
+
nil
|
400
|
+
end
|
401
|
+
|
402
|
+
# Applies scale matrix to the shape.
|
403
|
+
#
|
404
|
+
# @overload scale(s)
|
405
|
+
# @overload scale(x, y)
|
406
|
+
# @overload scale(x, y, z)
|
407
|
+
#
|
408
|
+
# @param s [Numeric] horizontal and vertical scale
|
409
|
+
# @param x [Numeric] horizontal scale
|
410
|
+
# @param y [Numeric] vertical scale
|
411
|
+
# @param z [Numeric] depth scale
|
412
|
+
#
|
413
|
+
# @return [nil] nil
|
414
|
+
#
|
415
|
+
# @see https://processing.org/reference/PShape_scale_.html
|
416
|
+
#
|
417
|
+
def scale(x, y = nil, z = 1)
|
418
|
+
matrix__.scale! x, (y || x), z
|
208
419
|
nil
|
209
420
|
end
|
210
421
|
|
422
|
+
# Applies rotation matrix to the shape.
|
423
|
+
#
|
424
|
+
# @param angle [Numeric] angle for rotation
|
425
|
+
#
|
426
|
+
# @return [nil] nil
|
427
|
+
#
|
428
|
+
# @see https://processing.org/reference/PShape_rotate_.html
|
429
|
+
#
|
211
430
|
def rotate(angle)
|
212
|
-
matrix__.rotate @context.toDegrees__(angle)
|
431
|
+
matrix__.rotate! @context.toDegrees__(angle)
|
432
|
+
nil
|
433
|
+
end
|
434
|
+
|
435
|
+
# Applies rotation around the x-axis to the shape.
|
436
|
+
#
|
437
|
+
# @param angle [Numeric] angle for rotation
|
438
|
+
#
|
439
|
+
# @return [nil] nil
|
440
|
+
#
|
441
|
+
# @see https://processing.org/reference/PShape_rotateX_.html
|
442
|
+
#
|
443
|
+
def rotateX(angle)
|
444
|
+
matrix__.rotate! @context.toDegrees__(angle), 1, 0, 0
|
445
|
+
nil
|
446
|
+
end
|
447
|
+
|
448
|
+
# Applies rotation around the y-axis to the shape.
|
449
|
+
#
|
450
|
+
# @param angle [Numeric] angle for rotation
|
451
|
+
#
|
452
|
+
# @return [nil] nil
|
453
|
+
#
|
454
|
+
# @see https://processing.org/reference/PShape_rotateY_.html
|
455
|
+
#
|
456
|
+
def rotateY(angle)
|
457
|
+
matrix__.rotate! @context.toDegrees__(angle), 0, 1, 0
|
213
458
|
nil
|
214
459
|
end
|
215
460
|
|
216
|
-
|
217
|
-
|
461
|
+
# Applies rotation around the z-axis to the shape.
|
462
|
+
#
|
463
|
+
# @param angle [Numeric] angle for rotation
|
464
|
+
#
|
465
|
+
# @return [nil] nil
|
466
|
+
#
|
467
|
+
# @see https://processing.org/reference/PShape_rotateZ_.html
|
468
|
+
#
|
469
|
+
def rotateZ(angle)
|
470
|
+
matrix__.rotate! @context.toDegrees__(angle), 0, 0, 1
|
218
471
|
nil
|
219
472
|
end
|
220
473
|
|
474
|
+
# Reset the transformation matrix.
|
475
|
+
#
|
476
|
+
# @return [nil] nil
|
477
|
+
#
|
478
|
+
# @see https://processing.org/reference/PShape_resetMatrix_.html
|
479
|
+
#
|
221
480
|
def resetMatrix()
|
222
481
|
@matrix = nil
|
482
|
+
nil
|
223
483
|
end
|
224
484
|
|
225
|
-
def rotateX = nil
|
226
|
-
def rotateY = nil
|
227
|
-
def rotateZ = nil
|
228
|
-
|
229
485
|
# @private
|
230
486
|
def clearCache__()
|
231
487
|
@polygon = nil# clear cache
|