rubysketch 0.3.13 → 0.3.17
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/.github/workflows/release.yml +2 -2
- data/.github/workflows/test.yml +2 -2
- data/ChangeLog.md +17 -0
- data/VERSION +1 -1
- data/examples/image.rb +1 -1
- 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 +413 -249
- data/lib/rubysketch/window.rb +78 -55
- data/lib/rubysketch-processing.rb +1 -1
- data/lib/rubysketch.rb +2 -0
- data/rubysketch.gemspec +1 -1
- data/test/helper.rb +1 -1
- data/test/processing/test_utility.rb +3 -7
- data/test/processing/test_vector.rb +43 -46
- metadata +6 -5
@@ -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
|
|
@@ -708,6 +708,10 @@ module RubySketch
|
|
708
708
|
#
|
709
709
|
class Touch
|
710
710
|
|
711
|
+
# Identifier of each touch
|
712
|
+
#
|
713
|
+
attr_reader :id
|
714
|
+
|
711
715
|
# Horizontal position of touch
|
712
716
|
#
|
713
717
|
attr_reader :x
|
@@ -717,12 +721,8 @@ module RubySketch
|
|
717
721
|
attr_reader :y
|
718
722
|
|
719
723
|
# @private
|
720
|
-
def initialize
|
721
|
-
@x, @y = x, y
|
722
|
-
end
|
723
|
-
|
724
|
-
def id ()
|
725
|
-
raise NotImplementedError
|
724
|
+
def initialize(id, x, y)
|
725
|
+
@id, @x, @y = id, x, y
|
726
726
|
end
|
727
727
|
|
728
728
|
end# Touch
|
@@ -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 = :
|
884
|
-
|
885
|
-
#
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
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
|
890
939
|
|
891
940
|
# Mode for textAlign().
|
892
|
-
TOP = :
|
941
|
+
TOP = :top
|
893
942
|
|
894
943
|
# Mode for textAlign().
|
895
|
-
BOTTOM = :
|
944
|
+
BOTTOM = :bottom
|
896
945
|
|
897
946
|
# Mode for textAlign().
|
898
|
-
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,9 +1589,9 @@ 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
|
-
src = img&.getInternal__ || @window__.
|
1594
|
+
src = img&.getInternal__ || @window__.canvas_image
|
1545
1595
|
@painter__.image src, sx, sy, sw, sh, dx, dy, dw, dh
|
1546
1596
|
end
|
1547
1597
|
|
@@ -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,30 +1806,38 @@ 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
|
|
1767
|
-
|
1768
|
-
init__ @window__.canvas, @window__.canvas_painter.paint {background 0.8}
|
1817
|
+
tmpdir__.tap {|dir| FileUtils.rm_r dir.to_s if dir.directory?}
|
1769
1818
|
|
1770
|
-
@
|
1771
|
-
|
1772
|
-
|
1773
|
-
|
1774
|
-
|
1775
|
-
@
|
1776
|
-
@
|
1819
|
+
@window__ = window
|
1820
|
+
init__(
|
1821
|
+
@window__.canvas_image,
|
1822
|
+
@window__.canvas_painter.paint {background 0.8})
|
1823
|
+
|
1824
|
+
@loop__ = true
|
1825
|
+
@redraw__ = false
|
1826
|
+
@frameCount__ = 0
|
1827
|
+
@key__ = nil
|
1828
|
+
@keyCode__ = nil
|
1829
|
+
@keysPressed__ = Set.new
|
1830
|
+
@pointerPos__ =
|
1831
|
+
@pointerPrevPos__ = [0, 0]
|
1832
|
+
@pointersPressed__ = Set.new
|
1833
|
+
@touches__ = []
|
1834
|
+
@motionGravity__ = createVector 0, 0
|
1777
1835
|
|
1778
1836
|
@window__.before_draw = proc {beginDraw__}
|
1779
1837
|
@window__.after_draw = proc {endDraw__}
|
1780
1838
|
|
1781
1839
|
drawFrame = -> {
|
1782
|
-
updateCanvas__ @window__.
|
1840
|
+
updateCanvas__ @window__.canvas_image, @window__.canvas_painter
|
1783
1841
|
begin
|
1784
1842
|
push
|
1785
1843
|
@drawBlock__.call if @drawBlock__
|
@@ -1794,17 +1852,38 @@ module RubySketch
|
|
1794
1852
|
@redraw__ = false
|
1795
1853
|
drawFrame.call
|
1796
1854
|
end
|
1797
|
-
@
|
1855
|
+
@pointerPrevPos__ = @pointerPos__
|
1798
1856
|
end
|
1799
1857
|
|
1858
|
+
updateKeyStates = -> event, pressed {
|
1859
|
+
@key__ = event.chars
|
1860
|
+
@keyCode__ = event.key
|
1861
|
+
if pressed != nil
|
1862
|
+
set, key = @keysPressed__, event.key
|
1863
|
+
pressed ? set.add(key) : set.delete(key)
|
1864
|
+
end
|
1865
|
+
}
|
1866
|
+
|
1800
1867
|
updatePointerStates = -> event, pressed = nil {
|
1801
|
-
@
|
1802
|
-
@
|
1803
|
-
|
1804
|
-
|
1805
|
-
|
1868
|
+
@pointerPos__ = event.pos.to_a
|
1869
|
+
@touches__ = event.pointers.map {|p| Touch.new(p.id, *p.pos.to_a)}
|
1870
|
+
if pressed != nil
|
1871
|
+
set, type = @pointersPressed__, event.type
|
1872
|
+
pressed ? set.add(type) : set.delete(type)
|
1873
|
+
end
|
1806
1874
|
}
|
1807
1875
|
|
1876
|
+
@window__.key_down = proc do |e|
|
1877
|
+
updateKeyStates.call e, true
|
1878
|
+
@keyPressedBlock__&.call
|
1879
|
+
@keyTypedBlock__&.call if @key__ && !@key__.empty?
|
1880
|
+
end
|
1881
|
+
|
1882
|
+
@window__.key_up = proc do |e|
|
1883
|
+
updateKeyStates.call e, false
|
1884
|
+
@keyReleasedBlock__&.call
|
1885
|
+
end
|
1886
|
+
|
1808
1887
|
@window__.pointer_down = proc do |e|
|
1809
1888
|
updatePointerStates.call e, true
|
1810
1889
|
(@touchStartedBlock__ || @mousePressedBlock__)&.call
|
@@ -1824,62 +1903,108 @@ module RubySketch
|
|
1824
1903
|
updatePointerStates.call e
|
1825
1904
|
(@touchMovedBlock__ || @mouseDraggedBlock__)&.call
|
1826
1905
|
end
|
1906
|
+
|
1907
|
+
@window__.motion = proc do |e|
|
1908
|
+
@motionGravity__ = createVector(*e.gravity.to_a(3))
|
1909
|
+
@motionBlock__&.call
|
1910
|
+
end
|
1827
1911
|
end
|
1828
1912
|
|
1829
|
-
#
|
1913
|
+
# Defines setup block.
|
1830
1914
|
#
|
1831
|
-
def setup
|
1915
|
+
def setup(&block)
|
1832
1916
|
@window__.setup = block
|
1833
1917
|
nil
|
1834
1918
|
end
|
1835
1919
|
|
1836
|
-
#
|
1920
|
+
# Defines draw block.
|
1837
1921
|
#
|
1838
|
-
def draw
|
1922
|
+
def draw(&block)
|
1839
1923
|
@drawBlock__ = block if block
|
1840
1924
|
nil
|
1841
1925
|
end
|
1842
1926
|
|
1843
|
-
|
1844
|
-
|
1927
|
+
# Defines keyPressed block.
|
1928
|
+
#
|
1929
|
+
# @return [Boolean] is any key pressed or not
|
1930
|
+
#
|
1931
|
+
def keyPressed(&block)
|
1932
|
+
@keyPressedBlock__ = block if block
|
1933
|
+
not @keysPressed__.empty?
|
1934
|
+
end
|
1935
|
+
|
1936
|
+
# Defines keyReleased block.
|
1937
|
+
#
|
1938
|
+
def keyReleased(&block)
|
1939
|
+
@keyReleasedBlock__ = block if block
|
1845
1940
|
nil
|
1846
1941
|
end
|
1847
1942
|
|
1848
|
-
|
1943
|
+
# Defines keyTyped block.
|
1944
|
+
#
|
1945
|
+
def keyTyped(&block)
|
1946
|
+
@keyTypedBlock__ = block if block
|
1947
|
+
nil
|
1948
|
+
end
|
1949
|
+
|
1950
|
+
# Defines mousePressed block.
|
1951
|
+
#
|
1952
|
+
# @return [Boolean] is any mouse button pressed or not
|
1953
|
+
#
|
1954
|
+
def mousePressed(&block)
|
1849
1955
|
@mousePressedBlock__ = block if block
|
1850
|
-
@
|
1956
|
+
not @pointersPressed__.empty?
|
1851
1957
|
end
|
1852
1958
|
|
1853
|
-
|
1959
|
+
# Defines mouseReleased block.
|
1960
|
+
#
|
1961
|
+
def mouseReleased(&block)
|
1854
1962
|
@mouseReleasedBlock__ = block if block
|
1855
1963
|
nil
|
1856
1964
|
end
|
1857
1965
|
|
1858
|
-
|
1966
|
+
# Defines mouseMoved block.
|
1967
|
+
#
|
1968
|
+
def mouseMoved(&block)
|
1859
1969
|
@mouseMovedBlock__ = block if block
|
1860
1970
|
nil
|
1861
1971
|
end
|
1862
1972
|
|
1863
|
-
|
1973
|
+
# Defines mouseDragged block.
|
1974
|
+
#
|
1975
|
+
def mouseDragged(&block)
|
1864
1976
|
@mouseDraggedBlock__ = block if block
|
1865
1977
|
nil
|
1866
1978
|
end
|
1867
1979
|
|
1868
|
-
|
1980
|
+
# Defines touchStarted block.
|
1981
|
+
#
|
1982
|
+
def touchStarted(&block)
|
1869
1983
|
@touchStartedBlock__ = block if block
|
1870
1984
|
nil
|
1871
1985
|
end
|
1872
1986
|
|
1873
|
-
|
1987
|
+
# Defines touchEnded block.
|
1988
|
+
#
|
1989
|
+
def touchEnded(&block)
|
1874
1990
|
@touchEndedBlock__ = block if block
|
1875
1991
|
nil
|
1876
1992
|
end
|
1877
1993
|
|
1878
|
-
|
1994
|
+
# Defines touchMoved block.
|
1995
|
+
#
|
1996
|
+
def touchMoved(&block)
|
1879
1997
|
@touchMovedBlock__ = block if block
|
1880
1998
|
nil
|
1881
1999
|
end
|
1882
2000
|
|
2001
|
+
# Defines motion block.
|
2002
|
+
#
|
2003
|
+
def motion(&block)
|
2004
|
+
@motionBlock__ = block if block
|
2005
|
+
nil
|
2006
|
+
end
|
2007
|
+
|
1883
2008
|
# Changes canvas size.
|
1884
2009
|
#
|
1885
2010
|
# @param width [Integer] new width
|
@@ -1888,7 +2013,7 @@ module RubySketch
|
|
1888
2013
|
#
|
1889
2014
|
# @return [nil] nil
|
1890
2015
|
#
|
1891
|
-
def size
|
2016
|
+
def size(width, height, pixelDensity: self.pixelDensity)
|
1892
2017
|
resizeCanvas__ :size, width, height, pixelDensity
|
1893
2018
|
nil
|
1894
2019
|
end
|
@@ -1901,7 +2026,7 @@ module RubySketch
|
|
1901
2026
|
#
|
1902
2027
|
# @return [nil] nil
|
1903
2028
|
#
|
1904
|
-
def createCanvas
|
2029
|
+
def createCanvas(width, height, pixelDensity: self.pixelDensity)
|
1905
2030
|
resizeCanvas__ :createCanvas, width, height, pixelDensity
|
1906
2031
|
nil
|
1907
2032
|
end
|
@@ -1912,18 +2037,18 @@ module RubySketch
|
|
1912
2037
|
#
|
1913
2038
|
# @return [Numeric] current pixel density
|
1914
2039
|
#
|
1915
|
-
def pixelDensity
|
2040
|
+
def pixelDensity(density = nil)
|
1916
2041
|
resizeCanvas__ :pixelDensity, width, height, density if density
|
1917
2042
|
@painter__.pixel_density
|
1918
2043
|
end
|
1919
2044
|
|
1920
2045
|
# @private
|
1921
|
-
def resizeCanvas__
|
2046
|
+
def resizeCanvas__(name, width, height, pixelDensity)
|
1922
2047
|
raise '#{name}() must be called on startup or setup block' if @started__
|
1923
2048
|
|
1924
2049
|
@painter__.__send__ :end_paint
|
1925
2050
|
@window__.__send__ :resize_canvas, width, height, pixelDensity
|
1926
|
-
updateCanvas__ @window__.
|
2051
|
+
updateCanvas__ @window__.canvas_image, @window__.canvas_painter
|
1927
2052
|
@painter__.__send__ :begin_paint
|
1928
2053
|
|
1929
2054
|
@window__.auto_resize = false
|
@@ -1933,15 +2058,23 @@ module RubySketch
|
|
1933
2058
|
#
|
1934
2059
|
# @return [Numeric] pixel density
|
1935
2060
|
#
|
1936
|
-
def displayDensity
|
2061
|
+
def displayDensity()
|
1937
2062
|
@window__.painter.pixel_density
|
1938
2063
|
end
|
1939
2064
|
|
1940
|
-
|
2065
|
+
# Returns window width.
|
2066
|
+
#
|
2067
|
+
# @return [Numeric] window width
|
2068
|
+
#
|
2069
|
+
def windowWidth()
|
1941
2070
|
@window__.width
|
1942
2071
|
end
|
1943
2072
|
|
1944
|
-
|
2073
|
+
# Returns window height.
|
2074
|
+
#
|
2075
|
+
# @return [Numeric] window height
|
2076
|
+
#
|
2077
|
+
def windowHeight()
|
1945
2078
|
@window__.height
|
1946
2079
|
end
|
1947
2080
|
|
@@ -1949,7 +2082,7 @@ module RubySketch
|
|
1949
2082
|
#
|
1950
2083
|
# @return [Integer] total number of frames
|
1951
2084
|
#
|
1952
|
-
def frameCount
|
2085
|
+
def frameCount()
|
1953
2086
|
@frameCount__
|
1954
2087
|
end
|
1955
2088
|
|
@@ -1957,55 +2090,79 @@ module RubySketch
|
|
1957
2090
|
#
|
1958
2091
|
# @return [Float] frames per second
|
1959
2092
|
#
|
1960
|
-
def frameRate
|
2093
|
+
def frameRate()
|
1961
2094
|
@window__.event.fps
|
1962
2095
|
end
|
1963
2096
|
|
2097
|
+
# Returns the last key that was pressed or released.
|
2098
|
+
#
|
2099
|
+
# @return [String] last key
|
2100
|
+
#
|
2101
|
+
def key()
|
2102
|
+
@key__
|
2103
|
+
end
|
2104
|
+
|
2105
|
+
# Returns the last key code that was pressed or released.
|
2106
|
+
#
|
2107
|
+
# @return [Symbol] last key code
|
2108
|
+
#
|
2109
|
+
def keyCode()
|
2110
|
+
@keyCode__
|
2111
|
+
end
|
2112
|
+
|
1964
2113
|
# Returns mouse x position
|
1965
2114
|
#
|
1966
2115
|
# @return [Numeric] horizontal position of mouse
|
1967
2116
|
#
|
1968
|
-
def mouseX
|
1969
|
-
@
|
2117
|
+
def mouseX()
|
2118
|
+
@pointerPos__[0]
|
1970
2119
|
end
|
1971
2120
|
|
1972
2121
|
# Returns mouse y position
|
1973
2122
|
#
|
1974
2123
|
# @return [Numeric] vertical position of mouse
|
1975
2124
|
#
|
1976
|
-
def mouseY
|
1977
|
-
@
|
2125
|
+
def mouseY()
|
2126
|
+
@pointerPos__[1]
|
1978
2127
|
end
|
1979
2128
|
|
1980
2129
|
# Returns mouse x position in previous frame
|
1981
2130
|
#
|
1982
2131
|
# @return [Numeric] horizontal position of mouse
|
1983
2132
|
#
|
1984
|
-
def pmouseX
|
1985
|
-
@
|
2133
|
+
def pmouseX()
|
2134
|
+
@pointerPrevPos__[0]
|
1986
2135
|
end
|
1987
2136
|
|
1988
2137
|
# Returns mouse y position in previous frame
|
1989
2138
|
#
|
1990
2139
|
# @return [Numeric] vertical position of mouse
|
1991
2140
|
#
|
1992
|
-
def pmouseY
|
1993
|
-
@
|
2141
|
+
def pmouseY()
|
2142
|
+
@pointerPrevPos__[1]
|
1994
2143
|
end
|
1995
2144
|
|
1996
2145
|
# Returns array of touches
|
1997
2146
|
#
|
1998
2147
|
# @return [Array] Touch objects
|
1999
2148
|
#
|
2000
|
-
def touches
|
2149
|
+
def touches()
|
2001
2150
|
@touches__
|
2002
2151
|
end
|
2003
2152
|
|
2153
|
+
# Returns vector for real world gravity
|
2154
|
+
#
|
2155
|
+
# @return [Vector] gravity vector
|
2156
|
+
#
|
2157
|
+
def motionGravity()
|
2158
|
+
@motionGravity__
|
2159
|
+
end
|
2160
|
+
|
2004
2161
|
# Enables calling draw block on every frame.
|
2005
2162
|
#
|
2006
2163
|
# @return [nil] nil
|
2007
2164
|
#
|
2008
|
-
def loop
|
2165
|
+
def loop()
|
2009
2166
|
@loop__ = true
|
2010
2167
|
end
|
2011
2168
|
|
@@ -2013,7 +2170,7 @@ module RubySketch
|
|
2013
2170
|
#
|
2014
2171
|
# @return [nil] nil
|
2015
2172
|
#
|
2016
|
-
def noLoop
|
2173
|
+
def noLoop()
|
2017
2174
|
@loop__ = false
|
2018
2175
|
end
|
2019
2176
|
|
@@ -2021,7 +2178,7 @@ module RubySketch
|
|
2021
2178
|
#
|
2022
2179
|
# @return [nil] nil
|
2023
2180
|
#
|
2024
|
-
def redraw
|
2181
|
+
def redraw()
|
2025
2182
|
@redraw__ = true
|
2026
2183
|
end
|
2027
2184
|
|
@@ -2035,7 +2192,7 @@ module RubySketch
|
|
2035
2192
|
#
|
2036
2193
|
# @return [Numeric] absolute number
|
2037
2194
|
#
|
2038
|
-
def abs
|
2195
|
+
def abs(value)
|
2039
2196
|
value.abs
|
2040
2197
|
end
|
2041
2198
|
|
@@ -2045,7 +2202,7 @@ module RubySketch
|
|
2045
2202
|
#
|
2046
2203
|
# @return [Numeric] rounded up number
|
2047
2204
|
#
|
2048
|
-
def ceil
|
2205
|
+
def ceil(value)
|
2049
2206
|
value.ceil
|
2050
2207
|
end
|
2051
2208
|
|
@@ -2055,7 +2212,7 @@ module RubySketch
|
|
2055
2212
|
#
|
2056
2213
|
# @return [Numeric] rounded down number
|
2057
2214
|
#
|
2058
|
-
def floor
|
2215
|
+
def floor(value)
|
2059
2216
|
value.floor
|
2060
2217
|
end
|
2061
2218
|
|
@@ -2065,7 +2222,7 @@ module RubySketch
|
|
2065
2222
|
#
|
2066
2223
|
# @return [Numeric] rounded number
|
2067
2224
|
#
|
2068
|
-
def round
|
2225
|
+
def round(value)
|
2069
2226
|
value.round
|
2070
2227
|
end
|
2071
2228
|
|
@@ -2075,7 +2232,7 @@ module RubySketch
|
|
2075
2232
|
#
|
2076
2233
|
# @return [Numeric] result number
|
2077
2234
|
#
|
2078
|
-
def log
|
2235
|
+
def log(n)
|
2079
2236
|
Math.log n
|
2080
2237
|
end
|
2081
2238
|
|
@@ -2085,7 +2242,7 @@ module RubySketch
|
|
2085
2242
|
#
|
2086
2243
|
# @return [Numeric] result number
|
2087
2244
|
#
|
2088
|
-
def exp
|
2245
|
+
def exp(n)
|
2089
2246
|
Math.exp n
|
2090
2247
|
end
|
2091
2248
|
|
@@ -2096,7 +2253,7 @@ module RubySketch
|
|
2096
2253
|
#
|
2097
2254
|
# @return [Numeric] value ** exponent
|
2098
2255
|
#
|
2099
|
-
def pow
|
2256
|
+
def pow(value, exponent)
|
2100
2257
|
value ** exponent
|
2101
2258
|
end
|
2102
2259
|
|
@@ -2106,7 +2263,7 @@ module RubySketch
|
|
2106
2263
|
#
|
2107
2264
|
# @return [Numeric] squared value
|
2108
2265
|
#
|
2109
|
-
def sq
|
2266
|
+
def sq(value)
|
2110
2267
|
value * value
|
2111
2268
|
end
|
2112
2269
|
|
@@ -2116,7 +2273,7 @@ module RubySketch
|
|
2116
2273
|
#
|
2117
2274
|
# @return [Numeric] squared value
|
2118
2275
|
#
|
2119
|
-
def sqrt
|
2276
|
+
def sqrt(value)
|
2120
2277
|
Math.sqrt value
|
2121
2278
|
end
|
2122
2279
|
|
@@ -2131,7 +2288,7 @@ module RubySketch
|
|
2131
2288
|
#
|
2132
2289
|
# @return [Numeric] magnitude
|
2133
2290
|
#
|
2134
|
-
def mag
|
2291
|
+
def mag(*args)
|
2135
2292
|
x, y, z = *args
|
2136
2293
|
case args.size
|
2137
2294
|
when 2 then Math.sqrt x * x + y * y
|
@@ -2154,7 +2311,7 @@ module RubySketch
|
|
2154
2311
|
#
|
2155
2312
|
# @return [Numeric] distance between 2 points
|
2156
2313
|
#
|
2157
|
-
def dist
|
2314
|
+
def dist(*args)
|
2158
2315
|
case args.size
|
2159
2316
|
when 4
|
2160
2317
|
x1, y1, x2, y2 = *args
|
@@ -2176,7 +2333,7 @@ module RubySketch
|
|
2176
2333
|
#
|
2177
2334
|
# @return [Numeric] normalized value between 0..1
|
2178
2335
|
#
|
2179
|
-
def norm
|
2336
|
+
def norm(value, start, stop)
|
2180
2337
|
(value.to_f - start.to_f) / (stop.to_f - start.to_f)
|
2181
2338
|
end
|
2182
2339
|
|
@@ -2188,7 +2345,7 @@ module RubySketch
|
|
2188
2345
|
#
|
2189
2346
|
# @return [Numeric] interporated number
|
2190
2347
|
#
|
2191
|
-
def lerp
|
2348
|
+
def lerp(start, stop, amount)
|
2192
2349
|
start + (stop - start) * amount
|
2193
2350
|
end
|
2194
2351
|
|
@@ -2202,7 +2359,7 @@ module RubySketch
|
|
2202
2359
|
#
|
2203
2360
|
# @return [Numeric] mapped number
|
2204
2361
|
#
|
2205
|
-
def map
|
2362
|
+
def map(value, start1, stop1, start2, stop2)
|
2206
2363
|
lerp start2, stop2, norm(value, start1, stop1)
|
2207
2364
|
end
|
2208
2365
|
|
@@ -2219,7 +2376,7 @@ module RubySketch
|
|
2219
2376
|
#
|
2220
2377
|
# @return [Numeric] minimum value
|
2221
2378
|
#
|
2222
|
-
def min
|
2379
|
+
def min(*args)
|
2223
2380
|
args.flatten.min
|
2224
2381
|
end
|
2225
2382
|
|
@@ -2236,7 +2393,7 @@ module RubySketch
|
|
2236
2393
|
#
|
2237
2394
|
# @return [Numeric] maximum value
|
2238
2395
|
#
|
2239
|
-
def max
|
2396
|
+
def max(*args)
|
2240
2397
|
args.flatten.max
|
2241
2398
|
end
|
2242
2399
|
|
@@ -2248,7 +2405,7 @@ module RubySketch
|
|
2248
2405
|
#
|
2249
2406
|
# @return [Numeric] constrained number
|
2250
2407
|
#
|
2251
|
-
def constrain
|
2408
|
+
def constrain(value, min, max)
|
2252
2409
|
value < min ? min : (value > max ? max : value)
|
2253
2410
|
end
|
2254
2411
|
|
@@ -2258,7 +2415,7 @@ module RubySketch
|
|
2258
2415
|
#
|
2259
2416
|
# @return [Numeric] radian
|
2260
2417
|
#
|
2261
|
-
def radians
|
2418
|
+
def radians(degree)
|
2262
2419
|
degree * DEG2RAD__
|
2263
2420
|
end
|
2264
2421
|
|
@@ -2268,7 +2425,7 @@ module RubySketch
|
|
2268
2425
|
#
|
2269
2426
|
# @return [Numeric] degree
|
2270
2427
|
#
|
2271
|
-
def degrees
|
2428
|
+
def degrees(radian)
|
2272
2429
|
radian * RAD2DEG__
|
2273
2430
|
end
|
2274
2431
|
|
@@ -2278,7 +2435,7 @@ module RubySketch
|
|
2278
2435
|
#
|
2279
2436
|
# @return [Numeric] the sine
|
2280
2437
|
#
|
2281
|
-
def sin
|
2438
|
+
def sin(angle)
|
2282
2439
|
Math.sin angle
|
2283
2440
|
end
|
2284
2441
|
|
@@ -2288,7 +2445,7 @@ module RubySketch
|
|
2288
2445
|
#
|
2289
2446
|
# @return [Numeric] the cosine
|
2290
2447
|
#
|
2291
|
-
def cos
|
2448
|
+
def cos(angle)
|
2292
2449
|
Math.cos angle
|
2293
2450
|
end
|
2294
2451
|
|
@@ -2298,7 +2455,7 @@ module RubySketch
|
|
2298
2455
|
#
|
2299
2456
|
# @return [Numeric] the tangent
|
2300
2457
|
#
|
2301
|
-
def tan
|
2458
|
+
def tan(angle)
|
2302
2459
|
Math.tan angle
|
2303
2460
|
end
|
2304
2461
|
|
@@ -2308,7 +2465,7 @@ module RubySketch
|
|
2308
2465
|
#
|
2309
2466
|
# @return [Numeric] the arc sine
|
2310
2467
|
#
|
2311
|
-
def asin
|
2468
|
+
def asin(value)
|
2312
2469
|
Math.asin value
|
2313
2470
|
end
|
2314
2471
|
|
@@ -2318,7 +2475,7 @@ module RubySketch
|
|
2318
2475
|
#
|
2319
2476
|
# @return [Numeric] the arc cosine
|
2320
2477
|
#
|
2321
|
-
def acos
|
2478
|
+
def acos(value)
|
2322
2479
|
Math.acos value
|
2323
2480
|
end
|
2324
2481
|
|
@@ -2328,7 +2485,7 @@ module RubySketch
|
|
2328
2485
|
#
|
2329
2486
|
# @return [Numeric] the arc tangent
|
2330
2487
|
#
|
2331
|
-
def atan
|
2488
|
+
def atan(value)
|
2332
2489
|
Math.atan value
|
2333
2490
|
end
|
2334
2491
|
|
@@ -2339,7 +2496,7 @@ module RubySketch
|
|
2339
2496
|
#
|
2340
2497
|
# @return [Numeric] the angle in radians
|
2341
2498
|
#
|
2342
|
-
def atan2
|
2499
|
+
def atan2(y, x)
|
2343
2500
|
Math.atan2 y, x
|
2344
2501
|
end
|
2345
2502
|
|
@@ -2355,7 +2512,7 @@ module RubySketch
|
|
2355
2512
|
#
|
2356
2513
|
# @return [Numeric] noise value (0.0..1.0)
|
2357
2514
|
#
|
2358
|
-
def noise
|
2515
|
+
def noise(x, y = 0, z = 0)
|
2359
2516
|
Rays.perlin(x, y, z) / 2.0 + 0.5
|
2360
2517
|
end
|
2361
2518
|
|
@@ -2372,7 +2529,7 @@ module RubySketch
|
|
2372
2529
|
#
|
2373
2530
|
# @return [Float] random number
|
2374
2531
|
#
|
2375
|
-
def random
|
2532
|
+
def random(*args)
|
2376
2533
|
return args.first.sample if args.first.kind_of? Array
|
2377
2534
|
high, low = args.reverse
|
2378
2535
|
rand (low || 0).to_f...(high || 1).to_f
|
@@ -2390,16 +2547,16 @@ module RubySketch
|
|
2390
2547
|
#
|
2391
2548
|
# @return [Vector] new vector
|
2392
2549
|
#
|
2393
|
-
def createVector
|
2394
|
-
Vector.new
|
2550
|
+
def createVector(*args)
|
2551
|
+
Vector.new(*args, context: self)
|
2395
2552
|
end
|
2396
2553
|
|
2397
2554
|
# Creates a camera object as a video input device.
|
2398
2555
|
#
|
2399
2556
|
# @return [Capture] camera object
|
2400
2557
|
#
|
2401
|
-
def createCapture
|
2402
|
-
Capture.new
|
2558
|
+
def createCapture(*args)
|
2559
|
+
Capture.new(*args)
|
2403
2560
|
end
|
2404
2561
|
|
2405
2562
|
# Creates a new off-screen graphics context object.
|
@@ -2409,7 +2566,7 @@ module RubySketch
|
|
2409
2566
|
#
|
2410
2567
|
# @return [Graphics] graphics object
|
2411
2568
|
#
|
2412
|
-
def createGraphics
|
2569
|
+
def createGraphics(width, height)
|
2413
2570
|
Graphics.new width, height
|
2414
2571
|
end
|
2415
2572
|
|
@@ -2420,24 +2577,26 @@ module RubySketch
|
|
2420
2577
|
#
|
2421
2578
|
# @return [Image] loaded image object
|
2422
2579
|
#
|
2423
|
-
def loadImage
|
2580
|
+
def loadImage(filename, extension = nil)
|
2424
2581
|
filename = getImage__ filename, extension if filename =~ %r|^https?://|
|
2425
2582
|
Image.new Rays::Image.load filename
|
2426
2583
|
end
|
2427
2584
|
|
2428
2585
|
# @private
|
2429
|
-
private def getImage__
|
2586
|
+
private def getImage__(uri, ext)
|
2430
2587
|
ext ||= File.extname uri
|
2431
2588
|
raise "unsupported image type -- #{ext}" unless ext =~ /^\.?(png)$/i
|
2432
2589
|
|
2433
|
-
tmpdir =
|
2590
|
+
tmpdir = tmpdir__
|
2434
2591
|
path = tmpdir + Digest::SHA1.hexdigest(uri)
|
2435
2592
|
path = path.sub_ext ext
|
2436
2593
|
|
2437
2594
|
unless path.file?
|
2438
2595
|
URI.open uri do |input|
|
2596
|
+
input.set_encoding nil# disable default_internal
|
2439
2597
|
tmpdir.mkdir unless tmpdir.directory?
|
2440
2598
|
path.open('w') do |output|
|
2599
|
+
output.set_encoding Encoding::ASCII_8BIT
|
2441
2600
|
while buf = input.read(2 ** 16)
|
2442
2601
|
output.write buf
|
2443
2602
|
end
|
@@ -2447,6 +2606,11 @@ module RubySketch
|
|
2447
2606
|
path.to_s
|
2448
2607
|
end
|
2449
2608
|
|
2609
|
+
# @private
|
2610
|
+
private def tmpdir__()
|
2611
|
+
Pathname(Dir.tmpdir) + Digest::SHA1.hexdigest(self.class.name)
|
2612
|
+
end
|
2613
|
+
|
2450
2614
|
end# Context
|
2451
2615
|
|
2452
2616
|
|