processing 0.5.29 → 0.5.31

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.
@@ -0,0 +1,387 @@
1
+ require_relative 'helper'
2
+
3
+
4
+ class TestShape < Test::Unit::TestCase
5
+
6
+ P = Processing
7
+ G = P::GraphicsContext
8
+
9
+ def createShape(kind = nil, *args, g: graphics)
10
+ g.createShape kind, *args
11
+ end
12
+
13
+ def vec(*args)
14
+ P::Vector.new(*args)
15
+ end
16
+
17
+ def test_size()
18
+ assert_equal [0, 0], createShape .then {|s| [s.w, s.h]}
19
+ assert_equal [30, 50], createShape(G::RECT, 10, 20, 30, 50).then {|s| [s.w, s.h]}
20
+ assert_equal [20, 30], createShape(G::LINE, 10, 20, 30, 50).then {|s| [s.w, s.h]}
21
+ end
22
+
23
+ def test_visibility()
24
+ gfx = graphics 100, 100 do |g|
25
+ g.background 0
26
+ end
27
+ assert_equal 1, get_pixels(gfx).uniq.size
28
+
29
+ gfx = graphics 100, 100 do |g|
30
+ s = createShape G::RECT, 10, 20, 30, 40, g: g
31
+ assert_true s.isVisible
32
+ assert_true s.visible?
33
+
34
+ g.background 0
35
+ g.fill 255
36
+ g.noStroke
37
+ g.shape s
38
+ end
39
+ assert_equal 2, get_pixels(gfx).uniq.size
40
+
41
+ gfx = graphics 100, 100 do |g|
42
+ s = createShape G::RECT, 10, 20, 30, 40, g: g
43
+ s.setVisible false
44
+ assert_false s.isVisible
45
+ assert_false s.visible?
46
+
47
+ g.background 0
48
+ g.fill 255
49
+ g.noStroke
50
+ g.shape s
51
+ end
52
+ assert_equal 1, get_pixels(gfx).uniq.size
53
+ end
54
+
55
+ def test_beginShape_points()
56
+ assert_equal_draw_vertices 'strokeWeight 200', <<~END
57
+ s.beginShape POINTS
58
+ s.vertex 200, 300
59
+ s.vertex 500, 600
60
+ s.endShape
61
+ END
62
+ end
63
+
64
+ def test_beginShape_lines()
65
+ assert_equal_draw_vertices 'strokeWeight 200', <<~END
66
+ s.beginShape LINES
67
+ s.vertex 100, 200
68
+ s.vertex 300, 400
69
+ s.vertex 500, 600
70
+ s.vertex 700, 800
71
+ s.endShape
72
+ END
73
+ end
74
+
75
+ def test_beginShape_triangles()
76
+ assert_equal_draw_vertices <<~END
77
+ s.beginShape TRIANGLES
78
+ s.vertex 100, 100
79
+ s.vertex 100, 500
80
+ s.vertex 400, 200
81
+ s.vertex 500, 100
82
+ s.vertex 500, 500
83
+ s.vertex 900, 200
84
+ s.endShape
85
+ END
86
+ end
87
+
88
+ def test_beginShape_triangle_fan()
89
+ assert_equal_draw_vertices <<~END
90
+ s.beginShape TRIANGLE_FAN
91
+ s.vertex 100, 100
92
+ s.vertex 100, 500
93
+ s.vertex 200, 600
94
+ s.vertex 300, 500
95
+ s.vertex 400, 600
96
+ s.vertex 500, 200
97
+ s.vertex 400, 100
98
+ s.endShape
99
+ END
100
+ end
101
+
102
+ def test_beginShape_triangle_strip()
103
+ assert_equal_draw_vertices <<~END
104
+ s.beginShape TRIANGLE_STRIP
105
+ s.vertex 100, 100
106
+ s.vertex 100, 900
107
+ s.vertex 500, 200
108
+ s.vertex 500, 800
109
+ s.vertex 900, 100
110
+ s.vertex 900, 900
111
+ s.endShape
112
+ END
113
+ end
114
+
115
+ def test_beginShape_quads()
116
+ assert_equal_draw_vertices <<~END
117
+ s.beginShape QUADS
118
+ s.vertex 100, 100
119
+ s.vertex 200, 500
120
+ s.vertex 300, 400
121
+ s.vertex 400, 200
122
+ s.vertex 500, 100
123
+ s.vertex 600, 500
124
+ s.vertex 700, 400
125
+ s.vertex 800, 200
126
+ s.endShape
127
+ END
128
+ end
129
+
130
+ def test_beginShape_quad_strip()
131
+ assert_equal_draw_vertices <<~END
132
+ s.beginShape QUAD_STRIP
133
+ s.vertex 100, 100
134
+ s.vertex 100, 500
135
+ s.vertex 500, 200
136
+ s.vertex 500, 400
137
+ s.vertex 900, 100
138
+ s.vertex 900, 500
139
+ s.endShape
140
+ END
141
+ end
142
+
143
+ def test_beginShape_tess()
144
+ assert_equal_draw_vertices <<~END
145
+ s.beginShape TESS
146
+ s.vertex 100, 100
147
+ s.vertex 100, 500
148
+ s.vertex 500, 500
149
+ s.vertex 500, 400
150
+ s.vertex 300, 400
151
+ s.vertex 300, 300
152
+ s.vertex 500, 300
153
+ s.vertex 500, 100
154
+ s.endShape
155
+ END
156
+ end
157
+
158
+ def test_beginShape_polygon()
159
+ assert_equal_draw_vertices <<~END
160
+ s.beginShape
161
+ s.vertex 100, 100
162
+ s.vertex 100, 500
163
+ s.vertex 500, 500
164
+ s.vertex 500, 400
165
+ s.vertex 300, 400
166
+ s.vertex 300, 300
167
+ s.vertex 500, 300
168
+ s.vertex 500, 100
169
+ s.endShape
170
+ END
171
+ end
172
+
173
+ def test_beginShape_twice()
174
+ first, second = <<~FIRST, <<~SECOND
175
+ s.vertex 100, 100
176
+ s.vertex 100, 500
177
+ s.vertex 400, 500
178
+ s.vertex 400, 300
179
+ FIRST
180
+ s.vertex 500, 300
181
+ s.vertex 500, 500
182
+ s.vertex 800, 500
183
+ s.vertex 800, 100
184
+ SECOND
185
+
186
+ assert_equal_draw <<~EXPECTED, <<~ACTUAL
187
+ s = self
188
+ s.beginShape
189
+ #{first}
190
+ #{second}
191
+ s.endShape
192
+ EXPECTED
193
+ s = createShape
194
+ s.beginShape
195
+ #{first}
196
+ s.endShape
197
+ s.beginShape
198
+ #{second}
199
+ s.endShape
200
+ shape s
201
+ ACTUAL
202
+
203
+ assert_equal_draw <<~EXPECTED, <<~ACTUAL
204
+ s = self
205
+ s.beginShape
206
+ #{first}
207
+ #{second}
208
+ s.endShape CLOSE
209
+ EXPECTED
210
+ s = createShape
211
+ s.beginShape
212
+ #{first}
213
+ s.endShape
214
+ s.beginShape
215
+ #{second}
216
+ s.endShape CLOSE
217
+ shape s
218
+ ACTUAL
219
+
220
+ assert_equal_draw <<~EXPECTED, <<~ACTUAL
221
+ s = self
222
+ s.beginShape
223
+ #{first}
224
+ #{second}
225
+ s.endShape
226
+ EXPECTED
227
+ s = createShape
228
+ s.beginShape TRIANGLES
229
+ #{first}
230
+ s.endShape
231
+ s.beginShape
232
+ #{second}
233
+ s.endShape
234
+ shape s
235
+ ACTUAL
236
+ end
237
+
238
+ def test_getVertex()
239
+ s = createShape
240
+ s.beginShape
241
+ s.vertex 1, 2
242
+ s.vertex 3, 4
243
+ s.vertex 5, 6
244
+ s.endShape
245
+
246
+ assert_equal vec(1, 2), s.getVertex(0)
247
+ assert_equal vec(3, 4), s.getVertex(1)
248
+ assert_equal vec(5, 6), s.getVertex(-1)
249
+ assert_equal vec(3, 4), s.getVertex(-2)
250
+ end
251
+
252
+ def test_setVertex()
253
+ s = createShape
254
+ s.beginShape
255
+ s.vertex 1, 2
256
+ s.vertex 3, 4
257
+ s.vertex 5, 6
258
+ s.endShape
259
+
260
+ points = -> do
261
+ s.getVertexCount.times.map {|i|
262
+ s.getVertex(i).then {|v| [v.x, v.y]}
263
+ }.flatten
264
+ end
265
+
266
+ s.setVertex(0, vec(7, 8))
267
+ assert_equal [7, 8, 3, 4, 5, 6], points.call
268
+
269
+ s.setVertex(-1, vec(9, 10))
270
+ assert_equal [7, 8, 3, 4, 9, 10], points.call
271
+ end
272
+
273
+ def test_getVertexCount()
274
+ s = createShape
275
+ s.beginShape G::TRIANGLES
276
+ assert_equal 0, s.getVertexCount
277
+
278
+ s.vertex 1, 2
279
+ assert_equal 1, s.getVertexCount
280
+
281
+ s.vertex 3, 4
282
+ assert_equal 2, s.getVertexCount
283
+
284
+ s.vertex 5, 6
285
+ assert_equal 3, s.getVertexCount
286
+
287
+ s.endShape
288
+ assert_equal 3, s.getVertexCount
289
+ end
290
+
291
+ def test_addChild()
292
+ group = createShape G::GROUP
293
+ assert_nil group.getChild(0)
294
+
295
+ rect = createShape G::RECT, 100, 100, 200, 300
296
+ group.addChild rect
297
+ assert_equal 1, group.getChildCount
298
+ assert_equal rect, group.getChild(0)
299
+ end
300
+
301
+ def test_addChild_to_non_group_shape()
302
+ s = createShape
303
+ assert_equal 0, s.getChildCount
304
+
305
+ assert_nothing_raised {
306
+ s.addChild createShape(G::RECT, 100, 100, 200, 300)
307
+ }
308
+ assert_equal 0, s.getChildCount
309
+ end
310
+
311
+ def test_getChildCount()
312
+ s = createShape G::GROUP
313
+ assert_equal 0, s.getChildCount
314
+
315
+ s.addChild createShape
316
+ assert_equal 1, s.getChildCount
317
+
318
+ s.addChild createShape
319
+ assert_equal 2, s.getChildCount
320
+ end
321
+
322
+ def test_translate()
323
+ assert_equal_draw <<~EXPECTED, <<~ACTUAL
324
+ translate 100, 200
325
+ rect 0, 0, 300, 400
326
+ EXPECTED
327
+ s = createShape RECT, 0, 0, 300, 400
328
+ s.translate 100, 200
329
+ shape s
330
+ ACTUAL
331
+ end
332
+
333
+ def test_rotate()
334
+ assert_equal_draw <<~EXPECTED, <<~ACTUAL
335
+ rotate PI / 10
336
+ rect 100, 200, 300, 400
337
+ EXPECTED
338
+ s = createShape RECT, 100, 200, 300, 400
339
+ s.rotate PI / 10
340
+ shape s
341
+ ACTUAL
342
+ end
343
+
344
+ def test_scale()
345
+ assert_equal_draw <<~EXPECTED, <<~ACTUAL
346
+ scale 0.5, 0.6
347
+ rect 100, 200, 300, 400
348
+ EXPECTED
349
+ s = createShape RECT, 100, 200, 300, 400
350
+ s.scale 0.5, 0.6
351
+ shape s
352
+ ACTUAL
353
+ end
354
+
355
+ def test_sequential_transformation()
356
+ assert_equal_draw <<~EXPECTED, <<~ACTUAL
357
+ translate 100, 200
358
+ rotate PI / 4
359
+ scale 0.5, 0.6
360
+ translate 100, 200
361
+ rotate(-PI / 4)
362
+ scale 2, 3
363
+ rect 0, 0, 300, 400
364
+ EXPECTED
365
+ s = createShape RECT, 0, 0, 300, 400
366
+ s.translate 100, 200
367
+ s.rotate PI / 4
368
+ s.scale 0.5, 0.6
369
+ s.translate 100, 200
370
+ s.rotate(-PI / 4)
371
+ s.scale 2, 3
372
+ shape s
373
+ ACTUAL
374
+ end
375
+
376
+ def assert_equal_draw_vertices(*shared_header, source)
377
+ assert_equal_draw(*shared_header, <<~EXPECTED, <<~ACTUAL, label: test_label)
378
+ s = self
379
+ #{source}
380
+ EXPECTED
381
+ s = createShape
382
+ #{source}
383
+ shape s
384
+ ACTUAL
385
+ end
386
+
387
+ end# TestShape
data/test/test_vector.rb CHANGED
@@ -325,7 +325,7 @@ class TestVector < Test::Unit::TestCase
325
325
  def test_rotate()
