rubysketch 0.3.11 → 0.3.16
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.
- checksums.yaml +4 -4
- data/ChangeLog.md +26 -0
- data/VERSION +1 -1
- data/examples/image.rb +1 -1
- data/lib/rubysketch-processing.rb +1 -1
- data/lib/rubysketch.rb +2 -0
- data/lib/rubysketch/app.rb +13 -0
- data/lib/rubysketch/glsl.rb +2 -2
- data/lib/rubysketch/module.rb +3 -3
- data/lib/rubysketch/processing.rb +407 -244
- data/lib/rubysketch/window.rb +66 -48
- data/test/helper.rb +1 -1
- data/test/processing/test_utility.rb +3 -7
- data/test/processing/test_vector.rb +43 -46
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7c911427a4145fa18e7395c65f49ed58077c6d294f93ee9d24a840f621bcfeb
|
4
|
+
data.tar.gz: e5ecc52cb87042b8e59fd64f48c358f19638a3a4f35a696072b3f49d95998eba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce775dec5c87470a3c3aa88e37fae94ecfaab96616c381bf71cbab5c17325ec0b93ab6640be326185de6f4b5e44b6aec9438418f1e57a00a9955ac5e148d20e1
|
7
|
+
data.tar.gz: 433efaf677bb1538096b1453591e5d28608fc20793bbcdd9e648f54e286eff7d63923496375520e5c560904883eb9385ac2837f67e4aabe7988f7d1d0fa4f23a
|
data/ChangeLog.md
CHANGED
@@ -1,6 +1,32 @@
|
|
1
1
|
# RubySketch ChangeLog
|
2
2
|
|
3
3
|
|
4
|
+
## [0.3.16] - 2021-2-14
|
5
|
+
|
6
|
+
- add key, keyCode and keyPressed system values
|
7
|
+
- add keyPressed(), keyReleased() and keyTyped() functions
|
8
|
+
|
9
|
+
|
10
|
+
## [0.3.15] - 2020-12-12
|
11
|
+
|
12
|
+
- delete temporary directory on launch
|
13
|
+
|
14
|
+
|
15
|
+
## [0.3.14] - 2020-12-12
|
16
|
+
|
17
|
+
- fix loadImage() fails when Encoding.default_internal is not nil
|
18
|
+
|
19
|
+
|
20
|
+
## [0.3.13] - 2020-12-12
|
21
|
+
|
22
|
+
- size(), createCanvas(): default pixelDensity is same as current value
|
23
|
+
|
24
|
+
|
25
|
+
## [0.3.12] - 2020-12-10
|
26
|
+
|
27
|
+
- size() and createCanvas() take 'pixelDensity' parameter and default value is 1
|
28
|
+
|
29
|
+
|
4
30
|
## [0.3.11] - 2020-12-9
|
5
31
|
|
6
32
|
- add size(), createCanvas() and pixelDensity()
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.16
|
data/examples/image.rb
CHANGED
data/lib/rubysketch.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'set'
|
1
2
|
require 'digest/sha1'
|
2
3
|
require 'pathname'
|
3
4
|
require 'tmpdir'
|
@@ -5,6 +6,7 @@ require 'open-uri'
|
|
5
6
|
|
6
7
|
require 'reflex'
|
7
8
|
require 'rubysketch/module'
|
9
|
+
require 'rubysketch/app'
|
8
10
|
require 'rubysketch/window'
|
9
11
|
require 'rubysketch/processing'
|
10
12
|
require 'rubysketch/glsl'
|
data/lib/rubysketch/glsl.rb
CHANGED
@@ -4,12 +4,12 @@ module RubySketch
|
|
4
4
|
# @private
|
5
5
|
class GLSL
|
6
6
|
|
7
|
-
def initialize
|
7
|
+
def initialize(glsl)
|
8
8
|
@shader = Reflex::Shader.new glsl
|
9
9
|
end
|
10
10
|
|
11
11
|
# @private
|
12
|
-
def on_start__
|
12
|
+
def on_start__(window)
|
13
13
|
start = Time.now.to_f
|
14
14
|
|
15
15
|
window.draw = proc do |e, painter|
|
data/lib/rubysketch/module.rb
CHANGED
@@ -5,15 +5,15 @@ module RubySketch
|
|
5
5
|
|
6
6
|
module_function
|
7
7
|
|
8
|
-
def name
|
8
|
+
def name()
|
9
9
|
super.split('::')[-2]
|
10
10
|
end
|
11
11
|
|
12
|
-
def version
|
12
|
+
def version()
|
13
13
|
open(root_dir 'VERSION') {|f| f.readline.chomp}
|
14
14
|
end
|
15
15
|
|
16
|
-
def root_dir
|
16
|
+
def root_dir(path = '')
|
17
17
|
File.expand_path "../../#{path}", __dir__
|
18
18
|
end
|
19
19
|
|
@@ -34,7 +34,7 @@ module RubySketch
|
|
34
34
|
# @param v [Vector] vector object to copy
|
35
35
|
# @param a [Array] array like [x, y, z]
|
36
36
|
#
|
37
|
-
def initialize
|
37
|
+
def initialize(x = 0, y = 0, z = 0, context: nil)
|
38
38
|
@point = case x
|
39
39
|
when Rays::Point then x.dup
|
40
40
|
when Vector then x.getInternal__.dup
|
@@ -46,7 +46,7 @@ module RubySketch
|
|
46
46
|
|
47
47
|
# Initializer for dup or clone
|
48
48
|
#
|
49
|
-
def initialize_copy
|
49
|
+
def initialize_copy(o)
|
50
50
|
@point = o.getInternal__.dup
|
51
51
|
end
|
52
52
|
|
@@ -72,8 +72,8 @@ module RubySketch
|
|
72
72
|
#
|
73
73
|
# @return [nil] nil
|
74
74
|
#
|
75
|
-
def set
|
76
|
-
initialize
|
75
|
+
def set(*args)
|
76
|
+
initialize(*args)
|
77
77
|
self
|
78
78
|
end
|
79
79
|
|
@@ -81,7 +81,7 @@ module RubySketch
|
|
81
81
|
#
|
82
82
|
# @return [Numeric] x value of vector
|
83
83
|
#
|
84
|
-
def x
|
84
|
+
def x()
|
85
85
|
@point.x
|
86
86
|
end
|
87
87
|
|
@@ -89,7 +89,7 @@ module RubySketch
|
|
89
89
|
#
|
90
90
|
# @return [Numeric] y value of vector
|
91
91
|
#
|
92
|
-
def y
|
92
|
+
def y()
|
93
93
|
@point.y
|
94
94
|
end
|
95
95
|
|
@@ -97,7 +97,7 @@ module RubySketch
|
|
97
97
|
#
|
98
98
|
# @return [Numeric] z value of vector
|
99
99
|
#
|
100
|
-
def z
|
100
|
+
def z()
|
101
101
|
@point.z
|
102
102
|
end
|
103
103
|
|
@@ -105,7 +105,7 @@ module RubySketch
|
|
105
105
|
#
|
106
106
|
# @return [Numeric] x value of vector
|
107
107
|
#
|
108
|
-
def x=
|
108
|
+
def x=(x)
|
109
109
|
@point.x = x
|
110
110
|
end
|
111
111
|
|
@@ -113,7 +113,7 @@ module RubySketch
|
|
113
113
|
#
|
114
114
|
# @return [Numeric] y value of vector
|
115
115
|
#
|
116
|
-
def y=
|
116
|
+
def y=(y)
|
117
117
|
@point.y = y
|
118
118
|
end
|
119
119
|
|
@@ -121,7 +121,7 @@ module RubySketch
|
|
121
121
|
#
|
122
122
|
# @return [Numeric] z value of vector
|
123
123
|
#
|
124
|
-
def z=
|
124
|
+
def z=(z)
|
125
125
|
@point.z = z
|
126
126
|
end
|
127
127
|
|
@@ -139,8 +139,8 @@ module RubySketch
|
|
139
139
|
#
|
140
140
|
# @return [Vector] interporated vector
|
141
141
|
#
|
142
|
-
def lerp
|
143
|
-
v = toVector__
|
142
|
+
def lerp(*args, amount)
|
143
|
+
v = toVector__(*args)
|
144
144
|
self.x = x + (v.x - x) * amount
|
145
145
|
self.y = y + (v.y - y) * amount
|
146
146
|
self.z = z + (v.z - z) * amount
|
@@ -155,7 +155,7 @@ module RubySketch
|
|
155
155
|
#
|
156
156
|
# @return [Vector] interporated vector
|
157
157
|
#
|
158
|
-
def self.lerp
|
158
|
+
def self.lerp(v1, v2, amount)
|
159
159
|
v1.dup.lerp v2, amount
|
160
160
|
end
|
161
161
|
|
@@ -163,7 +163,7 @@ module RubySketch
|
|
163
163
|
#
|
164
164
|
# @return [Array] array of x, y, z
|
165
165
|
#
|
166
|
-
def array
|
166
|
+
def array()
|
167
167
|
@point.to_a 3
|
168
168
|
end
|
169
169
|
|
@@ -180,7 +180,7 @@ module RubySketch
|
|
180
180
|
#
|
181
181
|
# @return [Vector] added vector
|
182
182
|
#
|
183
|
-
def add
|
183
|
+
def add(*args)
|
184
184
|
@point += toVector__(*args).getInternal__
|
185
185
|
self
|
186
186
|
end
|
@@ -198,7 +198,7 @@ module RubySketch
|
|
198
198
|
#
|
199
199
|
# @return [Vector] subtracted vector
|
200
200
|
#
|
201
|
-
def sub
|
201
|
+
def sub(*args)
|
202
202
|
@point -= toVector__(*args).getInternal__
|
203
203
|
self
|
204
204
|
end
|
@@ -209,7 +209,7 @@ module RubySketch
|
|
209
209
|
#
|
210
210
|
# @return [Vector] multiplied vector
|
211
211
|
#
|
212
|
-
def mult
|
212
|
+
def mult(num)
|
213
213
|
@point *= num
|
214
214
|
self
|
215
215
|
end
|
@@ -220,7 +220,7 @@ module RubySketch
|
|
220
220
|
#
|
221
221
|
# @return [Vector] divided vector
|
222
222
|
#
|
223
|
-
def div
|
223
|
+
def div(num)
|
224
224
|
@point /= num
|
225
225
|
self
|
226
226
|
end
|
@@ -231,7 +231,7 @@ module RubySketch
|
|
231
231
|
#
|
232
232
|
# @return [Vector] added vector
|
233
233
|
#
|
234
|
-
def +
|
234
|
+
def +(v)
|
235
235
|
dup.add v
|
236
236
|
end
|
237
237
|
|
@@ -241,7 +241,7 @@ module RubySketch
|
|
241
241
|
#
|
242
242
|
# @return [Vector] subtracted vector
|
243
243
|
#
|
244
|
-
def -
|
244
|
+
def -(v)
|
245
245
|
dup.sub v
|
246
246
|
end
|
247
247
|
|
@@ -251,7 +251,7 @@ module RubySketch
|
|
251
251
|
#
|
252
252
|
# @return [Vector] multiplied vector
|
253
253
|
#
|
254
|
-
def *
|
254
|
+
def *(num)
|
255
255
|
dup.mult num
|
256
256
|
end
|
257
257
|
|
@@ -261,7 +261,7 @@ module RubySketch
|
|
261
261
|
#
|
262
262
|
# @return [Vector] divided vector
|
263
263
|
#
|
264
|
-
def /
|
264
|
+
def /(num)
|
265
265
|
dup.div num
|
266
266
|
end
|
267
267
|
|
@@ -276,7 +276,7 @@ module RubySketch
|
|
276
276
|
#
|
277
277
|
# @return [Vector] added vector
|
278
278
|
#
|
279
|
-
def self.add
|
279
|
+
def self.add(v1, v2, target = nil)
|
280
280
|
v = v1 + v2
|
281
281
|
target.set v if self === target
|
282
282
|
v
|
@@ -293,7 +293,7 @@ module RubySketch
|
|
293
293
|
#
|
294
294
|
# @return [Vector] subtracted vector
|
295
295
|
#
|
296
|
-
def self.sub
|
296
|
+
def self.sub(v1, v2, target = nil)
|
297
297
|
v = v1 - v2
|
298
298
|
target.set v if self === target
|
299
299
|
v
|
@@ -310,7 +310,7 @@ module RubySketch
|
|
310
310
|
#
|
311
311
|
# @return [Vector] multiplied vector
|
312
312
|
#
|
313
|
-
def self.mult
|
313
|
+
def self.mult(v1, num, target = nil)
|
314
314
|
v = v1 * num
|
315
315
|
target.set v if self === target
|
316
316
|
v
|
@@ -327,7 +327,7 @@ module RubySketch
|
|
327
327
|
#
|
328
328
|
# @return [Vector] divided vector
|
329
329
|
#
|
330
|
-
def self.div
|
330
|
+
def self.div(v1, num, target = nil)
|
331
331
|
v = v1 / num
|
332
332
|
target.set v if self === target
|
333
333
|
v
|
@@ -337,7 +337,7 @@ module RubySketch
|
|
337
337
|
#
|
338
338
|
# @return [Numeric] length
|
339
339
|
#
|
340
|
-
def mag
|
340
|
+
def mag()
|
341
341
|
@point.length
|
342
342
|
end
|
343
343
|
|
@@ -345,7 +345,7 @@ module RubySketch
|
|
345
345
|
#
|
346
346
|
# @return [Numeric] squared length
|
347
347
|
#
|
348
|
-
def magSq
|
348
|
+
def magSq()
|
349
349
|
Rays::Point::dot(@point, @point)
|
350
350
|
end
|
351
351
|
|
@@ -359,7 +359,7 @@ module RubySketch
|
|
359
359
|
#
|
360
360
|
# @return [Vector] vector with new length
|
361
361
|
#
|
362
|
-
def setMag
|
362
|
+
def setMag(target = nil, len)
|
363
363
|
(target || self).set @point.normal * len
|
364
364
|
end
|
365
365
|
|
@@ -369,7 +369,7 @@ module RubySketch
|
|
369
369
|
#
|
370
370
|
# @return [Vector] normalized vector
|
371
371
|
#
|
372
|
-
def normalize
|
372
|
+
def normalize(target = nil)
|
373
373
|
(target || self).set @point.normal
|
374
374
|
end
|
375
375
|
|
@@ -379,7 +379,7 @@ module RubySketch
|
|
379
379
|
#
|
380
380
|
# @return [Vector] new vector
|
381
381
|
#
|
382
|
-
def limit
|
382
|
+
def limit(max)
|
383
383
|
setMag max if magSq > max ** 2
|
384
384
|
self
|
385
385
|
end
|
@@ -390,7 +390,7 @@ module RubySketch
|
|
390
390
|
#
|
391
391
|
# @return [Numeric] the distance
|
392
392
|
#
|
393
|
-
def dist
|
393
|
+
def dist(v)
|
394
394
|
(self - v).mag
|
395
395
|
end
|
396
396
|
|
@@ -401,7 +401,7 @@ module RubySketch
|
|
401
401
|
#
|
402
402
|
# @return [Numeric] the distance
|
403
403
|
#
|
404
|
-
def self.dist
|
404
|
+
def self.dist(v1, v2)
|
405
405
|
v1.dist v2
|
406
406
|
end
|
407
407
|
|
@@ -418,7 +418,7 @@ module RubySketch
|
|
418
418
|
#
|
419
419
|
# @return [Numeric] result of dot product
|
420
420
|
#
|
421
|
-
def dot
|
421
|
+
def dot(*args)
|
422
422
|
Rays::Point::dot getInternal__, toVector__(*args).getInternal__
|
423
423
|
end
|
424
424
|
|
@@ -429,7 +429,7 @@ module RubySketch
|
|
429
429
|
#
|
430
430
|
# @return [Numeric] result of dot product
|
431
431
|
#
|
432
|
-
def self.dot
|
432
|
+
def self.dot(v1, v2)
|
433
433
|
v1.dot v2
|
434
434
|
end
|
435
435
|
|
@@ -446,7 +446,7 @@ module RubySketch
|
|
446
446
|
#
|
447
447
|
# @return [Numeric] result of cross product
|
448
448
|
#
|
449
|
-
def cross
|
449
|
+
def cross(a, *rest)
|
450
450
|
target = self.class === rest.last ? rest.pop : nil
|
451
451
|
v = self.class.new Rays::Point::cross getInternal__, toVector__(a, *rest).getInternal__
|
452
452
|
target.set v if self.class === target
|
@@ -460,7 +460,7 @@ module RubySketch
|
|
460
460
|
#
|
461
461
|
# @return [Numeric] result of cross product
|
462
462
|
#
|
463
|
-
def self.cross
|
463
|
+
def self.cross(v1, v2, target = nil)
|
464
464
|
v1.cross v2, target
|
465
465
|
end
|
466
466
|
|
@@ -470,7 +470,7 @@ module RubySketch
|
|
470
470
|
#
|
471
471
|
# @return [Vector] rotated this object
|
472
472
|
#
|
473
|
-
def rotate
|
473
|
+
def rotate(angle)
|
474
474
|
angle = @context ? @context.toAngle__(angle) : angle * RAD2DEG__
|
475
475
|
@point.rotate! angle
|
476
476
|
self
|
@@ -480,7 +480,7 @@ module RubySketch
|
|
480
480
|
#
|
481
481
|
# @return [Numeric] the angle in radians
|
482
482
|
#
|
483
|
-
def heading
|
483
|
+
def heading()
|
484
484
|
Math.atan2 y, x
|
485
485
|
end
|
486
486
|
|
@@ -491,7 +491,7 @@ module RubySketch
|
|
491
491
|
#
|
492
492
|
# @return [Vector] rotated vector
|
493
493
|
#
|
494
|
-
def self.fromAngle
|
494
|
+
def self.fromAngle(angle, target = nil)
|
495
495
|
v = self.new(1, 0, 0).rotate(angle)
|
496
496
|
target.set v if target
|
497
497
|
v
|
@@ -504,7 +504,7 @@ module RubySketch
|
|
504
504
|
#
|
505
505
|
# @return [Numeric] angle in radians
|
506
506
|
#
|
507
|
-
def self.angleBetween
|
507
|
+
def self.angleBetween(v1, v2)
|
508
508
|
x1, y1, z1 = v1.array
|
509
509
|
x2, y2, z2 = v2.array
|
510
510
|
return 0 if (x1 == 0 && y1 == 0 && z1 == 0) || (x2 == 0 && y2 == 0 && z2 == 0)
|
@@ -521,7 +521,7 @@ module RubySketch
|
|
521
521
|
#
|
522
522
|
# @return [Vector] a random vector
|
523
523
|
#
|
524
|
-
def self.random2D
|
524
|
+
def self.random2D(target = nil)
|
525
525
|
v = self.fromAngle rand 0.0...(Math::PI * 2)
|
526
526
|
target.set v if target
|
527
527
|
v
|
@@ -533,9 +533,9 @@ module RubySketch
|
|
533
533
|
#
|
534
534
|
# @return [Vector] a random vector
|
535
535
|
#
|
536
|
-
def self.random3D
|
536
|
+
def self.random3D(target = nil)
|
537
537
|
angle = rand 0.0...(Math::PI * 2)
|
538
|
-
z = rand
|
538
|
+
z = rand(-1.0..1.0)
|
539
539
|
z2 = z ** 2
|
540
540
|
x = Math.sqrt(1.0 - z2) * Math.cos(angle)
|
541
541
|
y = Math.sqrt(1.0 - z2) * Math.sin(angle)
|
@@ -545,22 +545,22 @@ module RubySketch
|
|
545
545
|
end
|
546
546
|
|
547
547
|
# @private
|
548
|
-
def inspect
|
548
|
+
def inspect()
|
549
549
|
"<##{self.class.name} #{x}, #{y}, #{z}>"
|
550
550
|
end
|
551
551
|
|
552
552
|
# @private
|
553
|
-
def <=>
|
553
|
+
def <=>(o)
|
554
554
|
@point <=> o.getInternal__
|
555
555
|
end
|
556
556
|
|
557
557
|
# @private
|
558
|
-
protected def getInternal__
|
558
|
+
protected def getInternal__()
|
559
559
|
@point
|
560
560
|
end
|
561
561
|
|
562
562
|
# @private
|
563
|
-
private def toVector__
|
563
|
+
private def toVector__(*args)
|
564
564
|
self.class === args.first ? args.first : self.class.new(*args)
|
565
565
|
end
|
566
566
|
|
@@ -572,7 +572,7 @@ module RubySketch
|
|
572
572
|
class Image
|
573
573
|
|
574
574
|
# @private
|
575
|
-
def initialize
|
575
|
+
def initialize(image)
|
576
576
|
@image = image
|
577
577
|
end
|
578
578
|
|
@@ -580,7 +580,7 @@ module RubySketch
|
|
580
580
|
#
|
581
581
|
# @return [Numeric] width of image
|
582
582
|
#
|
583
|
-
def width
|
583
|
+
def width()
|
584
584
|
@image.width
|
585
585
|
end
|
586
586
|
|
@@ -588,7 +588,7 @@ module RubySketch
|
|
588
588
|
#
|
589
589
|
# @return [Numeric] height of image
|
590
590
|
#
|
591
|
-
def height
|
591
|
+
def height()
|
592
592
|
@image.height
|
593
593
|
end
|
594
594
|
|
@@ -599,7 +599,7 @@ module RubySketch
|
|
599
599
|
#
|
600
600
|
# @return [nil] nil
|
601
601
|
#
|
602
|
-
def resize
|
602
|
+
def resize(width, height)
|
603
603
|
@image = Rays::Image.new(width, height).paint do |painter|
|
604
604
|
painter.image @image, 0, 0, width, height
|
605
605
|
end
|
@@ -623,7 +623,7 @@ module RubySketch
|
|
623
623
|
#
|
624
624
|
# @return [nil] nil
|
625
625
|
#
|
626
|
-
def copy
|
626
|
+
def copy(img = nil, sx, sy, sw, sh, dx, dy, dw, dh)
|
627
627
|
img ||= self
|
628
628
|
@image.paint do |painter|
|
629
629
|
painter.image img.getInternal__, sx, sy, sw, sh, dx, dy, dw, dh
|
@@ -634,12 +634,12 @@ module RubySketch
|
|
634
634
|
#
|
635
635
|
# @param filename [String] file name to save image
|
636
636
|
#
|
637
|
-
def save
|
637
|
+
def save(filename)
|
638
638
|
@image.save filename
|
639
639
|
end
|
640
640
|
|
641
641
|
# @private
|
642
|
-
def getInternal__
|
642
|
+
def getInternal__()
|
643
643
|
@image
|
644
644
|
end
|
645
645
|
|
@@ -651,7 +651,7 @@ module RubySketch
|
|
651
651
|
class Font
|
652
652
|
|
653
653
|
# @private
|
654
|
-
def initialize
|
654
|
+
def initialize(font)
|
655
655
|
@font = font
|
656
656
|
end
|
657
657
|
|
@@ -668,7 +668,7 @@ module RubySketch
|
|
668
668
|
#
|
669
669
|
# @return [TextBounds] bounding box for text
|
670
670
|
#
|
671
|
-
def textBounds
|
671
|
+
def textBounds(str, x = 0, y = 0, fontSize = nil)
|
672
672
|
f = fontSize ? Rays::Font.new(@font.name, fontSize) : @font
|
673
673
|
TextBounds.new x, y, x + f.width(str), y + f.height
|
674
674
|
end
|
@@ -697,7 +697,7 @@ module RubySketch
|
|
697
697
|
attr_reader :h
|
698
698
|
|
699
699
|
# @private
|
700
|
-
def initialize
|
700
|
+
def initialize(x, y, w, h)
|
701
701
|
@x, @y, @w, @h = x, y, w, h
|
702
702
|
end
|
703
703
|
|
@@ -717,11 +717,11 @@ module RubySketch
|
|
717
717
|
attr_reader :y
|
718
718
|
|
719
719
|
# @private
|
720
|
-
def initialize
|
720
|
+
def initialize(x, y)
|
721
721
|
@x, @y = x, y
|
722
722
|
end
|
723
723
|
|
724
|
-
def id
|
724
|
+
def id()
|
725
725
|
raise NotImplementedError
|
726
726
|
end
|
727
727
|
|
@@ -736,7 +736,7 @@ module RubySketch
|
|
736
736
|
#
|
737
737
|
# @return [Array] device name list
|
738
738
|
#
|
739
|
-
def self.list
|
739
|
+
def self.list()
|
740
740
|
Rays::Camera.device_names
|
741
741
|
end
|
742
742
|
|
@@ -751,7 +751,7 @@ module RubySketch
|
|
751
751
|
# @param requestHeight [Integer] captured image height
|
752
752
|
# @param cameraName [String] camera device name
|
753
753
|
#
|
754
|
-
def initialize
|
754
|
+
def initialize(*args)
|
755
755
|
width, height, name =
|
756
756
|
if args.empty?
|
757
757
|
[-1, -1, nil]
|
@@ -769,7 +769,7 @@ module RubySketch
|
|
769
769
|
#
|
770
770
|
# @return [nil] nil
|
771
771
|
#
|
772
|
-
def start
|
772
|
+
def start()
|
773
773
|
raise "Failed to start capture" unless @camera.start
|
774
774
|
nil
|
775
775
|
end
|
@@ -778,7 +778,7 @@ module RubySketch
|
|
778
778
|
#
|
779
779
|
# @return [nil] nil
|
780
780
|
#
|
781
|
-
def stop
|
781
|
+
def stop()
|
782
782
|
@camera.stop
|
783
783
|
nil
|
784
784
|
end
|
@@ -787,13 +787,13 @@ module RubySketch
|
|
787
787
|
#
|
788
788
|
# @return [Boolean] true means object has next frame
|
789
789
|
#
|
790
|
-
def available
|
790
|
+
def available()
|
791
791
|
@camera.active?
|
792
792
|
end
|
793
793
|
|
794
794
|
# Reads next frame image
|
795
795
|
#
|
796
|
-
def read
|
796
|
+
def read()
|
797
797
|
@camera.image
|
798
798
|
end
|
799
799
|
|
@@ -801,7 +801,7 @@ module RubySketch
|
|
801
801
|
#
|
802
802
|
# @return [Numeric] the width of captured image
|
803
803
|
#
|
804
|
-
def width
|
804
|
+
def width()
|
805
805
|
@camera.image&.width || 0
|
806
806
|
end
|
807
807
|
|
@@ -809,17 +809,17 @@ module RubySketch
|
|
809
809
|
#
|
810
810
|
# @return [Numeric] the height of captured image
|
811
811
|
#
|
812
|
-
def height
|
812
|
+
def height()
|
813
813
|
@camera.image&.height || 0
|
814
814
|
end
|
815
815
|
|
816
816
|
# @private
|
817
|
-
def getInternal__
|
817
|
+
def getInternal__()
|
818
818
|
@camera.image || dummyImage__
|
819
819
|
end
|
820
820
|
|
821
821
|
# @private
|
822
|
-
private def dummyImage__
|
822
|
+
private def dummyImage__()
|
823
823
|
@dummy ||= Rays::Image.new 1, 1
|
824
824
|
end
|
825
825
|
|
@@ -852,50 +852,99 @@ module RubySketch
|
|
852
852
|
|
853
853
|
# RGB mode for colorMode().
|
854
854
|
#
|
855
|
-
RGB = :
|
855
|
+
RGB = :rgb
|
856
856
|
|
857
857
|
# HSB mode for colorMode().
|
858
858
|
#
|
859
|
-
HSB = :
|
859
|
+
HSB = :hsb
|
860
860
|
|
861
861
|
# Radian mode for angleMode().
|
862
862
|
#
|
863
|
-
RADIANS = :
|
863
|
+
RADIANS = :radians
|
864
864
|
|
865
865
|
# Degree mode for angleMode().
|
866
866
|
#
|
867
|
-
DEGREES = :
|
867
|
+
DEGREES = :degrees
|
868
868
|
|
869
869
|
# Mode for rectMode(), ellipseMode() and imageMode().
|
870
870
|
#
|
871
|
-
CORNER = :
|
871
|
+
CORNER = :corner
|
872
872
|
|
873
873
|
# Mode for rectMode(), ellipseMode() and imageMode().
|
874
874
|
#
|
875
|
-
CORNERS = :
|
875
|
+
CORNERS = :corners
|
876
876
|
|
877
877
|
# Mode for rectMode(), ellipseMode(), imageMode() and textAlign().
|
878
878
|
#
|
879
|
-
CENTER = :
|
879
|
+
CENTER = :center
|
880
880
|
|
881
881
|
# Mode for rectMode() and ellipseMode().
|
882
882
|
#
|
883
|
-
RADIUS = :
|
883
|
+
RADIUS = :radius
|
884
|
+
|
885
|
+
# Key codes.
|
886
|
+
ENTER = :enter
|
887
|
+
SPACE = :space
|
888
|
+
TAB = :tab
|
889
|
+
DELETE = :delete
|
890
|
+
BACKSPACE = :backspace
|
891
|
+
ESC = :escape
|
892
|
+
HOME = :home
|
893
|
+
#END = :end
|
894
|
+
PAGEUP = :pageup
|
895
|
+
PAGEDOWN = :pagedown
|
896
|
+
CLEAR = :clear
|
897
|
+
SHIFT = :shift
|
898
|
+
CONTROL = :control
|
899
|
+
ALT = :alt
|
900
|
+
WIN = :win
|
901
|
+
COMMAND = :command
|
902
|
+
OPTION = :option
|
903
|
+
FUNCTION = :function
|
904
|
+
CAPSLOCK = :capslock
|
905
|
+
SECTION = :section
|
906
|
+
HELP = :help
|
907
|
+
F1 = :f1
|
908
|
+
F2 = :f2
|
909
|
+
F3 = :f3
|
910
|
+
F4 = :f4
|
911
|
+
F5 = :f5
|
912
|
+
F6 = :f6
|
913
|
+
F7 = :f7
|
914
|
+
F8 = :f8
|
915
|
+
F9 = :f9
|
916
|
+
F10 = :f10
|
917
|
+
F11 = :f11
|
918
|
+
F12 = :f12
|
919
|
+
F13 = :f13
|
920
|
+
F14 = :f14
|
921
|
+
F15 = :f15
|
922
|
+
F16 = :f16
|
923
|
+
F17 = :f17
|
924
|
+
F18 = :f18
|
925
|
+
F19 = :f19
|
926
|
+
F20 = :f20
|
927
|
+
F21 = :f21
|
928
|
+
F22 = :f22
|
929
|
+
F23 = :f23
|
930
|
+
F24 = :f24
|
931
|
+
UP = :up
|
932
|
+
DOWN = :down
|
933
|
+
|
934
|
+
# Key code or Mode for textAlign().
|
935
|
+
LEFT = :left
|
936
|
+
|
937
|
+
# Key code or Mode for textAlign().
|
938
|
+
RIGHT = :right
|
884
939
|
|
885
940
|
# Mode for textAlign().
|
886
|
-
|
941
|
+
TOP = :top
|
887
942
|
|
888
943
|
# Mode for textAlign().
|
889
|
-
|
944
|
+
BOTTOM = :bottom
|
890
945
|
|
891
946
|
# Mode for textAlign().
|
892
|
-
|
893
|
-
|
894
|
-
# Mode for textAlign().
|
895
|
-
BOTTOM = :BOTTOM
|
896
|
-
|
897
|
-
# Mode for textAlign().
|
898
|
-
BASELINE = :BASELINE
|
947
|
+
BASELINE = :baseline
|
899
948
|
|
900
949
|
# Mode for strokeCap().
|
901
950
|
#
|
@@ -913,7 +962,7 @@ module RubySketch
|
|
913
962
|
#
|
914
963
|
SQUARE = :square
|
915
964
|
|
916
|
-
def init__
|
965
|
+
def init__(image, painter)
|
917
966
|
@drawing__ = false
|
918
967
|
@hsbColor__ = false
|
919
968
|
@colorMaxes__ = [1.0] * 4
|
@@ -937,29 +986,30 @@ module RubySketch
|
|
937
986
|
|
938
987
|
fill 255
|
939
988
|
stroke 0
|
989
|
+
strokeWeight 1
|
940
990
|
end
|
941
991
|
|
942
|
-
def updateCanvas__
|
992
|
+
def updateCanvas__(image, painter)
|
943
993
|
@image__, @painter__ = image, painter
|
944
994
|
end
|
945
995
|
|
946
996
|
# @private
|
947
|
-
def beginDraw__
|
997
|
+
def beginDraw__()
|
948
998
|
@matrixStack__.clear
|
949
999
|
@styleStack__.clear
|
950
1000
|
@drawing__ = true
|
951
1001
|
end
|
952
1002
|
|
953
1003
|
# @private
|
954
|
-
def endDraw__
|
1004
|
+
def endDraw__()
|
955
1005
|
@drawing__ = false
|
956
1006
|
end
|
957
1007
|
|
958
|
-
def width
|
1008
|
+
def width()
|
959
1009
|
@image__.width
|
960
1010
|
end
|
961
1011
|
|
962
|
-
def height
|
1012
|
+
def height()
|
963
1013
|
@image__.height
|
964
1014
|
end
|
965
1015
|
|
@@ -979,8 +1029,8 @@ module RubySketch
|
|
979
1029
|
#
|
980
1030
|
# @return [nil] nil
|
981
1031
|
#
|
982
|
-
def colorMode
|
983
|
-
mode = mode.
|
1032
|
+
def colorMode(mode, *maxes)
|
1033
|
+
mode = mode.downcase.to_sym
|
984
1034
|
raise ArgumentError, "invalid color mode: #{mode}" unless [RGB, HSB].include?(mode)
|
985
1035
|
raise ArgumentError unless [0, 1, 3, 4].include?(maxes.size)
|
986
1036
|
|
@@ -993,7 +1043,7 @@ module RubySketch
|
|
993
1043
|
end
|
994
1044
|
|
995
1045
|
# @private
|
996
|
-
private def toRGBA__
|
1046
|
+
private def toRGBA__(*args)
|
997
1047
|
a, b, c, d = args
|
998
1048
|
return parseColor__(a, b || alphaMax__) if a.kind_of?(String)
|
999
1049
|
|
@@ -1008,8 +1058,8 @@ module RubySketch
|
|
1008
1058
|
end
|
1009
1059
|
|
1010
1060
|
# @private
|
1011
|
-
private def parseColor__
|
1012
|
-
result = str.match
|
1061
|
+
private def parseColor__(str, alpha)
|
1062
|
+
result = str.match(/^\s*##{'([0-9a-f]{2})' * 3}\s*$/i)
|
1013
1063
|
raise ArgumentError, "invalid color code: '#{str}'" unless result
|
1014
1064
|
|
1015
1065
|
rgb = result[1..3].map.with_index {|hex, i| hex.to_i(16) / 255.0}
|
@@ -1017,7 +1067,7 @@ module RubySketch
|
|
1017
1067
|
end
|
1018
1068
|
|
1019
1069
|
# @private
|
1020
|
-
private def alphaMax__
|
1070
|
+
private def alphaMax__()
|
1021
1071
|
@colorMaxes__[3]
|
1022
1072
|
end
|
1023
1073
|
|
@@ -1027,8 +1077,8 @@ module RubySketch
|
|
1027
1077
|
#
|
1028
1078
|
# @return [nil] nil
|
1029
1079
|
#
|
1030
|
-
def angleMode
|
1031
|
-
@angleScale__ = case mode.
|
1080
|
+
def angleMode(mode)
|
1081
|
+
@angleScale__ = case mode.downcase.to_sym
|
1032
1082
|
when RADIANS then RAD2DEG__
|
1033
1083
|
when DEGREES then 1.0
|
1034
1084
|
else raise ArgumentError, "invalid angle mode: #{mode}"
|
@@ -1037,7 +1087,7 @@ module RubySketch
|
|
1037
1087
|
end
|
1038
1088
|
|
1039
1089
|
# @private
|
1040
|
-
def toAngle__
|
1090
|
+
def toAngle__(angle)
|
1041
1091
|
angle * @angleScale__
|
1042
1092
|
end
|
1043
1093
|
|
@@ -1052,7 +1102,7 @@ module RubySketch
|
|
1052
1102
|
#
|
1053
1103
|
# @return [nil] nil
|
1054
1104
|
#
|
1055
|
-
def rectMode
|
1105
|
+
def rectMode(mode)
|
1056
1106
|
@rectMode__ = mode
|
1057
1107
|
end
|
1058
1108
|
|
@@ -1067,7 +1117,7 @@ module RubySketch
|
|
1067
1117
|
#
|
1068
1118
|
# @return [nil] nil
|
1069
1119
|
#
|
1070
|
-
def ellipseMode
|
1120
|
+
def ellipseMode(mode)
|
1071
1121
|
@ellipseMode__ = mode
|
1072
1122
|
end
|
1073
1123
|
|
@@ -1081,12 +1131,12 @@ module RubySketch
|
|
1081
1131
|
#
|
1082
1132
|
# @return [nil] nil
|
1083
1133
|
#
|
1084
|
-
def imageMode
|
1134
|
+
def imageMode(mode)
|
1085
1135
|
@imageMode__ = mode
|
1086
1136
|
end
|
1087
1137
|
|
1088
1138
|
# @private
|
1089
|
-
private def toXYWH__
|
1139
|
+
private def toXYWH__(mode, a, b, c, d)
|
1090
1140
|
case mode
|
1091
1141
|
when CORNER then [a, b, c, d]
|
1092
1142
|
when CORNERS then [a, b, c - a, d - b]
|
@@ -1114,7 +1164,7 @@ module RubySketch
|
|
1114
1164
|
#
|
1115
1165
|
# @return [nil] nil
|
1116
1166
|
#
|
1117
|
-
def fill
|
1167
|
+
def fill(*args)
|
1118
1168
|
@painter__.fill(*toRGBA__(*args))
|
1119
1169
|
nil
|
1120
1170
|
end
|
@@ -1137,7 +1187,7 @@ module RubySketch
|
|
1137
1187
|
#
|
1138
1188
|
# @return [nil] nil
|
1139
1189
|
#
|
1140
|
-
def stroke
|
1190
|
+
def stroke(*args)
|
1141
1191
|
@painter__.stroke(*toRGBA__(*args))
|
1142
1192
|
nil
|
1143
1193
|
end
|
@@ -1148,7 +1198,7 @@ module RubySketch
|
|
1148
1198
|
#
|
1149
1199
|
# @return [nil] nil
|
1150
1200
|
#
|
1151
|
-
def strokeWeight
|
1201
|
+
def strokeWeight(weight)
|
1152
1202
|
@painter__.stroke_width weight
|
1153
1203
|
nil
|
1154
1204
|
end
|
@@ -1159,7 +1209,7 @@ module RubySketch
|
|
1159
1209
|
#
|
1160
1210
|
# @return [nil] nil
|
1161
1211
|
#
|
1162
|
-
def strokeCap
|
1212
|
+
def strokeCap(cap)
|
1163
1213
|
@painter__.stroke_cap cap
|
1164
1214
|
nil
|
1165
1215
|
end
|
@@ -1170,7 +1220,7 @@ module RubySketch
|
|
1170
1220
|
#
|
1171
1221
|
# @return [nil] nil
|
1172
1222
|
#
|
1173
|
-
def strokeJoin
|
1223
|
+
def strokeJoin(join)
|
1174
1224
|
@painter__.stroke_join join
|
1175
1225
|
nil
|
1176
1226
|
end
|
@@ -1179,7 +1229,7 @@ module RubySketch
|
|
1179
1229
|
#
|
1180
1230
|
# @return [nil] nil
|
1181
1231
|
#
|
1182
|
-
def noFill
|
1232
|
+
def noFill()
|
1183
1233
|
@painter__.fill nil
|
1184
1234
|
nil
|
1185
1235
|
end
|
@@ -1188,7 +1238,7 @@ module RubySketch
|
|
1188
1238
|
#
|
1189
1239
|
# @return [nil] nil
|
1190
1240
|
#
|
1191
|
-
def noStroke
|
1241
|
+
def noStroke()
|
1192
1242
|
@painter__.stroke nil
|
1193
1243
|
nil
|
1194
1244
|
end
|
@@ -1200,7 +1250,7 @@ module RubySketch
|
|
1200
1250
|
#
|
1201
1251
|
# @return [Font] current font
|
1202
1252
|
#
|
1203
|
-
def textFont
|
1253
|
+
def textFont(name = nil, size = nil)
|
1204
1254
|
setFont__ name, size if name || size
|
1205
1255
|
Font.new @painter__.font
|
1206
1256
|
end
|
@@ -1211,30 +1261,30 @@ module RubySketch
|
|
1211
1261
|
#
|
1212
1262
|
# @return [nil] nil
|
1213
1263
|
#
|
1214
|
-
def textSize
|
1264
|
+
def textSize(size)
|
1215
1265
|
setFont__ @painter__.font.name, size
|
1216
1266
|
nil
|
1217
1267
|
end
|
1218
1268
|
|
1219
|
-
def textWidth
|
1269
|
+
def textWidth(str)
|
1220
1270
|
@painter__.font.width str
|
1221
1271
|
end
|
1222
1272
|
|
1223
|
-
def textAscent
|
1273
|
+
def textAscent()
|
1224
1274
|
@painter__.font.ascent
|
1225
1275
|
end
|
1226
1276
|
|
1227
|
-
def textDescent
|
1277
|
+
def textDescent()
|
1228
1278
|
@painter__.font.descent
|
1229
1279
|
end
|
1230
1280
|
|
1231
|
-
def textAlign
|
1281
|
+
def textAlign(horizontal, vertical = BASELINE)
|
1232
1282
|
@textAlignH__ = horizontal
|
1233
1283
|
@textAlignV__ = vertical
|
1234
1284
|
end
|
1235
1285
|
|
1236
1286
|
# @private
|
1237
|
-
def setFont__
|
1287
|
+
def setFont__(name, size)
|
1238
1288
|
size = 256 if size && size > 256
|
1239
1289
|
@painter__.font name, size
|
1240
1290
|
end
|
@@ -1257,11 +1307,11 @@ module RubySketch
|
|
1257
1307
|
#
|
1258
1308
|
# @return [nil] nil
|
1259
1309
|
#
|
1260
|
-
def background
|
1310
|
+
def background(*args)
|
1261
1311
|
assertDrawing__
|
1262
|
-
rgba = toRGBA__
|
1312
|
+
rgba = toRGBA__(*args)
|
1263
1313
|
if rgba[3] == 1
|
1264
|
-
@painter__.background
|
1314
|
+
@painter__.background(*rgba)
|
1265
1315
|
else
|
1266
1316
|
@painter__.push fill: rgba, stroke: nil do |_|
|
1267
1317
|
@painter__.rect 0, 0, width, height
|
@@ -1277,7 +1327,7 @@ module RubySketch
|
|
1277
1327
|
#
|
1278
1328
|
# @return [nil] nil
|
1279
1329
|
#
|
1280
|
-
def point
|
1330
|
+
def point(x, y)
|
1281
1331
|
assertDrawing__
|
1282
1332
|
w = @painter__.stroke_width
|
1283
1333
|
w = 1 if w == 0
|
@@ -1294,7 +1344,7 @@ module RubySketch
|
|
1294
1344
|
#
|
1295
1345
|
# @return [nil] nil
|
1296
1346
|
#
|
1297
|
-
def line
|
1347
|
+
def line(x1, y1, x2, y2)
|
1298
1348
|
assertDrawing__
|
1299
1349
|
@painter__.line x1, y1, x2, y2
|
1300
1350
|
nil
|
@@ -1318,7 +1368,7 @@ module RubySketch
|
|
1318
1368
|
#
|
1319
1369
|
# @return [nil] nil
|
1320
1370
|
#
|
1321
|
-
def rect
|
1371
|
+
def rect(a, b, c, d, *args)
|
1322
1372
|
assertDrawing__
|
1323
1373
|
x, y, w, h = toXYWH__ @rectMode__, a, b, c, d
|
1324
1374
|
case args.size
|
@@ -1339,7 +1389,7 @@ module RubySketch
|
|
1339
1389
|
#
|
1340
1390
|
# @return [nil] nil
|
1341
1391
|
#
|
1342
|
-
def ellipse
|
1392
|
+
def ellipse(a, b, c, d)
|
1343
1393
|
assertDrawing__
|
1344
1394
|
x, y, w, h = toXYWH__ @ellipseMode__, a, b, c, d
|
1345
1395
|
@painter__.ellipse x, y, w, h
|
@@ -1354,7 +1404,7 @@ module RubySketch
|
|
1354
1404
|
#
|
1355
1405
|
# @return [nil] nil
|
1356
1406
|
#
|
1357
|
-
def circle
|
1407
|
+
def circle(x, y, extent)
|
1358
1408
|
ellipse x, y, extent, extent
|
1359
1409
|
end
|
1360
1410
|
|
@@ -1369,11 +1419,11 @@ module RubySketch
|
|
1369
1419
|
#
|
1370
1420
|
# @return [nil] nil
|
1371
1421
|
#
|
1372
|
-
def arc
|
1422
|
+
def arc(a, b, c, d, start, stop)
|
1373
1423
|
assertDrawing__
|
1374
1424
|
x, y, w, h = toXYWH__ @ellipseMode__, a, b, c, d
|
1375
|
-
start = toAngle__
|
1376
|
-
stop = toAngle__
|
1425
|
+
start = toAngle__(-start)
|
1426
|
+
stop = toAngle__(-stop)
|
1377
1427
|
@painter__.ellipse x, y, w, h, from: start, to: stop
|
1378
1428
|
nil
|
1379
1429
|
end
|
@@ -1386,7 +1436,7 @@ module RubySketch
|
|
1386
1436
|
#
|
1387
1437
|
# @return [nil] nil
|
1388
1438
|
#
|
1389
|
-
def square
|
1439
|
+
def square(x, y, extent)
|
1390
1440
|
rect x, y, extent, extent
|
1391
1441
|
end
|
1392
1442
|
|
@@ -1401,7 +1451,7 @@ module RubySketch
|
|
1401
1451
|
#
|
1402
1452
|
# @return [nil] nil
|
1403
1453
|
#
|
1404
|
-
def triangle
|
1454
|
+
def triangle(x1, y1, x2, y2, x3, y3)
|
1405
1455
|
assertDrawing__
|
1406
1456
|
@painter__.line x1, y1, x2, y2, x3, y3, loop: true
|
1407
1457
|
nil
|
@@ -1420,7 +1470,7 @@ module RubySketch
|
|
1420
1470
|
#
|
1421
1471
|
# @return [nil] nil
|
1422
1472
|
#
|
1423
|
-
def quad
|
1473
|
+
def quad(x1, y1, x2, y2, x3, y3, x4, y4)
|
1424
1474
|
assertDrawing__
|
1425
1475
|
@painter__.line x1, y1, x2, y2, x3, y3, x4, y4, loop: true
|
1426
1476
|
nil
|
@@ -1439,7 +1489,7 @@ module RubySketch
|
|
1439
1489
|
#
|
1440
1490
|
# @return [nil] nil
|
1441
1491
|
#
|
1442
|
-
def curve
|
1492
|
+
def curve(cx1, cy1, x1, y1, x2, y2, cx2, cy2)
|
1443
1493
|
assertDrawing__
|
1444
1494
|
@painter__.curve cx1, cy1, x1, y1, x2, y2, cx2, cy2
|
1445
1495
|
nil
|
@@ -1458,7 +1508,7 @@ module RubySketch
|
|
1458
1508
|
#
|
1459
1509
|
# @return [nil] nil
|
1460
1510
|
#
|
1461
|
-
def bezier
|
1511
|
+
def bezier(x1, y1, cx1, cy1, cx2, cy2, x2, y2)
|
1462
1512
|
assertDrawing__
|
1463
1513
|
@painter__.bezier x1, y1, cx1, cy1, cx2, cy2, x2, y2
|
1464
1514
|
nil
|
@@ -1480,7 +1530,7 @@ module RubySketch
|
|
1480
1530
|
#
|
1481
1531
|
# @return [nil] nil
|
1482
1532
|
#
|
1483
|
-
def text
|
1533
|
+
def text(str, x, y, x2 = nil, y2 = nil)
|
1484
1534
|
assertDrawing__
|
1485
1535
|
if x2
|
1486
1536
|
raise ArgumentError, "missing y2 parameter" unless y2
|
@@ -1514,7 +1564,7 @@ module RubySketch
|
|
1514
1564
|
#
|
1515
1565
|
# @return [nil] nil
|
1516
1566
|
#
|
1517
|
-
def image
|
1567
|
+
def image(img, a, b, c = nil, d = nil)
|
1518
1568
|
assertDrawing__
|
1519
1569
|
i = img.getInternal__
|
1520
1570
|
x, y, w, h = toXYWH__ @imageMode__, a, b, c || i.width, d || i.height
|
@@ -1539,7 +1589,7 @@ module RubySketch
|
|
1539
1589
|
#
|
1540
1590
|
# @return [nil] nil
|
1541
1591
|
#
|
1542
|
-
def copy
|
1592
|
+
def copy(img = nil, sx, sy, sw, sh, dx, dy, dw, dh)
|
1543
1593
|
assertDrawing__
|
1544
1594
|
src = img&.getInternal__ || @window__.canvas
|
1545
1595
|
@painter__.image src, sx, sy, sw, sh, dx, dy, dw, dh
|
@@ -1552,7 +1602,7 @@ module RubySketch
|
|
1552
1602
|
#
|
1553
1603
|
# @return [nil] nil
|
1554
1604
|
#
|
1555
|
-
def translate
|
1605
|
+
def translate(x, y)
|
1556
1606
|
assertDrawing__
|
1557
1607
|
@painter__.translate x, y
|
1558
1608
|
nil
|
@@ -1569,7 +1619,7 @@ module RubySketch
|
|
1569
1619
|
#
|
1570
1620
|
# @return [nil] nil
|
1571
1621
|
#
|
1572
|
-
def scale
|
1622
|
+
def scale(x, y)
|
1573
1623
|
assertDrawing__
|
1574
1624
|
@painter__.scale x, y
|
1575
1625
|
nil
|
@@ -1581,7 +1631,7 @@ module RubySketch
|
|
1581
1631
|
#
|
1582
1632
|
# @return [nil] nil
|
1583
1633
|
#
|
1584
|
-
def rotate
|
1634
|
+
def rotate(angle)
|
1585
1635
|
assertDrawing__
|
1586
1636
|
@painter__.rotate toAngle__ angle
|
1587
1637
|
nil
|
@@ -1591,7 +1641,7 @@ module RubySketch
|
|
1591
1641
|
#
|
1592
1642
|
# @return [nil] nil
|
1593
1643
|
#
|
1594
|
-
def pushMatrix
|
1644
|
+
def pushMatrix(&block)
|
1595
1645
|
assertDrawing__
|
1596
1646
|
@matrixStack__.push @painter__.matrix
|
1597
1647
|
if block
|
@@ -1605,7 +1655,7 @@ module RubySketch
|
|
1605
1655
|
#
|
1606
1656
|
# @return [nil] nil
|
1607
1657
|
#
|
1608
|
-
def popMatrix
|
1658
|
+
def popMatrix()
|
1609
1659
|
assertDrawing__
|
1610
1660
|
raise "matrix stack underflow" if @matrixStack__.empty?
|
1611
1661
|
@painter__.matrix = @matrixStack__.pop
|
@@ -1616,7 +1666,7 @@ module RubySketch
|
|
1616
1666
|
#
|
1617
1667
|
# @return [nil] nil
|
1618
1668
|
#
|
1619
|
-
def resetMatrix
|
1669
|
+
def resetMatrix()
|
1620
1670
|
assertDrawing__
|
1621
1671
|
@painter__.matrix = 1
|
1622
1672
|
nil
|
@@ -1626,7 +1676,7 @@ module RubySketch
|
|
1626
1676
|
#
|
1627
1677
|
# @return [nil] nil
|
1628
1678
|
#
|
1629
|
-
def pushStyle
|
1679
|
+
def pushStyle(&block)
|
1630
1680
|
assertDrawing__
|
1631
1681
|
@styleStack__.push [
|
1632
1682
|
@painter__.fill,
|
@@ -1653,7 +1703,7 @@ module RubySketch
|
|
1653
1703
|
#
|
1654
1704
|
# @return [nil] nil
|
1655
1705
|
#
|
1656
|
-
def popStyle
|
1706
|
+
def popStyle()
|
1657
1707
|
assertDrawing__
|
1658
1708
|
raise "style stack underflow" if @styleStack__.empty?
|
1659
1709
|
@painter__.fill,
|
@@ -1675,7 +1725,7 @@ module RubySketch
|
|
1675
1725
|
#
|
1676
1726
|
# @return [nil] nil
|
1677
1727
|
#
|
1678
|
-
def push
|
1728
|
+
def push(&block)
|
1679
1729
|
pushMatrix
|
1680
1730
|
pushStyle
|
1681
1731
|
if block
|
@@ -1688,18 +1738,18 @@ module RubySketch
|
|
1688
1738
|
#
|
1689
1739
|
# @return [nil] nil
|
1690
1740
|
#
|
1691
|
-
def pop
|
1741
|
+
def pop()
|
1692
1742
|
popMatrix
|
1693
1743
|
popStyle
|
1694
1744
|
end
|
1695
1745
|
|
1696
1746
|
# @private
|
1697
|
-
def getInternal__
|
1747
|
+
def getInternal__()
|
1698
1748
|
@image__
|
1699
1749
|
end
|
1700
1750
|
|
1701
1751
|
# @private
|
1702
|
-
private def assertDrawing__
|
1752
|
+
private def assertDrawing__()
|
1703
1753
|
raise "call beginDraw() before drawing" unless @drawing__
|
1704
1754
|
end
|
1705
1755
|
|
@@ -1714,14 +1764,14 @@ module RubySketch
|
|
1714
1764
|
|
1715
1765
|
# Initialize graphics object.
|
1716
1766
|
#
|
1717
|
-
def initialize
|
1767
|
+
def initialize(width, height)
|
1718
1768
|
image = Rays::Image.new width, height
|
1719
1769
|
init__ image, image.painter
|
1720
1770
|
end
|
1721
1771
|
|
1722
1772
|
# Start drawing.
|
1723
1773
|
#
|
1724
|
-
def beginDraw
|
1774
|
+
def beginDraw(&block)
|
1725
1775
|
@painter__.__send__ :begin_paint
|
1726
1776
|
beginDraw__
|
1727
1777
|
push
|
@@ -1733,7 +1783,7 @@ module RubySketch
|
|
1733
1783
|
|
1734
1784
|
# End drawing.
|
1735
1785
|
#
|
1736
|
-
def endDraw
|
1786
|
+
def endDraw()
|
1737
1787
|
pop
|
1738
1788
|
endDraw__
|
1739
1789
|
@painter__.__send__ :end_paint
|
@@ -1756,24 +1806,29 @@ module RubySketch
|
|
1756
1806
|
@@context__ = nil
|
1757
1807
|
|
1758
1808
|
# @private
|
1759
|
-
def self.context__
|
1809
|
+
def self.context__()
|
1760
1810
|
@@context__
|
1761
1811
|
end
|
1762
1812
|
|
1763
1813
|
# @private
|
1764
|
-
def initialize
|
1814
|
+
def initialize(window)
|
1765
1815
|
@@context__ = self
|
1766
1816
|
|
1817
|
+
tmpdir__.tap {|dir| FileUtils.rm_r dir.to_s if dir.directory?}
|
1818
|
+
|
1767
1819
|
@window__ = window
|
1768
1820
|
init__ @window__.canvas, @window__.canvas_painter.paint {background 0.8}
|
1769
1821
|
|
1770
|
-
@loop__
|
1771
|
-
@redraw__
|
1772
|
-
@frameCount__
|
1773
|
-
@
|
1774
|
-
@
|
1775
|
-
@
|
1776
|
-
@
|
1822
|
+
@loop__ = true
|
1823
|
+
@redraw__ = false
|
1824
|
+
@frameCount__ = 0
|
1825
|
+
@key__ = nil
|
1826
|
+
@keyCode__ = nil
|
1827
|
+
@keysPressed__ = Set.new
|
1828
|
+
@pointerPos__ =
|
1829
|
+
@pointerPrevPos__ = [0, 0]
|
1830
|
+
@pointersPressed__ = Set.new
|
1831
|
+
@touches__ = []
|
1777
1832
|
|
1778
1833
|
@window__.before_draw = proc {beginDraw__}
|
1779
1834
|
@window__.after_draw = proc {endDraw__}
|
@@ -1794,17 +1849,38 @@ module RubySketch
|
|
1794
1849
|
@redraw__ = false
|
1795
1850
|
drawFrame.call
|
1796
1851
|
end
|
1797
|
-
@
|
1852
|
+
@pointerPrevPos__ = @pointerPos__
|
1798
1853
|
end
|
1799
1854
|
|
1855
|
+
updateKeyStates = -> event, pressed {
|
1856
|
+
@key__ = event.chars
|
1857
|
+
@keyCode__ = event.key
|
1858
|
+
if pressed != nil
|
1859
|
+
set, key = @keysPressed__, event.key
|
1860
|
+
pressed ? set.add(key) : set.delete(key)
|
1861
|
+
end
|
1862
|
+
}
|
1863
|
+
|
1800
1864
|
updatePointerStates = -> event, pressed = nil {
|
1801
|
-
@
|
1802
|
-
@
|
1803
|
-
|
1804
|
-
|
1805
|
-
|
1865
|
+
@pointerPos__ = event.pos.to_a
|
1866
|
+
@touches__ = event.positions.map {|pos| Touch.new(*pos.to_a)}
|
1867
|
+
if pressed != nil
|
1868
|
+
set, type = @pointersPressed__, event.pointer_type
|
1869
|
+
pressed ? set.add(type) : set.delete(type)
|
1870
|
+
end
|
1806
1871
|
}
|
1807
1872
|
|
1873
|
+
@window__.key_down = proc do |e|
|
1874
|
+
updateKeyStates.call e, true
|
1875
|
+
@keyPressedBlock__&.call
|
1876
|
+
@keyTypedBlock__&.call unless @key__.empty?
|
1877
|
+
end
|
1878
|
+
|
1879
|
+
@window__.key_up = proc do |e|
|
1880
|
+
updateKeyStates.call e, false
|
1881
|
+
@keyReleasedBlock__&.call
|
1882
|
+
end
|
1883
|
+
|
1808
1884
|
@window__.pointer_down = proc do |e|
|
1809
1885
|
updatePointerStates.call e, true
|
1810
1886
|
(@touchStartedBlock__ || @mousePressedBlock__)&.call
|
@@ -1824,82 +1900,130 @@ module RubySketch
|
|
1824
1900
|
updatePointerStates.call e
|
1825
1901
|
(@touchMovedBlock__ || @mouseDraggedBlock__)&.call
|
1826
1902
|
end
|
1903
|
+
|
1904
|
+
@window__.motion = proc do |e|
|
1905
|
+
@motionGravity__ = createVector(*e.gravity.to_a(3))
|
1906
|
+
@motionBlock__&.call
|
1907
|
+
end
|
1827
1908
|
end
|
1828
1909
|
|
1829
|
-
#
|
1910
|
+
# Defines setup block.
|
1830
1911
|
#
|
1831
|
-
def setup
|
1912
|
+
def setup(&block)
|
1832
1913
|
@window__.setup = block
|
1833
1914
|
nil
|
1834
1915
|
end
|
1835
1916
|
|
1836
|
-
#
|
1917
|
+
# Defines draw block.
|
1837
1918
|
#
|
1838
|
-
def draw
|
1919
|
+
def draw(&block)
|
1839
1920
|
@drawBlock__ = block if block
|
1840
1921
|
nil
|
1841
1922
|
end
|
1842
1923
|
|
1843
|
-
|
1844
|
-
|
1924
|
+
# Defines keyPressed block.
|
1925
|
+
#
|
1926
|
+
# @return [Boolean] is any key pressed or not
|
1927
|
+
#
|
1928
|
+
def keyPressed(&block)
|
1929
|
+
@keyPressedBlock__ = block if block
|
1930
|
+
not @keysPressed__.empty?
|
1931
|
+
end
|
1932
|
+
|
1933
|
+
# Defines keyReleased block.
|
1934
|
+
#
|
1935
|
+
def keyReleased(&block)
|
1936
|
+
@keyReleasedBlock__ = block if block
|
1937
|
+
nil
|
1938
|
+
end
|
1939
|
+
|
1940
|
+
# Defines keyTyped block.
|
1941
|
+
#
|
1942
|
+
def keyTyped(&block)
|
1943
|
+
@keyTypedBlock__ = block if block
|
1845
1944
|
nil
|
1846
1945
|
end
|
1847
1946
|
|
1848
|
-
|
1947
|
+
# Defines mousePressed block.
|
1948
|
+
#
|
1949
|
+
# @return [Boolean] is any mouse button pressed or not
|
1950
|
+
#
|
1951
|
+
def mousePressed(&block)
|
1849
1952
|
@mousePressedBlock__ = block if block
|
1850
|
-
@
|
1953
|
+
not @pointersPressed__.empty?
|
1851
1954
|
end
|
1852
1955
|
|
1853
|
-
|
1956
|
+
# Defines mouseReleased block.
|
1957
|
+
#
|
1958
|
+
def mouseReleased(&block)
|
1854
1959
|
@mouseReleasedBlock__ = block if block
|
1855
1960
|
nil
|
1856
1961
|
end
|
1857
1962
|
|
1858
|
-
|
1963
|
+
# Defines mouseMoved block.
|
1964
|
+
#
|
1965
|
+
def mouseMoved(&block)
|
1859
1966
|
@mouseMovedBlock__ = block if block
|
1860
1967
|
nil
|
1861
1968
|
end
|
1862
1969
|
|
1863
|
-
|
1970
|
+
# Defines mouseDragged block.
|
1971
|
+
#
|
1972
|
+
def mouseDragged(&block)
|
1864
1973
|
@mouseDraggedBlock__ = block if block
|
1865
1974
|
nil
|
1866
1975
|
end
|
1867
1976
|
|
1868
|
-
|
1977
|
+
# Defines touchStarted block.
|
1978
|
+
#
|
1979
|
+
def touchStarted(&block)
|
1869
1980
|
@touchStartedBlock__ = block if block
|
1870
1981
|
nil
|
1871
1982
|
end
|
1872
1983
|
|
1873
|
-
|
1984
|
+
# Defines touchEnded block.
|
1985
|
+
#
|
1986
|
+
def touchEnded(&block)
|
1874
1987
|
@touchEndedBlock__ = block if block
|
1875
1988
|
nil
|
1876
1989
|
end
|
1877
1990
|
|
1878
|
-
|
1991
|
+
# Defines touchMoved block.
|
1992
|
+
#
|
1993
|
+
def touchMoved(&block)
|
1879
1994
|
@touchMovedBlock__ = block if block
|
1880
1995
|
nil
|
1881
1996
|
end
|
1882
1997
|
|
1998
|
+
# Defines motion block.
|
1999
|
+
#
|
2000
|
+
def motion(&block)
|
2001
|
+
@motionBlock__ = block if block
|
2002
|
+
nil
|
2003
|
+
end
|
2004
|
+
|
1883
2005
|
# Changes canvas size.
|
1884
2006
|
#
|
1885
|
-
# @param width
|
1886
|
-
# @param height
|
2007
|
+
# @param width [Integer] new width
|
2008
|
+
# @param height [Integer] new height
|
2009
|
+
# @param pixelDensity [Numeric] new pixel density
|
1887
2010
|
#
|
1888
2011
|
# @return [nil] nil
|
1889
2012
|
#
|
1890
|
-
def size
|
2013
|
+
def size(width, height, pixelDensity: self.pixelDensity)
|
1891
2014
|
resizeCanvas__ :size, width, height, pixelDensity
|
1892
2015
|
nil
|
1893
2016
|
end
|
1894
2017
|
|
1895
2018
|
# Changes canvas size.
|
1896
2019
|
#
|
1897
|
-
# @param width
|
1898
|
-
# @param height
|
2020
|
+
# @param width [Integer] new width
|
2021
|
+
# @param height [Integer] new height
|
2022
|
+
# @param pixelDensity [Numeric] new pixel density
|
1899
2023
|
#
|
1900
2024
|
# @return [nil] nil
|
1901
2025
|
#
|
1902
|
-
def createCanvas
|
2026
|
+
def createCanvas(width, height, pixelDensity: self.pixelDensity)
|
1903
2027
|
resizeCanvas__ :createCanvas, width, height, pixelDensity
|
1904
2028
|
nil
|
1905
2029
|
end
|
@@ -1910,13 +2034,13 @@ module RubySketch
|
|
1910
2034
|
#
|
1911
2035
|
# @return [Numeric] current pixel density
|
1912
2036
|
#
|
1913
|
-
def pixelDensity
|
2037
|
+
def pixelDensity(density = nil)
|
1914
2038
|
resizeCanvas__ :pixelDensity, width, height, density if density
|
1915
2039
|
@painter__.pixel_density
|
1916
2040
|
end
|
1917
2041
|
|
1918
2042
|
# @private
|
1919
|
-
def resizeCanvas__
|
2043
|
+
def resizeCanvas__(name, width, height, pixelDensity)
|
1920
2044
|
raise '#{name}() must be called on startup or setup block' if @started__
|
1921
2045
|
|
1922
2046
|
@painter__.__send__ :end_paint
|
@@ -1931,15 +2055,23 @@ module RubySketch
|
|
1931
2055
|
#
|
1932
2056
|
# @return [Numeric] pixel density
|
1933
2057
|
#
|
1934
|
-
def displayDensity
|
2058
|
+
def displayDensity()
|
1935
2059
|
@window__.painter.pixel_density
|
1936
2060
|
end
|
1937
2061
|
|
1938
|
-
|
2062
|
+
# Returns window width.
|
2063
|
+
#
|
2064
|
+
# @return [Numeric] window width
|
2065
|
+
#
|
2066
|
+
def windowWidth()
|
1939
2067
|
@window__.width
|
1940
2068
|
end
|
1941
2069
|
|
1942
|
-
|
2070
|
+
# Returns window height.
|
2071
|
+
#
|
2072
|
+
# @return [Numeric] window height
|
2073
|
+
#
|
2074
|
+
def windowHeight()
|
1943
2075
|
@window__.height
|
1944
2076
|
end
|
1945
2077
|
|
@@ -1947,7 +2079,7 @@ module RubySketch
|
|
1947
2079
|
#
|
1948
2080
|
# @return [Integer] total number of frames
|
1949
2081
|
#
|
1950
|
-
def frameCount
|
2082
|
+
def frameCount()
|
1951
2083
|
@frameCount__
|
1952
2084
|
end
|
1953
2085
|
|
@@ -1955,55 +2087,79 @@ module RubySketch
|
|
1955
2087
|
#
|
1956
2088
|
# @return [Float] frames per second
|
1957
2089
|
#
|
1958
|
-
def frameRate
|
2090
|
+
def frameRate()
|
1959
2091
|
@window__.event.fps
|
1960
2092
|
end
|
1961
2093
|
|
2094
|
+
# Returns the last key that was pressed or released.
|
2095
|
+
#
|
2096
|
+
# @return [String] last key
|
2097
|
+
#
|
2098
|
+
def key()
|
2099
|
+
@key__
|
2100
|
+
end
|
2101
|
+
|
2102
|
+
# Returns the last key code that was pressed or released.
|
2103
|
+
#
|
2104
|
+
# @return [Symbol] last key code
|
2105
|
+
#
|
2106
|
+
def keyCode()
|
2107
|
+
@keyCode__
|
2108
|
+
end
|
2109
|
+
|
1962
2110
|
# Returns mouse x position
|
1963
2111
|
#
|
1964
2112
|
# @return [Numeric] horizontal position of mouse
|
1965
2113
|
#
|
1966
|
-
def mouseX
|
1967
|
-
@
|
2114
|
+
def mouseX()
|
2115
|
+
@pointerPos__[0]
|
1968
2116
|
end
|
1969
2117
|
|
1970
2118
|
# Returns mouse y position
|
1971
2119
|
#
|
1972
2120
|
# @return [Numeric] vertical position of mouse
|
1973
2121
|
#
|
1974
|
-
def mouseY
|
1975
|
-
@
|
2122
|
+
def mouseY()
|
2123
|
+
@pointerPos__[1]
|
1976
2124
|
end
|
1977
2125
|
|
1978
2126
|
# Returns mouse x position in previous frame
|
1979
2127
|
#
|
1980
2128
|
# @return [Numeric] horizontal position of mouse
|
1981
2129
|
#
|
1982
|
-
def pmouseX
|
1983
|
-
@
|
2130
|
+
def pmouseX()
|
2131
|
+
@pointerPrevPos__[0]
|
1984
2132
|
end
|
1985
2133
|
|
1986
2134
|
# Returns mouse y position in previous frame
|
1987
2135
|
#
|
1988
2136
|
# @return [Numeric] vertical position of mouse
|
1989
2137
|
#
|
1990
|
-
def pmouseY
|
1991
|
-
@
|
2138
|
+
def pmouseY()
|
2139
|
+
@pointerPrevPos__[1]
|
1992
2140
|
end
|
1993
2141
|
|
1994
2142
|
# Returns array of touches
|
1995
2143
|
#
|
1996
2144
|
# @return [Array] Touch objects
|
1997
2145
|
#
|
1998
|
-
def touches
|
2146
|
+
def touches()
|
1999
2147
|
@touches__
|
2000
2148
|
end
|
2001
2149
|
|
2150
|
+
# Returns vector for real world gravity
|
2151
|
+
#
|
2152
|
+
# @return [Vector] gravity vector
|
2153
|
+
#
|
2154
|
+
def motionGravity()
|
2155
|
+
@motionGravity__
|
2156
|
+
end
|
2157
|
+
|
2002
2158
|
# Enables calling draw block on every frame.
|
2003
2159
|
#
|
2004
2160
|
# @return [nil] nil
|
2005
2161
|
#
|
2006
|
-
def loop
|
2162
|
+
def loop()
|
2007
2163
|
@loop__ = true
|
2008
2164
|
end
|
2009
2165
|
|
@@ -2011,7 +2167,7 @@ module RubySketch
|
|
2011
2167
|
#
|
2012
2168
|
# @return [nil] nil
|
2013
2169
|
#
|
2014
|
-
def noLoop
|
2170
|
+
def noLoop()
|
2015
2171
|
@loop__ = false
|
2016
2172
|
end
|
2017
2173
|
|
@@ -2019,7 +2175,7 @@ module RubySketch
|
|
2019
2175
|
#
|
2020
2176
|
# @return [nil] nil
|
2021
2177
|
#
|
2022
|
-
def redraw
|
2178
|
+
def redraw()
|
2023
2179
|
@redraw__ = true
|
2024
2180
|
end
|
2025
2181
|
|
@@ -2033,7 +2189,7 @@ module RubySketch
|
|
2033
2189
|
#
|
2034
2190
|
# @return [Numeric] absolute number
|
2035
2191
|
#
|
2036
|
-
def abs
|
2192
|
+
def abs(value)
|
2037
2193
|
value.abs
|
2038
2194
|
end
|
2039
2195
|
|
@@ -2043,7 +2199,7 @@ module RubySketch
|
|
2043
2199
|
#
|
2044
2200
|
# @return [Numeric] rounded up number
|
2045
2201
|
#
|
2046
|
-
def ceil
|
2202
|
+
def ceil(value)
|
2047
2203
|
value.ceil
|
2048
2204
|
end
|
2049
2205
|
|
@@ -2053,7 +2209,7 @@ module RubySketch
|
|
2053
2209
|
#
|
2054
2210
|
# @return [Numeric] rounded down number
|
2055
2211
|
#
|
2056
|
-
def floor
|
2212
|
+
def floor(value)
|
2057
2213
|
value.floor
|
2058
2214
|
end
|
2059
2215
|
|
@@ -2063,7 +2219,7 @@ module RubySketch
|
|
2063
2219
|
#
|
2064
2220
|
# @return [Numeric] rounded number
|
2065
2221
|
#
|
2066
|
-
def round
|
2222
|
+
def round(value)
|
2067
2223
|
value.round
|
2068
2224
|
end
|
2069
2225
|
|
@@ -2073,7 +2229,7 @@ module RubySketch
|
|
2073
2229
|
#
|
2074
2230
|
# @return [Numeric] result number
|
2075
2231
|
#
|
2076
|
-
def log
|
2232
|
+
def log(n)
|
2077
2233
|
Math.log n
|
2078
2234
|
end
|
2079
2235
|
|
@@ -2083,7 +2239,7 @@ module RubySketch
|
|
2083
2239
|
#
|
2084
2240
|
# @return [Numeric] result number
|
2085
2241
|
#
|
2086
|
-
def exp
|
2242
|
+
def exp(n)
|
2087
2243
|
Math.exp n
|
2088
2244
|
end
|
2089
2245
|
|
@@ -2094,7 +2250,7 @@ module RubySketch
|
|
2094
2250
|
#
|
2095
2251
|
# @return [Numeric] value ** exponent
|
2096
2252
|
#
|
2097
|
-
def pow
|
2253
|
+
def pow(value, exponent)
|
2098
2254
|
value ** exponent
|
2099
2255
|
end
|
2100
2256
|
|
@@ -2104,7 +2260,7 @@ module RubySketch
|
|
2104
2260
|
#
|
2105
2261
|
# @return [Numeric] squared value
|
2106
2262
|
#
|
2107
|
-
def sq
|
2263
|
+
def sq(value)
|
2108
2264
|
value * value
|
2109
2265
|
end
|
2110
2266
|
|
@@ -2114,7 +2270,7 @@ module RubySketch
|
|
2114
2270
|
#
|
2115
2271
|
# @return [Numeric] squared value
|
2116
2272
|
#
|
2117
|
-
def sqrt
|
2273
|
+
def sqrt(value)
|
2118
2274
|
Math.sqrt value
|
2119
2275
|
end
|
2120
2276
|
|
@@ -2129,7 +2285,7 @@ module RubySketch
|
|
2129
2285
|
#
|
2130
2286
|
# @return [Numeric] magnitude
|
2131
2287
|
#
|
2132
|
-
def mag
|
2288
|
+
def mag(*args)
|
2133
2289
|
x, y, z = *args
|
2134
2290
|
case args.size
|
2135
2291
|
when 2 then Math.sqrt x * x + y * y
|
@@ -2152,7 +2308,7 @@ module RubySketch
|
|
2152
2308
|
#
|
2153
2309
|
# @return [Numeric] distance between 2 points
|
2154
2310
|
#
|
2155
|
-
def dist
|
2311
|
+
def dist(*args)
|
2156
2312
|
case args.size
|
2157
2313
|
when 4
|
2158
2314
|
x1, y1, x2, y2 = *args
|
@@ -2174,7 +2330,7 @@ module RubySketch
|
|
2174
2330
|
#
|
2175
2331
|
# @return [Numeric] normalized value between 0..1
|
2176
2332
|
#
|
2177
|
-
def norm
|
2333
|
+
def norm(value, start, stop)
|
2178
2334
|
(value.to_f - start.to_f) / (stop.to_f - start.to_f)
|
2179
2335
|
end
|
2180
2336
|
|
@@ -2186,7 +2342,7 @@ module RubySketch
|
|
2186
2342
|
#
|
2187
2343
|
# @return [Numeric] interporated number
|
2188
2344
|
#
|
2189
|
-
def lerp
|
2345
|
+
def lerp(start, stop, amount)
|
2190
2346
|
start + (stop - start) * amount
|
2191
2347
|
end
|
2192
2348
|
|
@@ -2200,7 +2356,7 @@ module RubySketch
|
|
2200
2356
|
#
|
2201
2357
|
# @return [Numeric] mapped number
|
2202
2358
|
#
|
2203
|
-
def map
|
2359
|
+
def map(value, start1, stop1, start2, stop2)
|
2204
2360
|
lerp start2, stop2, norm(value, start1, stop1)
|
2205
2361
|
end
|
2206
2362
|
|
@@ -2217,7 +2373,7 @@ module RubySketch
|
|
2217
2373
|
#
|
2218
2374
|
# @return [Numeric] minimum value
|
2219
2375
|
#
|
2220
|
-
def min
|
2376
|
+
def min(*args)
|
2221
2377
|
args.flatten.min
|
2222
2378
|
end
|
2223
2379
|
|
@@ -2234,7 +2390,7 @@ module RubySketch
|
|
2234
2390
|
#
|
2235
2391
|
# @return [Numeric] maximum value
|
2236
2392
|
#
|
2237
|
-
def max
|
2393
|
+
def max(*args)
|
2238
2394
|
args.flatten.max
|
2239
2395
|
end
|
2240
2396
|
|
@@ -2246,7 +2402,7 @@ module RubySketch
|
|
2246
2402
|
#
|
2247
2403
|
# @return [Numeric] constrained number
|
2248
2404
|
#
|
2249
|
-
def constrain
|
2405
|
+
def constrain(value, min, max)
|
2250
2406
|
value < min ? min : (value > max ? max : value)
|
2251
2407
|
end
|
2252
2408
|
|
@@ -2256,7 +2412,7 @@ module RubySketch
|
|
2256
2412
|
#
|
2257
2413
|
# @return [Numeric] radian
|
2258
2414
|
#
|
2259
|
-
def radians
|
2415
|
+
def radians(degree)
|
2260
2416
|
degree * DEG2RAD__
|
2261
2417
|
end
|
2262
2418
|
|
@@ -2266,7 +2422,7 @@ module RubySketch
|
|
2266
2422
|
#
|
2267
2423
|
# @return [Numeric] degree
|
2268
2424
|
#
|
2269
|
-
def degrees
|
2425
|
+
def degrees(radian)
|
2270
2426
|
radian * RAD2DEG__
|
2271
2427
|
end
|
2272
2428
|
|
@@ -2276,7 +2432,7 @@ module RubySketch
|
|
2276
2432
|
#
|
2277
2433
|
# @return [Numeric] the sine
|
2278
2434
|
#
|
2279
|
-
def sin
|
2435
|
+
def sin(angle)
|
2280
2436
|
Math.sin angle
|
2281
2437
|
end
|
2282
2438
|
|
@@ -2286,7 +2442,7 @@ module RubySketch
|
|
2286
2442
|
#
|
2287
2443
|
# @return [Numeric] the cosine
|
2288
2444
|
#
|
2289
|
-
def cos
|
2445
|
+
def cos(angle)
|
2290
2446
|
Math.cos angle
|
2291
2447
|
end
|
2292
2448
|
|
@@ -2296,7 +2452,7 @@ module RubySketch
|
|
2296
2452
|
#
|
2297
2453
|
# @return [Numeric] the tangent
|
2298
2454
|
#
|
2299
|
-
def tan
|
2455
|
+
def tan(angle)
|
2300
2456
|
Math.tan angle
|
2301
2457
|
end
|
2302
2458
|
|
@@ -2306,7 +2462,7 @@ module RubySketch
|
|
2306
2462
|
#
|
2307
2463
|
# @return [Numeric] the arc sine
|
2308
2464
|
#
|
2309
|
-
def asin
|
2465
|
+
def asin(value)
|
2310
2466
|
Math.asin value
|
2311
2467
|
end
|
2312
2468
|
|
@@ -2316,7 +2472,7 @@ module RubySketch
|
|
2316
2472
|
#
|
2317
2473
|
# @return [Numeric] the arc cosine
|
2318
2474
|
#
|
2319
|
-
def acos
|
2475
|
+
def acos(value)
|
2320
2476
|
Math.acos value
|
2321
2477
|
end
|
2322
2478
|
|
@@ -2326,7 +2482,7 @@ module RubySketch
|
|
2326
2482
|
#
|
2327
2483
|
# @return [Numeric] the arc tangent
|
2328
2484
|
#
|
2329
|
-
def atan
|
2485
|
+
def atan(value)
|
2330
2486
|
Math.atan value
|
2331
2487
|
end
|
2332
2488
|
|
@@ -2337,7 +2493,7 @@ module RubySketch
|
|
2337
2493
|
#
|
2338
2494
|
# @return [Numeric] the angle in radians
|
2339
2495
|
#
|
2340
|
-
def atan2
|
2496
|
+
def atan2(y, x)
|
2341
2497
|
Math.atan2 y, x
|
2342
2498
|
end
|
2343
2499
|
|
@@ -2353,7 +2509,7 @@ module RubySketch
|
|
2353
2509
|
#
|
2354
2510
|
# @return [Numeric] noise value (0.0..1.0)
|
2355
2511
|
#
|
2356
|
-
def noise
|
2512
|
+
def noise(x, y = 0, z = 0)
|
2357
2513
|
Rays.perlin(x, y, z) / 2.0 + 0.5
|
2358
2514
|
end
|
2359
2515
|
|
@@ -2370,7 +2526,7 @@ module RubySketch
|
|
2370
2526
|
#
|
2371
2527
|
# @return [Float] random number
|
2372
2528
|
#
|
2373
|
-
def random
|
2529
|
+
def random(*args)
|
2374
2530
|
return args.first.sample if args.first.kind_of? Array
|
2375
2531
|
high, low = args.reverse
|
2376
2532
|
rand (low || 0).to_f...(high || 1).to_f
|
@@ -2388,16 +2544,16 @@ module RubySketch
|
|
2388
2544
|
#
|
2389
2545
|
# @return [Vector] new vector
|
2390
2546
|
#
|
2391
|
-
def createVector
|
2392
|
-
Vector.new
|
2547
|
+
def createVector(*args)
|
2548
|
+
Vector.new(*args, context: self)
|
2393
2549
|
end
|
2394
2550
|
|
2395
2551
|
# Creates a camera object as a video input device.
|
2396
2552
|
#
|
2397
2553
|
# @return [Capture] camera object
|
2398
2554
|
#
|
2399
|
-
def createCapture
|
2400
|
-
Capture.new
|
2555
|
+
def createCapture(*args)
|
2556
|
+
Capture.new(*args)
|
2401
2557
|
end
|
2402
2558
|
|
2403
2559
|
# Creates a new off-screen graphics context object.
|
@@ -2407,7 +2563,7 @@ module RubySketch
|
|
2407
2563
|
#
|
2408
2564
|
# @return [Graphics] graphics object
|
2409
2565
|
#
|
2410
|
-
def createGraphics
|
2566
|
+
def createGraphics(width, height)
|
2411
2567
|
Graphics.new width, height
|
2412
2568
|
end
|
2413
2569
|
|
@@ -2418,24 +2574,26 @@ module RubySketch
|
|
2418
2574
|
#
|
2419
2575
|
# @return [Image] loaded image object
|
2420
2576
|
#
|
2421
|
-
def loadImage
|
2577
|
+
def loadImage(filename, extension = nil)
|
2422
2578
|
filename = getImage__ filename, extension if filename =~ %r|^https?://|
|
2423
2579
|
Image.new Rays::Image.load filename
|
2424
2580
|
end
|
2425
2581
|
|
2426
2582
|
# @private
|
2427
|
-
private def getImage__
|
2583
|
+
private def getImage__(uri, ext)
|
2428
2584
|
ext ||= File.extname uri
|
2429
2585
|
raise "unsupported image type -- #{ext}" unless ext =~ /^\.?(png)$/i
|
2430
2586
|
|
2431
|
-
tmpdir =
|
2587
|
+
tmpdir = tmpdir__
|
2432
2588
|
path = tmpdir + Digest::SHA1.hexdigest(uri)
|
2433
2589
|
path = path.sub_ext ext
|
2434
2590
|
|
2435
2591
|
unless path.file?
|
2436
2592
|
URI.open uri do |input|
|
2593
|
+
input.set_encoding nil# disable default_internal
|
2437
2594
|
tmpdir.mkdir unless tmpdir.directory?
|
2438
2595
|
path.open('w') do |output|
|
2596
|
+
output.set_encoding Encoding::ASCII_8BIT
|
2439
2597
|
while buf = input.read(2 ** 16)
|
2440
2598
|
output.write buf
|
2441
2599
|
end
|
@@ -2445,6 +2603,11 @@ module RubySketch
|
|
2445
2603
|
path.to_s
|
2446
2604
|
end
|
2447
2605
|
|
2606
|
+
# @private
|
2607
|
+
private def tmpdir__()
|
2608
|
+
Pathname(Dir.tmpdir) + Digest::SHA1.hexdigest(self.class.name)
|
2609
|
+
end
|
2610
|
+
|
2448
2611
|
end# Context
|
2449
2612
|
|
2450
2613
|
|