rubysketch 0.3.0 → 0.3.5

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.
@@ -42,12 +42,12 @@ module RubySketch
42
42
  end
43
43
 
44
44
  def on_draw (e)
45
- draw_canvas {call_block @draw, e}
45
+ draw_canvas {call_block @draw, e} if @draw
46
46
  e.painter.image @canvas
47
47
  end
48
48
 
49
49
  def on_key (e)
50
- call_block @key, e
50
+ draw_canvas {call_block @key, e} if @key
51
51
  end
52
52
 
53
53
  def on_pointer (e)
@@ -56,16 +56,16 @@ module RubySketch
56
56
  when :up then @pointer_up
57
57
  when :move then e.drag? ? @pointer_drag : @pointer_move
58
58
  end
59
- call_block block, e if block
59
+ draw_canvas {call_block block, e} if block
60
60
  end
61
61
 
62
62
  def on_motion (e)
63
- call_block @motion, e
63
+ draw_canvas {call_block @motion, e} if @motion
64
64
  end
65
65
 
66
66
  def on_resize (e)
67
67
  reset_canvas e.width, e.height if @auto_resize
68
- call_block @resize, e
68
+ draw_canvas {call_block @resize, e} if @resize
69
69
  end
70
70
 
71
71
  private
@@ -0,0 +1,24 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ %w[../xot ../rucy ../rays ../reflex .]
5
+ .map {|s| File.expand_path "../../#{s}/lib", __FILE__}
6
+ .each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
7
+
8
+ require 'test/unit'
9
+ require 'xot/test'
10
+ require 'rubysketch'
11
+
12
+ include Xot::Test
13
+
14
+
15
+ unless $RAYS_NOAUTOINIT
16
+ #def Rays.fin! () end
17
+ end
18
+
19
+
20
+ def assert_equal_vector (v1, v2, delta = 0.000001)
21
+ assert_in_delta v1.x, v2.x, delta
22
+ assert_in_delta v1.y, v2.y, delta
23
+ assert_in_delta v1.z, v2.z, delta
24
+ end
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require_relative '../helper'
5
+
6
+
7
+ class TestProcessingUtility < Test::Unit::TestCase
8
+
9
+ C = RubySketch::Processing::Context
10
+
11
+ def setup ()
12
+
13
+ end
14
+
15
+ def test_random ()
16
+ assert_equal Float, C.random(1).class
17
+ assert_equal Float, C.random(1.0).class
18
+ assert_not_equal C.random(1), C.random(1)
19
+
20
+ 10000.times do
21
+ n = C.random 1
22
+ assert 0 <= n && n < 1
23
+
24
+ n = C.random 1, 2
25
+ assert 1.0 <= n && n < 2.0
26
+ end
27
+ end
28
+
29
+ end# TestProcessingUtility
@@ -0,0 +1,397 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require_relative '../helper'
5
+
6
+
7
+ class TestProcessingVector < Test::Unit::TestCase
8
+
9
+ P = RubySketch::Processing
10
+
11
+ V = P::Vector
12
+
13
+ M = Math
14
+
15
+ PI = M::PI
16
+
17
+ def vec (*args)
18
+ V.new *args
19
+ end
20
+
21
+ def point (*args)
22
+ Rays::Point.new *args
23
+ end
24
+
25
+ def test_initialize ()
26
+ assert_equal_vector vec(0, 0, 0), vec()
27
+ assert_equal_vector vec(1, 0, 0), vec(1)
28
+ assert_equal_vector vec(1, 2, 0), vec(1, 2)
29
+ assert_equal_vector vec(1, 2, 3), vec(1, 2, 3)
30
+
31
+ assert_equal_vector vec(0, 0, 0), vec([])
32
+ assert_equal_vector vec(1, 0, 0), vec([1])
33
+ assert_equal_vector vec(1, 2, 0), vec([1, 2])
34
+ assert_equal_vector vec(1, 2, 3), vec([1, 2, 3])
35
+
36
+ assert_equal_vector vec(1, 2, 3), vec(vec 1, 2, 3)
37
+ assert_equal_vector vec(1, 2, 3), vec(point 1, 2, 3)
38
+ end
39
+
40
+ def test_set ()
41
+ v0 = vec 9, 9, 9
42
+
43
+ v = v0.dup; v.set; assert_equal_vector vec(0, 0, 0), v
44
+ v = v0.dup; v.set 1; assert_equal_vector vec(1, 0, 0), v
45
+ v = v0.dup; v.set 1, 2; assert_equal_vector vec(1, 2, 0), v
46
+ v = v0.dup; v.set 1, 2, 3; assert_equal_vector vec(1, 2, 3), v
47
+
48
+ v = v0.dup; v.set []; assert_equal_vector vec(0, 0, 0), v
49
+ v = v0.dup; v.set [1]; assert_equal_vector vec(1, 0, 0), v
50
+ v = v0.dup; v.set [1, 2]; assert_equal_vector vec(1, 2, 0), v
51
+ v = v0.dup; v.set [1, 2, 3]; assert_equal_vector vec(1, 2, 3), v
52
+
53
+ v = v0.dup; v.set vec(1, 2, 3); assert_equal_vector vec(1, 2, 3), v
54
+ v = v0.dup; v.set point(1, 2, 3); assert_equal_vector vec(1, 2, 3), v
55
+ end
56
+
57
+ def test_dup ()
58
+ v1 = vec 1, 2, 3
59
+ assert_equal_vector vec(1, 2, 3), v1
60
+
61
+ v2 = v1.dup
62
+ assert_equal_vector vec(1, 2, 3), v1
63
+ assert_equal_vector vec(1, 2, 3), v2
64
+
65
+ v1.set 7, 8, 9
66
+ assert_equal_vector vec(7, 8, 9), v1
67
+ assert_equal_vector vec(1, 2, 3), v2
68
+ end
69
+
70
+ def test_copy ()
71
+ v1 = vec 1, 2, 3
72
+ assert_equal_vector vec(1, 2, 3), v1
73
+
74
+ v2 = v1.copy
75
+ assert_equal_vector vec(1, 2, 3), v1
76
+ assert_equal_vector vec(1, 2, 3), v2
77
+
78
+ v1.set 7, 8, 9
79
+ assert_equal_vector vec(7, 8, 9), v1
80
+ assert_equal_vector vec(1, 2, 3), v2
81
+ end
82
+
83
+ def test_xyz ()
84
+ v = vec 1, 2, 3
85
+ assert_equal_vector vec(1, 2, 3), v
86
+ assert_equal [1, 2, 3], [v.x, v.y, v.z]
87
+
88
+ v.x = 7
89
+ assert_equal_vector vec(7, 2, 3), v
90
+
91
+ v.y = 8
92
+ assert_equal_vector vec(7, 8, 3), v
93
+
94
+ v.z = 9
95
+ assert_equal_vector vec(7, 8, 9), v
96
+ end
97
+
98
+ def test_array ()
99
+ assert_equal [1, 2, 3], vec(1, 2, 3).array
100
+ end
101
+
102
+ def test_add ()
103
+ v = vec 1, 2, 3
104
+ v.add 4, 5, 6
105
+ assert_equal_vector vec(5, 7, 9), v
106
+
107
+ assert_equal_vector vec(1, 2, 3), vec(1, 2, 3).add()
108
+ assert_equal_vector vec(5, 2, 3), vec(1, 2, 3).add(4)
109
+ assert_equal_vector vec(5, 7, 3), vec(1, 2, 3).add(4, 5)
110
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3).add(4, 5, 6)
111
+
112
+ assert_equal_vector vec(1, 2, 3), vec(1, 2, 3).add([])
113
+ assert_equal_vector vec(5, 2, 3), vec(1, 2, 3).add([4])
114
+ assert_equal_vector vec(5, 7, 3), vec(1, 2, 3).add([4, 5])
115
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3).add([4, 5, 6])
116
+
117
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3).add( vec(4, 5, 6))
118
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3).add(point(4, 5, 6))
119
+ end
120
+
121
+ def test_sub ()
122
+ v = vec 9, 8, 7
123
+ v.sub 1, 2, 3
124
+ assert_equal_vector vec(8, 6, 4), v
125
+
126
+ assert_equal_vector vec(9, 8, 7), vec(9, 8, 7).sub()
127
+ assert_equal_vector vec(8, 8, 7), vec(9, 8, 7).sub(1)
128
+ assert_equal_vector vec(8, 6, 7), vec(9, 8, 7).sub(1, 2)
129
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7).sub(1, 2, 3)
130
+
131
+ assert_equal_vector vec(9, 8, 7), vec(9, 8, 7).sub([])
132
+ assert_equal_vector vec(8, 8, 7), vec(9, 8, 7).sub([1])
133
+ assert_equal_vector vec(8, 6, 7), vec(9, 8, 7).sub([1, 2])
134
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7).sub([1, 2, 3])
135
+
136
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7).sub( vec(1, 2, 3))
137
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7).sub(point(1, 2, 3))
138
+ end
139
+
140
+ def test_mult ()
141
+ v = vec 1, 2, 3
142
+ v.mult 2
143
+ assert_equal_vector vec(2, 4, 6), v
144
+ end
145
+
146
+ def test_div ()
147
+ v = vec 2, 4, 6
148
+ v.div 2
149
+ assert_equal_vector vec(1, 2, 3), v
150
+ end
151
+
152
+ def test_op_add ()
153
+ v1 = vec 1, 2, 3
154
+ v2 = vec 4, 5, 6
155
+ assert_equal_vector vec(5, 7, 9), v1 + v2
156
+ assert_equal_vector vec(1, 2, 3), v1
157
+ assert_equal_vector vec(4, 5, 6), v2
158
+
159
+ assert_equal_vector vec(5, 2, 3), vec(1, 2, 3) + 4
160
+
161
+ assert_equal_vector vec(1, 2, 3), vec(1, 2, 3) + []
162
+ assert_equal_vector vec(5, 2, 3), vec(1, 2, 3) + [4]
163
+ assert_equal_vector vec(5, 7, 3), vec(1, 2, 3) + [4, 5]
164
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3) + [4, 5, 6]
165
+
166
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3) + vec(4, 5, 6)
167
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3) + point(4, 5, 6)
168
+ end
169
+
170
+ def test_op_sub ()
171
+ v1 = vec 9, 8, 7
172
+ v2 = vec 1, 2, 3
173
+ assert_equal_vector vec(8, 6, 4), v1 - v2
174
+ assert_equal_vector vec(9, 8, 7), v1
175
+ assert_equal_vector vec(1, 2, 3), v2
176
+
177
+ assert_equal_vector vec(8, 8, 7), vec(9, 8, 7) - 1
178
+
179
+ assert_equal_vector vec(9, 8, 7), vec(9, 8, 7) - []
180
+ assert_equal_vector vec(8, 8, 7), vec(9, 8, 7) - [1]
181
+ assert_equal_vector vec(8, 6, 7), vec(9, 8, 7) - [1, 2]
182
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7) - [1, 2, 3]
183
+
184
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7) - vec(1, 2, 3)
185
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7) - point(1, 2, 3)
186
+ end
187
+
188
+ def test_op_mult ()
189
+ v = vec 1, 2, 3
190
+ assert_equal_vector vec(2, 4, 6), v * 2
191
+ assert_equal_vector vec(1, 2, 3), v
192
+ end
193
+
194
+ def test_op_div ()
195
+ v = vec 2, 4, 6
196
+ assert_equal_vector vec(1, 2, 3), v / 2
197
+ assert_equal_vector vec(2, 4, 6), v
198
+ end
199
+
200
+ def test_fun_add ()
201
+ v1 = vec 1, 2, 3
202
+ v2 = vec 4, 5, 6
203
+ result = vec
204
+ assert_equal_vector vec(5, 7, 9), V.add(v1, v2, result)
205
+ assert_equal_vector vec(1, 2, 3), v1
206
+ assert_equal_vector vec(4, 5, 6), v2
207
+ assert_equal_vector vec(5, 7, 9), result
208
+ end
209
+
210
+ def test_fun_sub ()
211
+ v1 = vec 9, 8, 7
212
+ v2 = vec 1, 2, 3
213
+ result = vec
214
+ assert_equal_vector vec(8, 6, 4), V.sub(v1, v2, result)
215
+ assert_equal_vector vec(9, 8, 7), v1
216
+ assert_equal_vector vec(1, 2, 3), v2
217
+ assert_equal_vector vec(8, 6, 4), result
218
+ end
219
+
220
+ def test_fun_mult ()
221
+ v1 = vec 1, 2, 3
222
+ result = vec
223
+ assert_equal_vector vec(2, 4, 6), V.mult(v1, 2, result)
224
+ assert_equal_vector vec(1, 2, 3), v1
225
+ assert_equal_vector vec(2, 4, 6), result
226
+ end
227
+
228
+ def test_fun_div ()
229
+ v1 = vec 2, 4, 6
230
+ result = vec
231
+ assert_equal_vector vec(1, 2, 3), V.div(v1, 2, result)
232
+ assert_equal_vector vec(2, 4, 6), v1
233
+ assert_equal_vector vec(1, 2, 3), result
234
+ end
235
+
236
+ def test_mag ()
237
+ assert_in_delta M.sqrt(5), vec(1, 2) .mag, 0.000001
238
+ assert_in_delta M.sqrt(14), vec(1, 2, 3).mag, 0.000001
239
+ end
240
+
241
+ def test_magSq ()
242
+ assert_equal 5, vec(1, 2) .magSq
243
+ assert_equal 14, vec(1, 2, 3).magSq
244
+ end
245
+
246
+ def test_setMag ()
247
+ v = vec 3, 4, 0
248
+ assert_equal_vector vec(6, 8, 0), v.setMag(10)
249
+ assert_equal_vector vec(6, 8, 0), v
250
+
251
+ v = vec 3, 4, 0
252
+ result = vec
253
+ assert_equal_vector vec(6, 8, 0), v.setMag(result, 10)
254
+ assert_equal_vector vec(3, 4, 0), v
255
+ assert_equal_vector vec(6, 8, 0), result
256
+ end
257
+
258
+ def test_normalize ()
259
+ v = vec 1, 2, 3
260
+ normal = v / v.mag
261
+ assert_equal_vector normal, v.normalize
262
+ assert_equal_vector normal, v
263
+
264
+ v = vec 1, 2, 3
265
+ result = vec
266
+ assert_equal_vector normal, v.normalize(result)
267
+ assert_equal_vector vec(1, 2, 3), v
268
+ assert_equal_vector normal, result
269
+ end
270
+
271
+ def test_limit ()
272
+ v = vec 1, 2, 3
273
+ assert_in_delta 1, v.limit(1).mag, 0.000001
274
+ assert_in_delta 1, v .mag, 0.000001
275
+
276
+ assert_in_delta 1, vec(1, 2, 3).limit(1).mag, 0.000001
277
+ assert_in_delta 2, vec(1, 2, 3).limit(2).mag, 0.000001
278
+ assert_in_delta 3, vec(1, 2, 3).limit(3).mag, 0.000001
279
+ assert_in_delta vec(1, 2, 3).mag, vec(1, 2, 3).limit(4).mag, 0.000001
280
+ end
281
+
282
+ def test_dist ()
283
+ v1 = vec 1, 2, 3
284
+ v2 = vec 4, 5, 6
285
+
286
+ assert_in_delta M.sqrt((4-1)**2 + (5-2)**2 + (6-3)**2), v1.dist(v2), 0.000001
287
+ assert_equal_vector vec(1, 2, 3), v1
288
+ assert_equal_vector vec(4, 5, 6), v2
289
+
290
+ assert_in_delta M.sqrt((4-1)**2 + (5-2)**2 + (6-3)**2), V.dist(v1, v2), 0.000001
291
+ assert_equal_vector vec(1, 2, 3), v1
292
+ assert_equal_vector vec(4, 5, 6), v2
293
+ end
294
+
295
+ def test_dot ()
296
+ v1 = vec 1, 2, 3
297
+ v2 = vec 4, 5, 6
298
+
299
+ assert_equal 1*4 + 2*5 + 3*6, v1.dot(4, 5, 6)
300
+ assert_equal_vector vec(1, 2, 3), v1
301
+
302
+ assert_equal 1*4 + 2*5 + 3*6, v1.dot(v2)
303
+ assert_equal_vector vec(1, 2, 3), v1
304
+ assert_equal_vector vec(4, 5, 6), v2
305
+
306
+ assert_equal 1*4 + 2*5 + 3*6, V.dot(v1, v2)
307
+ assert_equal_vector vec(1, 2, 3), v1
308
+ assert_equal_vector vec(4, 5, 6), v2
309
+ end
310
+
311
+ def test_cross ()
312
+ v1 = vec 1, 0, 0
313
+ v2 = vec 0, 1, 0
314
+
315
+ assert_equal_vector vec(0, 0, 1), v1.cross(0, 1, 0)
316
+ assert_equal_vector vec(1, 0, 0), v1
317
+
318
+ result = vec 1, 2, 3
319
+ assert_equal_vector vec(0, 0, 1), v1.cross(v2, result)
320
+ assert_equal_vector vec(1, 0, 0), v1
321
+ assert_equal_vector vec(0, 1, 0), v2
322
+ assert_equal_vector vec(0, 0, 1), result
323
+
324
+ result = vec 1, 2, 3
325
+ assert_equal_vector vec(0, 0, 1), V.cross(v1, v2, result)
326
+ assert_equal_vector vec(1, 0, 0), v1
327
+ assert_equal_vector vec(0, 1, 0), v2
328
+ assert_equal_vector vec(0, 0, 1), result
329
+ end
330
+
331
+ def test_rotate ()
332
+ angle = PI * 2 * 0.1
333
+ context = Object.new.tap {|o| def o.toAngle__ (a); a * 2 * P::RAD2DEG__; end}
334
+
335
+ v = vec 1, 0, 0
336
+ assert_equal_vector vec(M.cos(angle), M.sin(angle), 0), v.rotate(angle)
337
+ assert_equal_vector vec(M.cos(angle), M.sin(angle), 0), v
338
+
339
+ v = vec 1, 0, 0, context: context
340
+ assert_equal_vector vec(M.cos(angle * 2), M.sin(angle * 2), 0), v.rotate(angle)
341
+ end
342
+
343
+ def test_fromAngle ()
344
+ angle = PI * 2 * 0.1
345
+ result = vec
346
+ assert_equal_vector vec(M.cos(angle), M.sin(angle), 0), V.fromAngle(angle)
347
+ assert_equal_vector vec(M.cos(angle), M.sin(angle), 0), V.fromAngle(angle, result)
348
+ assert_equal_vector vec(M.cos(angle), M.sin(angle), 0), result
349
+ end
350
+
351
+ def test_heading ()
352
+ angle = PI * 1 * 0.1
353
+ assert_in_delta angle, V.fromAngle( angle).heading, 0.000001
354
+ assert_in_delta -angle, V.fromAngle(-angle).heading, 0.000001
355
+ end
356
+
357
+ def test_angleBetween ()
358
+ v1 = V.fromAngle PI * 0.25
359
+ v2 = V.fromAngle PI * 0.75
360
+ assert_in_delta PI / 2, V.angleBetween(v1, v2), 0.000001
361
+ end
362
+
363
+ def test_lerp ()
364
+ assert_equal_vector vec(0.5, 0.5, 0.5), vec(0, 0, 0).lerp(vec(1, 1, 1), 0.5)
365
+ assert_equal_vector vec(0.5, 0.5, 0.5), vec(0, 0, 0).lerp( 1, 1, 1, 0.5)
366
+ assert_equal_vector vec(0.5, 0.5, 0.5), V.lerp(vec(0, 0, 0), vec(1, 1, 1), 0.5)
367
+ end
368
+
369
+ def test_random2D ()
370
+ v1 = V.random2D
371
+ v2 = V.random2D
372
+ assert v1.x != 0
373
+ assert v1.y != 0
374
+ assert_equal 0, v1.z
375
+ assert v2.x != 0
376
+ assert v2.y != 0
377
+ assert_equal 0, v2.z
378
+ assert_not_equal v1, v2
379
+ assert_in_delta 1, v1.mag, 0.000001
380
+ assert_in_delta 1, v2.mag, 0.000001
381
+ end
382
+
383
+ def test_random3D ()
384
+ v1 = V.random3D
385
+ v2 = V.random3D
386
+ assert v1.x != 0
387
+ assert v1.y != 0
388
+ assert v1.z != 0
389
+ assert v2.x != 0
390
+ assert v2.y != 0
391
+ assert v2.z != 0
392
+ assert_not_equal v1, v2
393
+ assert_in_delta 1, v1.mag, 0.000001
394
+ assert_in_delta 1, v2.mag, 0.000001
395
+ end
396
+
397
+ end# TestProcessingVector