326
326
  angle = PI * 2 * 0.1
327
327
  context = Object.new.tap {|o|
328
- def o.toAngle__(a)
328
+ def o.toDegrees__(a)
329
329
  a * 2 * P::GraphicsContext::RAD2DEG__
330
330
  end
331
331
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: processing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.29
4
+ version: 0.5.31
5
5
  platform: ruby
6
6
  authors:
7
7
  - xordog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-28 00:00:00.000000000 Z
11
+ date: 2023-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xot
@@ -16,98 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.39
19
+ version: 0.1.41
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.39
26
+ version: 0.1.41
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rucy
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.1.40
33
+ version: 0.1.42
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.1.40
40
+ version: 0.1.42
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rays
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.1.45
47
+ version: 0.1.47
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.1.45
54
+ version: 0.1.47
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: reflexion
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.1.53
61
+ version: 0.1.55
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.1.53
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: test-unit
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: yard
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
68
+ version: 0.1.55
111
69
  description: Creative Coding Framework has API compatible to Processing or p5.js.
112
70
  email: xordog@gmail.com
113
71
  executables: []
@@ -116,12 +74,14 @@ extra_rdoc_files: []
116
74
  files:
117
75
  - ".github/workflows/release-gem.yml"
118
76
  - ".github/workflows/tag.yml"
77
+ - ".github/workflows/test-draw.yml"
119
78
  - ".github/workflows/test.yml"
120
79
  - ".github/workflows/utils.rb"
121
80
  - ".gitignore"
122
81
  - ".yardopts"
123
82
  - ChangeLog.md
124
83
  - Gemfile
84
+ - Gemfile.lock
125
85
  - LICENSE
126
86
  - README.md
127
87
  - Rakefile
@@ -146,17 +106,20 @@ files:
146
106
  - lib/processing/graphics_context.rb
147
107
  - lib/processing/image.rb
148
108
  - lib/processing/shader.rb
109
+ - lib/processing/shape.rb
149
110
  - lib/processing/touch.rb
150
111
  - lib/processing/vector.rb
151
112
  - lib/processing/window.rb
152
113
  - processing.gemspec
153
114
  - test/helper.rb
115
+ - test/p5.rb
154
116
  - test/test_capture.rb
155
117
  - test/test_font.rb
156
118
  - test/test_graphics.rb
157
119
  - test/test_graphics_context.rb
158
120
  - test/test_image.rb
159
121
  - test/test_shader.rb
122
+ - test/test_shape.rb
160
123
  - test/test_text_bounds.rb
161
124
  - test/test_touch.rb
162
125
  - test/test_utility.rb
@@ -186,12 +149,14 @@ specification_version: 4
186
149
  summary: Processing compatible Creative Coding Framework.
187
150
  test_files:
188
151
  - test/helper.rb
152
+ - test/p5.rb
189
153
  - test/test_capture.rb
190
154
  - test/test_font.rb
191
155
  - test/test_graphics.rb
192
156
  - test/test_graphics_context.rb
193
157
  - test/test_image.rb
194
158
  - test/test_shader.rb
159
+ - test/test_shape.rb
195
160
  - test/test_text_bounds.rb
196
161
  - test/test_touch.rb
197
162
  - test/test_utility.rb