rays 0.1.11 → 0.1.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.doc/ext/rays/bitmap.cpp +22 -76
- data/.doc/ext/rays/bounds.cpp +95 -125
- data/.doc/ext/rays/camera.cpp +88 -0
- data/.doc/ext/rays/color.cpp +223 -45
- data/.doc/ext/rays/color_space.cpp +146 -46
- data/.doc/ext/rays/defs.cpp +183 -0
- data/.doc/ext/rays/font.cpp +69 -21
- data/.doc/ext/rays/image.cpp +26 -37
- data/.doc/ext/rays/matrix.cpp +186 -29
- data/.doc/ext/rays/native.cpp +14 -8
- data/.doc/ext/rays/noise.cpp +53 -0
- data/.doc/ext/rays/painter.cpp +187 -292
- data/.doc/ext/rays/point.cpp +96 -77
- data/.doc/ext/rays/polygon.cpp +313 -0
- data/.doc/ext/rays/polygon_line.cpp +96 -0
- data/.doc/ext/rays/polyline.cpp +167 -0
- data/.doc/ext/rays/rays.cpp +103 -12
- data/.doc/ext/rays/shader.cpp +83 -9
- data/LICENSE +21 -0
- data/README.md +1 -1
- data/Rakefile +24 -9
- data/VERSION +1 -1
- data/ext/rays/bitmap.cpp +22 -80
- data/ext/rays/bounds.cpp +100 -128
- data/ext/rays/camera.cpp +94 -0
- data/ext/rays/color.cpp +231 -51
- data/ext/rays/color_space.cpp +149 -47
- data/ext/rays/defs.cpp +183 -0
- data/ext/rays/defs.h +26 -2
- data/ext/rays/extconf.rb +2 -3
- data/ext/rays/font.cpp +74 -24
- data/ext/rays/image.cpp +28 -40
- data/ext/rays/matrix.cpp +198 -30
- data/ext/rays/native.cpp +14 -8
- data/ext/rays/noise.cpp +55 -0
- data/ext/rays/painter.cpp +203 -298
- data/ext/rays/point.cpp +105 -81
- data/ext/rays/polygon.cpp +329 -0
- data/ext/rays/polygon_line.cpp +99 -0
- data/ext/rays/polyline.cpp +176 -0
- data/ext/rays/rays.cpp +103 -13
- data/ext/rays/shader.cpp +84 -9
- data/include/rays.h +10 -2
- data/include/rays/bitmap.h +14 -26
- data/include/rays/bounds.h +21 -4
- data/include/rays/camera.h +49 -0
- data/include/rays/color.h +25 -14
- data/include/rays/color_space.h +15 -10
- data/include/rays/coord.h +114 -0
- data/include/rays/debug.h +22 -0
- data/include/rays/defs.h +36 -0
- data/include/rays/exception.h +6 -2
- data/include/rays/font.h +4 -4
- data/include/rays/image.h +12 -18
- data/include/rays/matrix.h +50 -24
- data/include/rays/noise.h +42 -0
- data/include/rays/opengl.h +2 -50
- data/include/rays/painter.h +89 -93
- data/include/rays/point.h +44 -51
- data/include/rays/polygon.h +198 -0
- data/include/rays/polyline.h +71 -0
- data/include/rays/rays.h +3 -0
- data/include/rays/ruby.h +7 -1
- data/include/rays/ruby/bounds.h +1 -1
- data/include/rays/ruby/camera.h +41 -0
- data/include/rays/ruby/color.h +1 -1
- data/include/rays/ruby/color_space.h +1 -1
- data/include/rays/ruby/font.h +1 -1
- data/include/rays/ruby/matrix.h +1 -1
- data/include/rays/ruby/point.h +1 -1
- data/include/rays/ruby/polygon.h +52 -0
- data/include/rays/ruby/polyline.h +41 -0
- data/include/rays/ruby/rays.h +8 -0
- data/include/rays/ruby/shader.h +1 -1
- data/include/rays/shader.h +36 -8
- data/lib/rays.rb +7 -2
- data/lib/rays/bitmap.rb +0 -15
- data/lib/rays/bounds.rb +17 -23
- data/lib/rays/camera.rb +21 -0
- data/lib/rays/color.rb +20 -47
- data/lib/rays/color_space.rb +13 -13
- data/lib/rays/image.rb +3 -7
- data/lib/rays/matrix.rb +28 -0
- data/lib/rays/module.rb +4 -19
- data/lib/rays/painter.rb +78 -93
- data/lib/rays/point.rb +13 -21
- data/lib/rays/polygon.rb +58 -0
- data/lib/rays/polygon_line.rb +36 -0
- data/lib/rays/polyline.rb +32 -0
- data/lib/rays/shader.rb +20 -1
- data/rays.gemspec +5 -7
- data/src/bitmap.h +36 -0
- data/src/bounds.cpp +74 -11
- data/src/color.cpp +58 -23
- data/src/color_space.cpp +52 -34
- data/src/color_space.h +22 -0
- data/src/coord.cpp +170 -0
- data/src/coord.h +35 -0
- data/src/font.cpp +118 -0
- data/src/font.h +64 -0
- data/src/frame_buffer.cpp +37 -71
- data/src/frame_buffer.h +4 -4
- data/src/image.cpp +172 -98
- data/src/image.h +25 -0
- data/src/ios/bitmap.h +21 -0
- data/src/ios/bitmap.mm +129 -110
- data/src/ios/camera.mm +236 -0
- data/src/ios/font.mm +50 -62
- data/src/ios/helper.h +2 -2
- data/src/ios/opengl.mm +19 -4
- data/src/ios/rays.mm +3 -0
- data/src/matrix.cpp +111 -26
- data/src/matrix.h +30 -0
- data/src/noise.cpp +74 -0
- data/src/opengl.cpp +9 -27
- data/src/opengl.h +37 -0
- data/src/osx/bitmap.h +21 -0
- data/src/osx/bitmap.mm +129 -110
- data/src/osx/camera.mm +236 -0
- data/src/osx/font.mm +49 -62
- data/src/osx/helper.h +2 -2
- data/src/osx/opengl.mm +19 -83
- data/src/osx/rays.mm +3 -0
- data/src/painter.cpp +845 -671
- data/src/painter.h +24 -0
- data/src/point.cpp +140 -119
- data/src/polygon.cpp +1266 -0
- data/src/polygon.h +32 -0
- data/src/polyline.cpp +160 -0
- data/src/polyline.h +69 -0
- data/src/render_buffer.cpp +11 -4
- data/src/render_buffer.h +2 -2
- data/src/shader.cpp +163 -106
- data/src/shader.h +38 -0
- data/src/shader_program.cpp +533 -0
- data/src/{program.h → shader_program.h} +28 -16
- data/src/shader_source.cpp +140 -0
- data/src/shader_source.h +52 -0
- data/src/texture.cpp +136 -160
- data/src/texture.h +65 -0
- data/src/win32/bitmap.cpp +62 -52
- data/src/win32/font.cpp +11 -13
- data/src/win32/font.h +24 -0
- data/src/win32/gdi.h +6 -6
- data/test/helper.rb +0 -3
- data/test/test_bitmap.rb +31 -7
- data/test/test_bounds.rb +36 -0
- data/test/test_color.rb +59 -19
- data/test/test_color_space.rb +95 -0
- data/test/test_font.rb +5 -0
- data/test/test_image.rb +24 -20
- data/test/test_matrix.rb +106 -0
- data/test/test_painter.rb +157 -51
- data/test/test_painter_shape.rb +102 -0
- data/test/test_point.rb +29 -0
- data/test/test_polygon.rb +234 -0
- data/test/test_polygon_line.rb +167 -0
- data/test/test_polyline.rb +171 -0
- data/test/test_shader.rb +9 -9
- metadata +102 -70
- data/.doc/ext/rays/texture.cpp +0 -138
- data/ext/rays/texture.cpp +0 -149
- data/include/rays/ruby/texture.h +0 -41
- data/include/rays/texture.h +0 -71
- data/lib/rays/texture.rb +0 -24
- data/src/program.cpp +0 -648
- data/test/test_texture.rb +0 -27
data/lib/rays/color_space.rb
CHANGED
@@ -9,25 +9,25 @@ module Rays
|
|
9
9
|
|
10
10
|
class ColorSpace
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
include Comparable
|
13
|
+
|
14
|
+
def <=> (o)
|
15
|
+
type <=> o.type
|
16
|
+
end
|
17
|
+
|
18
|
+
def hash ()
|
19
|
+
type.hash
|
14
20
|
end
|
15
21
|
|
16
|
-
def
|
17
|
-
|
18
|
-
when Integer then obj
|
19
|
-
when String, Symbol then const_get obj
|
20
|
-
else raise ArgumentError, "can not convert '#{obj}' to ColorSpace type."
|
21
|
-
end
|
22
|
-
rescue NameError
|
23
|
-
raise "ColoeSpace::#{obj} is not found."
|
22
|
+
def eql? (o)
|
23
|
+
self == o
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
27
|
-
|
26
|
+
def inspect ()
|
27
|
+
"#<#{self.class.name} #{to_s}>"
|
28
28
|
end
|
29
29
|
|
30
|
-
end#
|
30
|
+
end# Color
|
31
31
|
|
32
32
|
|
33
33
|
end# Rays
|
data/lib/rays/image.rb
CHANGED
@@ -12,10 +12,10 @@ module Rays
|
|
12
12
|
|
13
13
|
extend Forwardable
|
14
14
|
|
15
|
-
def_delegators :bitmap, :
|
15
|
+
def_delegators :bitmap, :[], :[]=
|
16
16
|
|
17
17
|
def paint (&block)
|
18
|
-
painter.
|
18
|
+
painter.paint self, &block
|
19
19
|
self
|
20
20
|
end
|
21
21
|
|
@@ -24,11 +24,7 @@ module Rays
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def bounds ()
|
27
|
-
Bounds.new 0, 0,
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.load (path, alpha_only = false)
|
31
|
-
load_image path, alpha_only
|
27
|
+
Bounds.new 0, 0, width, height
|
32
28
|
end
|
33
29
|
|
34
30
|
end# Image
|
data/lib/rays/matrix.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
require 'rays/ext'
|
5
|
+
|
6
|
+
|
7
|
+
module Rays
|
8
|
+
|
9
|
+
|
10
|
+
class Matrix
|
11
|
+
|
12
|
+
include Comparable
|
13
|
+
include Enumerable
|
14
|
+
|
15
|
+
def each (&block)
|
16
|
+
to_a.each &block
|
17
|
+
end
|
18
|
+
|
19
|
+
alias inspect_org inspect
|
20
|
+
|
21
|
+
def inspect ()
|
22
|
+
inspect_org.gsub(/\.?0+([^\.\d]|$)/) {$1}
|
23
|
+
end
|
24
|
+
|
25
|
+
end# Matrix
|
26
|
+
|
27
|
+
|
28
|
+
end# Rays
|
data/lib/rays/module.rb
CHANGED
@@ -6,6 +6,8 @@ module Rays
|
|
6
6
|
|
7
7
|
module Module
|
8
8
|
|
9
|
+
module_function
|
10
|
+
|
9
11
|
def name ()
|
10
12
|
super.split('::')[-2]
|
11
13
|
end
|
@@ -15,10 +17,10 @@ module Rays
|
|
15
17
|
end
|
16
18
|
|
17
19
|
def root_dir (path = '')
|
18
|
-
File.expand_path "
|
20
|
+
File.expand_path "../../#{path}", __dir__
|
19
21
|
end
|
20
22
|
|
21
|
-
def
|
23
|
+
def inc_dir ()
|
22
24
|
root_dir 'include'
|
23
25
|
end
|
24
26
|
|
@@ -26,23 +28,6 @@ module Rays
|
|
26
28
|
root_dir 'lib'
|
27
29
|
end
|
28
30
|
|
29
|
-
def task_dir ()
|
30
|
-
root_dir 'task'
|
31
|
-
end
|
32
|
-
|
33
|
-
def load_tasks (*names)
|
34
|
-
if names.empty?
|
35
|
-
Dir["#{task_dir}/**/*.rake"].each {|path| load path}
|
36
|
-
else
|
37
|
-
names.each do |name|
|
38
|
-
path = "#{task_dir}/#{name}.rake"
|
39
|
-
load path if File.exist? path
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
extend self
|
45
|
-
|
46
31
|
end# Module
|
47
32
|
|
48
33
|
|
data/lib/rays/painter.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
|
4
|
+
require 'xot/const_symbol_accessor'
|
5
|
+
require 'xot/universal_accessor'
|
4
6
|
require 'xot/block_util'
|
5
7
|
require 'rays/ext'
|
6
|
-
require 'rays/color'
|
7
8
|
|
8
9
|
|
9
10
|
module Rays
|
@@ -11,128 +12,112 @@ module Rays
|
|
11
12
|
|
12
13
|
class Painter
|
13
14
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
15
|
+
def push (*types, **attributes, &block)
|
16
|
+
each_type types do |type|
|
17
|
+
case type
|
18
|
+
when :state then push_state
|
19
|
+
when :matrix then push_matrix
|
20
|
+
else raise ArgumentError, "invalid push/pop type '#{type}'."
|
21
|
+
end
|
22
|
+
end
|
17
23
|
|
18
|
-
|
19
|
-
|
20
|
-
end
|
24
|
+
raise ArgumentError, 'missing block with pushing attributes.' if
|
25
|
+
!attributes.empty? && !block
|
21
26
|
|
22
|
-
|
23
|
-
|
24
|
-
|
27
|
+
if block
|
28
|
+
attributes.each do |key, value|
|
29
|
+
attributes[key] = __send__ key
|
30
|
+
__send__ key, *value
|
31
|
+
end
|
25
32
|
|
26
|
-
|
27
|
-
send_set :set_fill, :get_fill, :no_fill, args, :color
|
28
|
-
end
|
33
|
+
Xot::BlockUtil.instance_eval_or_block_call self, &block
|
29
34
|
|
30
|
-
|
31
|
-
|
32
|
-
|
35
|
+
attributes.each do |key, value|
|
36
|
+
__send__ key, *value
|
37
|
+
end
|
33
38
|
|
34
|
-
|
35
|
-
|
39
|
+
pop *types
|
40
|
+
end
|
36
41
|
end
|
37
42
|
|
38
|
-
def
|
39
|
-
|
43
|
+
def pop (*types)
|
44
|
+
each_type types, reverse: true do |type|
|
45
|
+
case type
|
46
|
+
when :state then pop_state
|
47
|
+
when :matrix then pop_matrix
|
48
|
+
else raise ArgumentError, "invalid push/pop type '#{type}'."
|
49
|
+
end
|
50
|
+
end
|
40
51
|
end
|
41
52
|
|
42
|
-
def
|
43
|
-
|
53
|
+
def paint (*args, &block)
|
54
|
+
begin_paint
|
55
|
+
Xot::BlockUtil.instance_eval_or_block_call self, *args, &block
|
56
|
+
self
|
57
|
+
ensure
|
58
|
+
end_paint
|
44
59
|
end
|
45
60
|
|
46
|
-
def
|
47
|
-
|
61
|
+
def line (*args, loop: false)
|
62
|
+
if args.first.kind_of?(Polyline)
|
63
|
+
draw_polyline args.first
|
64
|
+
else
|
65
|
+
draw_line args, loop
|
66
|
+
end
|
48
67
|
end
|
49
68
|
|
50
|
-
def
|
51
|
-
|
69
|
+
def rect (*args, round: nil, lt: nil, rt: nil, lb: nil, rb: nil)
|
70
|
+
draw_rect args, round, lt, rt, lb, rb
|
52
71
|
end
|
53
72
|
|
54
|
-
def
|
55
|
-
|
56
|
-
self.fill, self.stroke = fill, stroke
|
57
|
-
if block
|
58
|
-
Xot::BlockUtil.instance_eval_or_block_call self, &block
|
59
|
-
self.fill, self.stroke = org
|
60
|
-
end
|
61
|
-
org
|
73
|
+
def ellipse (*args, center: nil, radius: nil, hole: nil, from: nil, to: nil)
|
74
|
+
draw_ellipse args, center, radius, hole, from, to
|
62
75
|
end
|
63
76
|
|
64
|
-
def
|
65
|
-
|
66
|
-
case shader
|
67
|
-
when Shader then shader
|
68
|
-
when String then Shader.new shader
|
69
|
-
else raise ArgumentError
|
70
|
-
end
|
71
|
-
attach_shader shader
|
72
|
-
uniforms.each {|name, args| set_uniform name, *args}
|
73
|
-
shader
|
77
|
+
def curve (*args, loop: false)
|
78
|
+
draw_curve args, loop
|
74
79
|
end
|
75
80
|
|
76
|
-
|
77
|
-
|
78
|
-
def push (&block)
|
79
|
-
push_matrix
|
80
|
-
push_attr
|
81
|
-
push_shader
|
82
|
-
if block
|
83
|
-
Xot::BlockUtil.instance_eval_or_block_call self, &block
|
84
|
-
pop
|
85
|
-
end
|
81
|
+
def bezier (*args, loop: false)
|
82
|
+
draw_bezier args, loop
|
86
83
|
end
|
87
84
|
|
88
|
-
def
|
89
|
-
|
90
|
-
|
91
|
-
pop_matrix
|
85
|
+
def color= (fill, stroke = nil)
|
86
|
+
self.fill fill
|
87
|
+
self.stroke stroke
|
92
88
|
end
|
93
89
|
|
94
|
-
def
|
95
|
-
|
96
|
-
Xot::BlockUtil.instance_eval_or_block_call self, *args, &block
|
97
|
-
end_paint
|
90
|
+
def color ()
|
91
|
+
return fill, stroke
|
98
92
|
end
|
99
93
|
|
100
|
-
|
94
|
+
def shader= (shader, **uniforms)
|
95
|
+
shader.uniform **uniforms if shader && !uniforms.empty?
|
96
|
+
set_shader shader
|
97
|
+
end
|
101
98
|
|
102
|
-
|
99
|
+
const_symbol_accessor :stroke_cap, {
|
100
|
+
butt: CAP_BUTT,
|
101
|
+
round: CAP_ROUND,
|
102
|
+
square: CAP_SQUARE
|
103
|
+
}
|
103
104
|
|
104
|
-
|
105
|
-
|
106
|
-
|
105
|
+
const_symbol_accessor :stroke_join, {
|
106
|
+
miter: JOIN_MITER,
|
107
|
+
round: JOIN_ROUND,
|
108
|
+
square: JOIN_SQUARE
|
109
|
+
}
|
107
110
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
else
|
112
|
-
case mode
|
113
|
-
when :color then args = Color.color *args
|
114
|
-
end
|
115
|
-
send setter, *args
|
116
|
-
end
|
117
|
-
send getter
|
118
|
-
end
|
111
|
+
universal_accessor :background, :fill, :stroke, :color,
|
112
|
+
:stroke_width, :stroke_cap, :stroke_join, :miter_limit,
|
113
|
+
:nsegment, :shader, :clip, :font
|
119
114
|
|
120
|
-
|
121
|
-
unless args.empty?
|
122
|
-
set_or_push setter, getter, args, block
|
123
|
-
else
|
124
|
-
send getter
|
125
|
-
end
|
126
|
-
end
|
115
|
+
private
|
127
116
|
|
128
|
-
def
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
Xot::BlockUtil.instance_eval_or_block_call self, &block
|
133
|
-
send setter, org
|
134
|
-
end
|
135
|
-
org
|
117
|
+
def each_type (types, reverse: false, &block)
|
118
|
+
types = [:state, :matrix] if types.empty? || types.include?(:all)
|
119
|
+
types = types.reverse if reverse
|
120
|
+
types.each &block
|
136
121
|
end
|
137
122
|
|
138
123
|
end# Painter
|
data/lib/rays/point.rb
CHANGED
@@ -10,6 +10,7 @@ module Rays
|
|
10
10
|
class Point
|
11
11
|
|
12
12
|
include Comparable
|
13
|
+
include Enumerable
|
13
14
|
|
14
15
|
def move_to (*args)
|
15
16
|
dup.move_to! *args
|
@@ -19,6 +20,14 @@ module Rays
|
|
19
20
|
dup.move_by! *args
|
20
21
|
end
|
21
22
|
|
23
|
+
def zero? ()
|
24
|
+
length == 0
|
25
|
+
end
|
26
|
+
|
27
|
+
def each (&block)
|
28
|
+
to_a.each &block
|
29
|
+
end
|
30
|
+
|
22
31
|
def to_a (dimension = 2)
|
23
32
|
case dimension
|
24
33
|
when 1 then [x]
|
@@ -28,20 +37,8 @@ module Rays
|
|
28
37
|
end
|
29
38
|
end
|
30
39
|
|
31
|
-
def
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
def - (*args)
|
36
|
-
op_sub Point.from(*args)
|
37
|
-
end
|
38
|
-
|
39
|
-
def * (*args)
|
40
|
-
op_mult Point.from(*args)
|
41
|
-
end
|
42
|
-
|
43
|
-
def / (*args)
|
44
|
-
op_div Point.from(*args)
|
40
|
+
def to_s (dimension = 2)
|
41
|
+
to_a(dimension).to_s
|
45
42
|
end
|
46
43
|
|
47
44
|
def <=> (o)
|
@@ -50,13 +47,8 @@ module Rays
|
|
50
47
|
z <=> o.z
|
51
48
|
end
|
52
49
|
|
53
|
-
def
|
54
|
-
|
55
|
-
when Point then arg0
|
56
|
-
when Array then Point.new *arg0
|
57
|
-
when Numeric then Point.new arg0, arg0, arg0
|
58
|
-
else raise ArgumentError
|
59
|
-
end
|
50
|
+
def inspect ()
|
51
|
+
"#<Rays::Point #{to_a(3).join ', '}>"
|
60
52
|
end
|
61
53
|
|
62
54
|
end# Point
|
data/lib/rays/polygon.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
require 'rays/ext'
|
5
|
+
require 'rays/polyline'
|
6
|
+
|
7
|
+
|
8
|
+
module Rays
|
9
|
+
|
10
|
+
|
11
|
+
class Polygon
|
12
|
+
|
13
|
+
include Enumerable
|
14
|
+
|
15
|
+
def initialize (*args, loop: true)
|
16
|
+
setup args, loop
|
17
|
+
end
|
18
|
+
|
19
|
+
def transform (matrix = nil, &block)
|
20
|
+
lines = to_a
|
21
|
+
lines = lines.map {|line| line.transform matrix} if matrix
|
22
|
+
lines = block.call lines if block
|
23
|
+
self.class.new *lines
|
24
|
+
end
|
25
|
+
|
26
|
+
def intersects (obj)
|
27
|
+
!(self & obj).empty?
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.line (*args, loop: false)
|
31
|
+
new *args, loop: loop
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.rect (
|
35
|
+
*args, round: nil, lt: nil, rt: nil, lb: nil, rb: nil, nsegment: nil)
|
36
|
+
|
37
|
+
create_rect args, round, lt, rt, lb, rb, nsegment
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.ellipse (
|
41
|
+
*args, center: nil, radius: nil, hole: nil, from: nil, to: nil,
|
42
|
+
nsegment: nil)
|
43
|
+
|
44
|
+
create_ellipse args, center, radius, hole, from, to, nsegment
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.curve (*args, loop: false)
|
48
|
+
create_curve args, loop
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.bezier (*args, loop: false)
|
52
|
+
create_bezier args, loop
|
53
|
+
end
|
54
|
+
|
55
|
+
end# Polygon
|
56
|
+
|
57
|
+
|
58
|
+
end# Rays
|