cf3 0.0.1
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 +7 -0
- data/.gitignore +20 -0
- data/.yardopts +5 -0
- data/CHANGELOG +3 -0
- data/CONTRIBUTING.md +32 -0
- data/Gemfile +4 -0
- data/LICENSE.md +675 -0
- data/README.md +35 -0
- data/Rakefile +15 -0
- data/bin/cf3samples +16 -0
- data/cf3ruby.gemspec +29 -0
- data/lib/cf3.rb +240 -0
- data/lib/cf3/version.rb +3 -0
- data/samples/accident.rb +98 -0
- data/samples/alhambra.rb +79 -0
- data/samples/bar_code.rb +85 -0
- data/samples/city.rb +60 -0
- data/samples/creature.rb +59 -0
- data/samples/dark_star.rb +47 -0
- data/samples/data/java_args.txt +2 -0
- data/samples/dragon.rb +40 -0
- data/samples/escher.rb +124 -0
- data/samples/fern.rb +46 -0
- data/samples/grapher.rb +47 -0
- data/samples/hex_tube.rb +47 -0
- data/samples/isosceles.rb +36 -0
- data/samples/levy.rb +38 -0
- data/samples/pcr.rb +89 -0
- data/samples/sierpinski.rb +44 -0
- data/samples/spiral.rb +53 -0
- data/samples/tree.rb +98 -0
- data/samples/tree4.rb +65 -0
- data/samples/vine.rb +57 -0
- data/samples/y.rb +46 -0
- data/test/test_cf3.rb +26 -0
- metadata +128 -0
data/samples/bar_code.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
#########################
|
2
|
+
# bar_code.rb (2 of 5)
|
3
|
+
# demonstrates the vbar
|
4
|
+
# custom terminal
|
5
|
+
#########################
|
6
|
+
require 'cf3'
|
7
|
+
|
8
|
+
|
9
|
+
def setup_the_barcode
|
10
|
+
@barcode = ContextFree.define do
|
11
|
+
############ Begin defining custom terminal, a proportional vertical bar
|
12
|
+
class << self
|
13
|
+
define_method(:vbar) do |some_options|
|
14
|
+
size, options = *self.get_shape_values(some_options)
|
15
|
+
w = some_options[:w]|| 0.1 # default vbar width is 0.1
|
16
|
+
ratio = w * size
|
17
|
+
rot = options[:rotation]
|
18
|
+
rect_mode(CENTER)
|
19
|
+
rotate(rot) if rot
|
20
|
+
rect(-0.5 * ratio, -0.4 * size, 0.5 * ratio, 0.6 * size)
|
21
|
+
rotate(-rot) if rot
|
22
|
+
end
|
23
|
+
end
|
24
|
+
########### End definition of custom terminal 'vbar'
|
25
|
+
|
26
|
+
shape :strip do
|
27
|
+
2.times do
|
28
|
+
end_bar x: 0.09
|
29
|
+
end
|
30
|
+
4.times do
|
31
|
+
five x: 0.04
|
32
|
+
end
|
33
|
+
2.times do
|
34
|
+
end_bar x: 0.09
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
shape :bar, 1 do # wide
|
39
|
+
vbar size: 0.8, w: 0.08, brightness: -1
|
40
|
+
end
|
41
|
+
|
42
|
+
shape :bar, 1 do # wide
|
43
|
+
vbar size: 0.8, w: 0.06, brightness: -1
|
44
|
+
end
|
45
|
+
|
46
|
+
shape :bar, 1.6 do # narrow
|
47
|
+
vbar size: 0.8, w: 0.02, brightness: -1
|
48
|
+
end
|
49
|
+
|
50
|
+
shape :bar, 1.6 do # narrow
|
51
|
+
vbar size: 0.8, w: 0.03, brightness: -1
|
52
|
+
end
|
53
|
+
|
54
|
+
shape :end_bar, 1.6 do # narrow extra long
|
55
|
+
vbar size: 1, w: 0.03, brightness: -1
|
56
|
+
end
|
57
|
+
|
58
|
+
shape :five do
|
59
|
+
5.times do
|
60
|
+
bar x: 0.06
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def setup
|
67
|
+
size 350, 200
|
68
|
+
text_font(create_font("Dialog.plain", 24), 24)
|
69
|
+
background 255, 255, 0
|
70
|
+
draw_text
|
71
|
+
smooth
|
72
|
+
setup_the_barcode
|
73
|
+
draw_it
|
74
|
+
end
|
75
|
+
|
76
|
+
def draw_it
|
77
|
+
@barcode.render :strip, start_x: 0, start_y: height,
|
78
|
+
size: height
|
79
|
+
end
|
80
|
+
|
81
|
+
def draw_text
|
82
|
+
code = "23467"
|
83
|
+
fill 0
|
84
|
+
text code, 40, 80
|
85
|
+
end
|
data/samples/city.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# city.rb after city.cfdg
|
2
|
+
|
3
|
+
require 'cf3' # NB: requires ruby 1.9 for rand range
|
4
|
+
|
5
|
+
def setup_the_city
|
6
|
+
@city = ContextFree.define do
|
7
|
+
|
8
|
+
shape :neighborhood do
|
9
|
+
split do
|
10
|
+
block x: -0.25, y: -0.25
|
11
|
+
rewind
|
12
|
+
block x: 0.25, y: -0.25
|
13
|
+
rewind
|
14
|
+
block x: 0.25, y: 0.25
|
15
|
+
rewind
|
16
|
+
block x: -0.25, y: 0.25
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
shape :block do
|
21
|
+
buildings size: 0.85
|
22
|
+
end
|
23
|
+
|
24
|
+
shape :block, 5 do
|
25
|
+
neighborhood size: 0.5, rotation: rand(-PI..PI), hue: rand(2), brightness: rand(0.75..1.75)
|
26
|
+
end
|
27
|
+
|
28
|
+
shape :block, 0.1 do
|
29
|
+
# Do nothing
|
30
|
+
end
|
31
|
+
|
32
|
+
shape :buildings do
|
33
|
+
square
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def setup
|
40
|
+
size 600, 600
|
41
|
+
smooth
|
42
|
+
setup_the_city
|
43
|
+
@background = color 255, 255, 255
|
44
|
+
draw_it
|
45
|
+
end
|
46
|
+
|
47
|
+
def draw
|
48
|
+
# Do nothing
|
49
|
+
end
|
50
|
+
|
51
|
+
def draw_it
|
52
|
+
background @background
|
53
|
+
@city.render :neighborhood,
|
54
|
+
start_x: width/2, start_y: height/2,
|
55
|
+
size: height/2.5, color: [0.1, 0.1, 0.1]
|
56
|
+
end
|
57
|
+
|
58
|
+
def mouse_clicked
|
59
|
+
draw_it
|
60
|
+
end
|
data/samples/creature.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# contributed by monkstone
|
2
|
+
|
3
|
+
require 'cf3'
|
4
|
+
|
5
|
+
def setup_the_creature
|
6
|
+
@creature = ContextFree.define do
|
7
|
+
|
8
|
+
shape :start do
|
9
|
+
rot = 0
|
10
|
+
split do
|
11
|
+
11.times do # 11 times increment rotation by 30 degrees
|
12
|
+
legs rotation: rot
|
13
|
+
rot += 30
|
14
|
+
rewind # rewind context
|
15
|
+
end
|
16
|
+
legs rotation: 360
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
shape :legs do
|
21
|
+
circle hue: 0.15, saturation: 0.5, brightness: 1.0, color: [0.95, 0.15]
|
22
|
+
legs y: 0.1, size: 0.965
|
23
|
+
end
|
24
|
+
|
25
|
+
shape :legs, 0.01 do
|
26
|
+
circle
|
27
|
+
split do
|
28
|
+
legs rotation: 3
|
29
|
+
rewind
|
30
|
+
legs rotation: -3
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def setup
|
38
|
+
size 600, 600
|
39
|
+
setup_the_creature
|
40
|
+
no_stroke
|
41
|
+
color_mode HSB, 1.0
|
42
|
+
smooth
|
43
|
+
draw_it
|
44
|
+
# save_frame("creature.png")
|
45
|
+
end
|
46
|
+
|
47
|
+
def draw
|
48
|
+
# Do nothing.
|
49
|
+
end
|
50
|
+
|
51
|
+
def draw_it
|
52
|
+
background -1.0
|
53
|
+
@creature.render :start, size: height/5, stop_size: 0.8,
|
54
|
+
start_x: width/2, start_y: height/3, color: [0.75, 0.1, 0.9]
|
55
|
+
end
|
56
|
+
|
57
|
+
def mouse_clicked
|
58
|
+
draw_it
|
59
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# by Martin Prout
|
2
|
+
|
3
|
+
require 'cf3'
|
4
|
+
|
5
|
+
def setup_the_sun
|
6
|
+
@sun = ContextFree.define do
|
7
|
+
|
8
|
+
shape :start do
|
9
|
+
rot = 0
|
10
|
+
split do
|
11
|
+
12.times do
|
12
|
+
legs rotation: rot
|
13
|
+
rot += 30
|
14
|
+
rewind
|
15
|
+
end
|
16
|
+
legs rotation: 360
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
shape :legs do
|
21
|
+
circle
|
22
|
+
legs rotation: 1, y: 0.1,
|
23
|
+
size: 0.973, color: [0.22, 0.15]
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def setup
|
30
|
+
size 600, 600
|
31
|
+
setup_the_sun
|
32
|
+
no_stroke
|
33
|
+
color_mode HSB, 1.0
|
34
|
+
draw_it
|
35
|
+
end
|
36
|
+
|
37
|
+
def draw
|
38
|
+
# Do nothing.
|
39
|
+
end
|
40
|
+
|
41
|
+
def draw_it
|
42
|
+
background 0.7
|
43
|
+
@sun.render :start, size: height/7, stop_size: 0.8,
|
44
|
+
start_x: width/2, start_y: height/2
|
45
|
+
end
|
46
|
+
|
47
|
+
|
data/samples/dragon.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# by Martin Prout
|
2
|
+
|
3
|
+
require 'cf3'
|
4
|
+
|
5
|
+
def setup_the_dragon
|
6
|
+
@dragon = ContextFree.define do
|
7
|
+
|
8
|
+
shape :start do
|
9
|
+
dragon alpha: 1
|
10
|
+
end
|
11
|
+
|
12
|
+
shape :dragon do
|
13
|
+
square hue: 0, brightness: 0, saturation: 1, alpha: 0.02
|
14
|
+
split do
|
15
|
+
dragon size: 1/Math.sqrt(2), rotation: -45, x: 0.25, y: 0.25
|
16
|
+
rewind
|
17
|
+
dragon size: 1/Math.sqrt(2), rotation: 135, x: 0.25, y: 0.25
|
18
|
+
rewind
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup
|
26
|
+
size 800, 500
|
27
|
+
setup_the_dragon
|
28
|
+
smooth
|
29
|
+
draw_it
|
30
|
+
end
|
31
|
+
|
32
|
+
def draw
|
33
|
+
# Do nothing.
|
34
|
+
end
|
35
|
+
|
36
|
+
def draw_it
|
37
|
+
background 255
|
38
|
+
@dragon.render :start, size: width*0.8, stop_size: 2,
|
39
|
+
start_x: width/3, start_y: height/3.5
|
40
|
+
end
|
data/samples/escher.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'cf3'
|
2
|
+
|
3
|
+
def setup_the_birds
|
4
|
+
|
5
|
+
|
6
|
+
@birds= ContextFree.define do
|
7
|
+
|
8
|
+
############ Begin defining custom terminal, an wavy_triangle triangle
|
9
|
+
class << self
|
10
|
+
SQRT3 = Math.sqrt(3)
|
11
|
+
define_method(:wavy_diamond) do |some_options| # wavy_triangle triangle
|
12
|
+
size, options = *self.get_shape_values(some_options)
|
13
|
+
rot = options[:rotation]
|
14
|
+
x0 = options[:x]
|
15
|
+
y0 = options[:y]
|
16
|
+
disp = options[:disp]
|
17
|
+
col = options[:color]
|
18
|
+
pts = Array.new(16)
|
19
|
+
pts[0] = PVector.new(x0 - 0.25 * size, y0 - size / SQRT3) # A
|
20
|
+
pts[2] = PVector.new(x0 + 0.75 * size, y0 - size / SQRT3) # B
|
21
|
+
pts[4] = PVector.new(x0 + 0.25 * size, y0 + (SQRT3 * size) / 6) # C
|
22
|
+
pts[6] = PVector.new(x0 - 0.75 * size, y0 + (SQRT3 * size) / 6) # D
|
23
|
+
pts[1] = get_mid_point(pts[0], pts[2])#Ab
|
24
|
+
pts[3] = get_mid_point(pts[2], pts[4])#Bc
|
25
|
+
pts[5] = get_mid_point(pts[4], pts[6])#Cd
|
26
|
+
pts[7] = get_mid_point(pts[6], pts[0])#Da
|
27
|
+
pts[8] = get_mid_point(pts[0], pts[1])#Aba
|
28
|
+
adjust_bezier(pts[8], PI/2, -disp * size)#Aba
|
29
|
+
pts[9] = get_mid_point(pts[1], pts[2])
|
30
|
+
adjust_bezier(pts[9], PI/2, disp * size)
|
31
|
+
pts[10] = get_mid_point(pts[2], pts[3])
|
32
|
+
adjust_bezier(pts[10], PI/3, disp * size)
|
33
|
+
pts[11] = get_mid_point(pts[3], pts[4])
|
34
|
+
adjust_bezier(pts[11], PI/3, -disp * size)
|
35
|
+
pts[12] = get_mid_point(pts[4], pts[5])
|
36
|
+
adjust_bezier(pts[12], PI/2, disp * size)
|
37
|
+
pts[13] = get_mid_point(pts[5], pts[6])
|
38
|
+
adjust_bezier(pts[13], PI/2, -disp * size)
|
39
|
+
pts[14] = get_mid_point(pts[6], pts[7])
|
40
|
+
adjust_bezier(pts[14], PI/3, -disp * size)
|
41
|
+
pts[15] = get_mid_point(pts[7], pts[0])
|
42
|
+
adjust_bezier(pts[15], PI/3, disp * size)
|
43
|
+
rotate(rot) if rot
|
44
|
+
fill *col
|
45
|
+
begin_shape
|
46
|
+
vertex(pts[0].x, pts[0].y)
|
47
|
+
bezier_vertex(pts[0].x, pts[0].y, pts[8].x, pts[8].y, pts[1].x, pts[1].y)
|
48
|
+
bezier_vertex(pts[1].x, pts[1].y, pts[9].x, pts[9].y, pts[2].x, pts[2].y)
|
49
|
+
bezier_vertex(pts[2].x, pts[2].y, pts[10].x, pts[10].y, pts[3].x, pts[3].y)
|
50
|
+
bezier_vertex(pts[3].x, pts[3].y, pts[11].x, pts[11].y, pts[4].x, pts[4].y)
|
51
|
+
bezier_vertex(pts[4].x, pts[4].y, pts[12].x, pts[12].y, pts[5].x, pts[5].y)
|
52
|
+
bezier_vertex(pts[5].x, pts[5].y, pts[13].x, pts[13].y, pts[6].x, pts[6].y)
|
53
|
+
bezier_vertex(pts[6].x, pts[6].y, pts[14].x, pts[14].y, pts[7].x, pts[7].y)
|
54
|
+
bezier_vertex(pts[7].x, pts[7].y, pts[15].x, pts[15].y, pts[0].x, pts[0].y)
|
55
|
+
vertex(pts[0].x, pts[0].y)
|
56
|
+
end_shape(CLOSE)
|
57
|
+
rotate(-rot) if rot
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
def adjust_bezier(base, theta, disp)
|
62
|
+
base.add(PVector.new(Math.cos(theta)*disp, Math.sin(theta)*disp))
|
63
|
+
end
|
64
|
+
|
65
|
+
def get_mid_point(a, b)
|
66
|
+
mid = PVector.add(a, b)
|
67
|
+
mid.div(2)
|
68
|
+
return mid
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
########### End definition of custom terminal 'wavy_diamond' shape
|
73
|
+
shape :birds do
|
74
|
+
bird size: 0.1
|
75
|
+
split do
|
76
|
+
10.times do |i|
|
77
|
+
split do
|
78
|
+
10.times do |j|
|
79
|
+
bird size: 1, x: (i * 0.5 + 0.25 * (j%2)), y: j * 0.435
|
80
|
+
rewind
|
81
|
+
end
|
82
|
+
rewind
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
shape :bird do
|
89
|
+
wavy_diamond color: [0.7, 1, 1, 1]
|
90
|
+
end
|
91
|
+
|
92
|
+
shape :bird do
|
93
|
+
wavy_diamond color: [0.5, 1, 1, 1]
|
94
|
+
end
|
95
|
+
|
96
|
+
shape :bird do
|
97
|
+
wavy_diamond color: [0.1, 1, 1, 1]
|
98
|
+
end
|
99
|
+
|
100
|
+
shape :bird do
|
101
|
+
wavy_diamond color: [0.2, 1, 1, 1]
|
102
|
+
end
|
103
|
+
|
104
|
+
shape :bird do
|
105
|
+
wavy_diamond color: [0.01, 1, 1, 1]
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def setup
|
112
|
+
size 1000, 800
|
113
|
+
setup_the_birds
|
114
|
+
draw_it
|
115
|
+
end
|
116
|
+
|
117
|
+
def draw_it
|
118
|
+
background 255
|
119
|
+
@birds.render :birds, :start_x => 0, :start_y => 0, size: 1000, :disp => 0.32, color: [0, 1, 1, 1]
|
120
|
+
end
|
121
|
+
|
122
|
+
def draw
|
123
|
+
# do nothing
|
124
|
+
end
|
data/samples/fern.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'cf3'
|
2
|
+
|
3
|
+
def setup_the_fern
|
4
|
+
|
5
|
+
@fern = ContextFree.define do
|
6
|
+
|
7
|
+
shape :start do
|
8
|
+
fern rotation: 50, hue: 0.8
|
9
|
+
end
|
10
|
+
|
11
|
+
shape :fern do
|
12
|
+
circle size: 0.75, rotation: -10
|
13
|
+
split do
|
14
|
+
fern size: 0.92, y: -2, rotation: -5, hue: 0.85
|
15
|
+
rewind
|
16
|
+
fern size: 0.5, y: -2, rotation: 90
|
17
|
+
rewind
|
18
|
+
fern size: 0.5, y: -2, rotation: -90
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup
|
26
|
+
size 600, 600
|
27
|
+
setup_the_fern
|
28
|
+
no_stroke
|
29
|
+
color_mode HSB, 1.0
|
30
|
+
smooth
|
31
|
+
draw_it
|
32
|
+
end
|
33
|
+
|
34
|
+
def draw
|
35
|
+
# Do nothing.
|
36
|
+
end
|
37
|
+
|
38
|
+
def draw_it
|
39
|
+
background 0.33, 0.25, 0.2
|
40
|
+
@fern.render :start, size: height/23, color: [0.35, 0.4, 0.9, 0.55], stop_size: 1,
|
41
|
+
start_x: width/2.5, start_y: height/1.285
|
42
|
+
end
|
43
|
+
|
44
|
+
def mouse_clicked
|
45
|
+
draw_it
|
46
|
+
end
|