cf3 0.0.4 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/{CHANGELOG → CHANGELOG.md} +13 -0
  4. data/Gemfile +1 -1
  5. data/README.md +21 -21
  6. data/Rakefile +7 -3
  7. data/bin/cf3samples +4 -4
  8. data/cf3ruby.gemspec +12 -13
  9. data/docs/.sass-cache/cd612fe6616e7f514a2421dc73159618de35b85d/jekyll-theme-cayman.scssc +0 -0
  10. data/docs/.sass-cache/cd612fe6616e7f514a2421dc73159618de35b85d/normalize.scssc +0 -0
  11. data/docs/.sass-cache/cd612fe6616e7f514a2421dc73159618de35b85d/rouge-github.scssc +0 -0
  12. data/docs/.sass-cache/cd612fe6616e7f514a2421dc73159618de35b85d/variables.scssc +0 -0
  13. data/docs/README.md +1 -0
  14. data/docs/_config.yml +31 -0
  15. data/docs/_site/README.md +1 -0
  16. data/docs/_site/about/index.html +52 -0
  17. data/docs/_site/assets/css/style.css +809 -0
  18. data/docs/_site/assets/y.png +0 -0
  19. data/docs/_site/example/index.html +113 -0
  20. data/docs/_site/favicon.ico +0 -0
  21. data/docs/_site/feed.xml +10 -0
  22. data/docs/_site/index.html +51 -0
  23. data/docs/_site/robots.txt +1 -0
  24. data/docs/_site/sitemap.xml +12 -0
  25. data/docs/about.md +14 -0
  26. data/docs/assets/y.png +0 -0
  27. data/docs/example.md +73 -0
  28. data/docs/favicon.ico +0 -0
  29. data/docs/index.md +10 -0
  30. data/lib/cf3/version.rb +1 -1
  31. data/lib/cf3.rb +85 -100
  32. data/samples/Rakefile +30 -0
  33. data/samples/accident.rb +34 -30
  34. data/samples/alhambra.rb +32 -29
  35. data/samples/bar_code.rb +26 -22
  36. data/samples/city.rb +14 -11
  37. data/samples/creature.rb +10 -6
  38. data/samples/dark_star.rb +5 -3
  39. data/samples/data/java_args.txt +1 -2
  40. data/samples/dragon.rb +8 -4
  41. data/samples/escher.rb +115 -116
  42. data/samples/fern.rb +13 -9
  43. data/samples/hex_tube.rb +16 -13
  44. data/samples/isosceles.rb +16 -11
  45. data/samples/levy.rb +5 -2
  46. data/samples/pcr.rb +28 -24
  47. data/samples/rubystar.rb +23 -17
  48. data/samples/sierpinski.rb +15 -11
  49. data/samples/spiral.rb +14 -10
  50. data/samples/star.rb +10 -6
  51. data/samples/tree.rb +20 -17
  52. data/samples/tree4.rb +12 -8
  53. data/samples/vine.rb +11 -7
  54. data/samples/xcross.rb +10 -7
  55. data/samples/y.rb +13 -9
  56. data/test/test_cf3.rb +11 -7
  57. metadata +50 -42
data/samples/dark_star.rb CHANGED
@@ -26,8 +26,12 @@ def setup_the_sun
26
26
  end
27
27
  end
28
28
 
29
- def setup
29
+ def settings
30
30
  size 600, 600
31
+ end
32
+
33
+ def setup
34
+ sketch_title 'Dark Star'
31
35
  setup_the_sun
32
36
  no_stroke
33
37
  color_mode HSB, 1.0
@@ -43,5 +47,3 @@ def draw_it
43
47
  @sun.render :start, size: height/7, stop_size: 0.8,
44
48
  start_x: width/2, start_y: height/2
45
49
  end
46
-
47
-
@@ -1,2 +1 @@
1
- -Xmn128m -Xms512m -Xmx512m -XX:+OptimizeStringConcat -XX:CompileCommand=dontinline,org.jruby.runtime.invokedynamic.InvokeDynamicSupport::invocationFallback
2
-
1
+ -XX:InlineSmallCode=500 -Xms256m -Xmx2g -XX:NewSize=64m -XX:MaxNewSize=64m
data/samples/dragon.rb CHANGED
@@ -6,11 +6,11 @@ INV_SQRT = 1 / Math.sqrt(2)
6
6
 
7
7
  def setup_the_dragon
8
8
  @dragon = ContextFree.define do
9
-
9
+
10
10
  shape :start do
11
11
  dragon alpha: 1
12
12
  end
13
-
13
+
14
14
  shape :dragon do
15
15
  square hue: 0, brightness: 0, saturation: 1, alpha: 0.02
16
16
  split do
@@ -20,12 +20,16 @@ def setup_the_dragon
20
20
  rewind
21
21
  end
22
22
  end
23
-
23
+
24
24
  end
25
25
  end
26
26
 
27
- def setup
27
+ def settings
28
28
  size 800, 500
29
+ end
30
+
31
+ def setup
32
+ sketch_title 'Heighway Dragon'
29
33
  setup_the_dragon
30
34
  smooth
31
35
  draw_it
data/samples/escher.rb CHANGED
@@ -1,124 +1,123 @@
1
1
  require 'cf3'
2
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: [38, 1, 1, 1]
90
- end
91
-
92
- shape :bird do
93
- wavy_diamond color: [180, 1, 1, 1]
94
- end
95
-
96
- shape :bird do
97
- wavy_diamond color: [36, 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]
3
+ def setup_the_birds
4
+ @birds= ContextFree.define do
5
+ ############ Begin defining custom terminal, an wavy_triangle triangle
6
+ class << self
7
+ SQRT3 = Math.sqrt(3)
8
+ define_method(:wavy_diamond) do |some_options| # wavy_triangle triangle
9
+ options = self.get_shape_values(some_options)
10
+ size = options[:size]
11
+ rot = options[:rotation]
12
+ x0 = options[:x]
13
+ y0 = options[:y]
14
+ disp = options[:disp]
15
+ col = options[:color]
16
+ pts = Array.new(16)
17
+ pts[0] = Vec2D.new(x0 - 0.25 * size, y0 - size / SQRT3) # A
18
+ pts[2] = Vec2D.new(x0 + 0.75 * size, y0 - size / SQRT3) # B
19
+ pts[4] = Vec2D.new(x0 + 0.25 * size, y0 + (SQRT3 * size) / 6) # C
20
+ pts[6] = Vec2D.new(x0 - 0.75 * size, y0 + (SQRT3 * size) / 6) # D
21
+ pts[1] = get_mid_point(pts[0], pts[2])#Ab
22
+ pts[3] = get_mid_point(pts[2], pts[4])#Bc
23
+ pts[5] = get_mid_point(pts[4], pts[6])#Cd
24
+ pts[7] = get_mid_point(pts[6], pts[0])#Da
25
+ pts[8] = get_mid_point(pts[0], pts[1])#Aba
26
+ pts[8] += adjust_bezier(PI/2, -disp * size)#Aba
27
+ pts[9] = get_mid_point(pts[1], pts[2])
28
+ pts[9] += adjust_bezier(PI/2, disp * size)
29
+ pts[10] = get_mid_point(pts[2], pts[3])
30
+ pts[10] += adjust_bezier(PI/3, disp * size)
31
+ pts[11] = get_mid_point(pts[3], pts[4])
32
+ pts[11] += adjust_bezier(PI/3, -disp * size)
33
+ pts[12] = get_mid_point(pts[4], pts[5])
34
+ pts[12] += adjust_bezier(PI/2, disp * size)
35
+ pts[13] = get_mid_point(pts[5], pts[6])
36
+ pts[13] += adjust_bezier(PI/2, -disp * size)
37
+ pts[14] = get_mid_point(pts[6], pts[7])
38
+ pts[14] += adjust_bezier(PI/3, -disp * size)
39
+ pts[15] = get_mid_point(pts[7], pts[0])
40
+ pts[15] += adjust_bezier(PI/3, disp * size)
41
+ rotate(rot) if rot
42
+ fill *col
43
+ begin_shape
44
+ vertex(pts[0].x, pts[0].y)
45
+ bezier_vertex(pts[0].x, pts[0].y, pts[8].x, pts[8].y, pts[1].x, pts[1].y)
46
+ bezier_vertex(pts[1].x, pts[1].y, pts[9].x, pts[9].y, pts[2].x, pts[2].y)
47
+ bezier_vertex(pts[2].x, pts[2].y, pts[10].x, pts[10].y, pts[3].x, pts[3].y)
48
+ bezier_vertex(pts[3].x, pts[3].y, pts[11].x, pts[11].y, pts[4].x, pts[4].y)
49
+ bezier_vertex(pts[4].x, pts[4].y, pts[12].x, pts[12].y, pts[5].x, pts[5].y)
50
+ bezier_vertex(pts[5].x, pts[5].y, pts[13].x, pts[13].y, pts[6].x, pts[6].y)
51
+ bezier_vertex(pts[6].x, pts[6].y, pts[14].x, pts[14].y, pts[7].x, pts[7].y)
52
+ bezier_vertex(pts[7].x, pts[7].y, pts[15].x, pts[15].y, pts[0].x, pts[0].y)
53
+ vertex(pts[0].x, pts[0].y)
54
+ end_shape(CLOSE)
55
+ rotate(-rot) if rot
56
+ end
57
+
58
+ private
59
+ def adjust_bezier(theta, disp)
60
+ Vec2D.new(Math.cos(theta)*disp, Math.sin(theta)*disp)
61
+ end
62
+
63
+ def get_mid_point(a, b)
64
+ (a + b) / 2.0
65
+ end
66
+ end
67
+
68
+ ########### End definition of custom terminal 'wavy_diamond' shape
69
+ shape :birds do
70
+ bird size: 0.1
71
+ split do
72
+ 10.times do |i|
73
+ split do
74
+ 10.times do |j|
75
+ bird size: 1, x: (i * 0.5 + 0.25 * (j%2)), y: j * 0.435
76
+ rewind
106
77
  end
107
-
78
+ rewind
79
+ end
108
80
  end
81
+ end
109
82
  end
110
-
111
- def setup
112
- size 1000, 800
113
- setup_the_birds
114
- draw_it
83
+
84
+ shape :bird do
85
+ wavy_diamond color: [38, 1, 1, 1]
115
86
  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]
87
+
88
+ shape :bird do
89
+ wavy_diamond color: [180, 1, 1, 1]
90
+ end
91
+
92
+ shape :bird do
93
+ wavy_diamond color: [36, 1, 1, 1]
94
+ end
95
+
96
+ shape :bird do
97
+ wavy_diamond color: [0.2, 1, 1, 1]
120
98
  end
121
-
122
- def draw
123
- # do nothing
99
+
100
+ shape :bird do
101
+ wavy_diamond color: [0.01, 1, 1, 1]
124
102
  end
103
+ end
104
+ end
105
+
106
+ def settings
107
+ size 1000, 800
108
+ end
109
+
110
+ def setup
111
+ sketch_title 'In pursuit of M.C. Escher'
112
+ setup_the_birds
113
+ draw_it
114
+ end
115
+
116
+ def draw_it
117
+ background 255
118
+ @birds.render :birds, :start_x => 0, :start_y => 0, size: 1000, :disp => 0.32, color: [0, 1, 1, 1]
119
+ end
120
+
121
+ def draw
122
+ # do nothing
123
+ end
data/samples/fern.rb CHANGED
@@ -7,29 +7,33 @@ require 'cf3'
7
7
  #######################################################
8
8
 
9
9
  def setup_the_fern
10
-
10
+
11
11
  @fern = ContextFree.define do
12
-
12
+
13
13
  shape :start do
14
- fern rotation: 50, hue: 306
14
+ fern rotation: 8, hue: 306
15
15
  end
16
-
16
+
17
17
  shape :fern do
18
- circle size: 0.75, rotation: -10
18
+ square size: 0.75, rotation: -49
19
19
  split do
20
- fern size: 0.92, y: -2, rotation: -5, hue: 306
20
+ fern size: 0.92, y: -2, rotation: 5, hue: 306
21
21
  rewind
22
22
  fern size: 0.5, y: -2, rotation: 90
23
- rewind
23
+ rewind
24
24
  fern size: 0.5, y: -2, rotation: -90
25
25
  end
26
26
  end
27
-
27
+
28
28
  end
29
29
  end
30
30
 
31
- def setup
31
+ def settings
32
32
  size 600, 600
33
+ end
34
+
35
+ def setup
36
+ sketch_title 'Fern'
33
37
  setup_the_fern
34
38
  no_stroke
35
39
  end
data/samples/hex_tube.rb CHANGED
@@ -1,15 +1,15 @@
1
1
  #########################
2
- # hextube.rb by Martin Prout
2
+ # hextube.rb by Martin Prout
3
3
  #########################
4
4
  require 'cf3'
5
- #load_library :cf3
6
5
 
7
6
  def setup_the_hextube
8
7
  @hexa = ContextFree.define do
9
8
  ############ Begin defining custom terminal, as a hexagon (path C++ cfdg)
10
9
  class << self
11
- define_method(:hexagon) do |some_options|
12
- size, options = *self.get_shape_values(some_options)
10
+ define_method(:hexagon) do |some_options|
11
+ options = self.get_shape_values(some_options)
12
+ size = options[:size]
13
13
  rot = (options[:rotation])? options[:rotation]: 0
14
14
  no_fill
15
15
  stroke(*options[:color])
@@ -19,29 +19,32 @@ def setup_the_hextube
19
19
  vertex(size * Math.cos(Math::PI * i/3 + rot), size * Math.sin(Math::PI * i/3 + rot))
20
20
  end
21
21
  end_shape(CLOSE)
22
- end
22
+ end
23
23
  end
24
24
  ########### End definition of custom terminal 'hexagon'
25
25
  shape :hextube do
26
- hexa brightness: 1.0
26
+ hexa brightness: 1.0
27
27
  end
28
-
28
+
29
29
  shape :hexa do |i = nil, j = 0.5|
30
- hexagon size: 1, brightness: 1.0
31
- hexa size: 0.9, rotation: 5 *j
30
+ hexagon(size: 1, brightness: 1.0)
31
+ hexa(size: 0.9, rotation: 5 * j)
32
32
  end
33
33
  end
34
34
  end
35
35
 
36
- def setup
36
+ def settings
37
37
  size 800, 800
38
- background 0
39
- smooth
38
+ end
39
+
40
+ def setup
41
+ sketch_title 'Hex-Tube'
42
+ background 0
40
43
  setup_the_hextube
41
44
  draw_it
42
45
  end
43
46
 
44
47
  def draw_it
45
- @hexa.render :hextube, start_x: width/2, start_y: height/2,
48
+ @hexa.render :hextube, start_x: width/2, start_y: height/2,
46
49
  size: height/2.1, color: [60, 1, 1, 0.5]
47
50
  end
data/samples/isosceles.rb CHANGED
@@ -2,26 +2,31 @@ require 'cf3'
2
2
 
3
3
  def setup_the_spiral
4
4
  @spiral= ContextFree.define do
5
- ############ Begin defining custom terminal, an isoceles triangle
6
- class << self
7
- define_method(:isoceles) do |some_options| # isoceles triangle
8
- size, options = *self.get_shape_values(some_options)
5
+ ############ Begin defining custom terminal, an isosceles triangle
6
+ class << self
7
+ define_method(:isosceles) do |some_options| # isosceles triangle
8
+ options = get_shape_values(some_options)
9
+ size = options[:size]
9
10
  rot = options[:rotation]
10
- rotate(rot) if rot
11
- $app.triangle(-0.5 * size, -0.5 * size, -0.5 * size, 0.5 * size, 0.5 * size, 0.5 * size)
11
+ rotate(rot) if rot
12
+ @app.triangle(-0.5 * size, -0.5 * size, -0.5 * size, 0.5 * size, 0.5 * size, 0.5 * size)
12
13
  rotate(-rot) if rot
13
14
  end
14
15
  end
15
- ########### End definition of custom terminal 'isoceles'
16
+ ########### End definition of custom terminal 'isosceles'
16
17
  shape :spiral do
17
- isoceles brightness: -1, rotation: 90
18
- spiral rotation: 135, size: 1/sqrt(2), x: 1/sqrt(2)
18
+ isosceles brightness: -1, rotation: 90
19
+ spiral rotation: 135, size: 1 / sqrt(2), x: 1 / sqrt(2)
19
20
  end
20
21
  end
21
22
  end
22
23
 
23
- def setup
24
+ def settings
24
25
  size 800, 500
26
+ end
27
+
28
+ def setup
29
+ sketch_title 'Isosceles'
25
30
  setup_the_spiral
26
31
  draw_it
27
32
  end
@@ -32,5 +37,5 @@ end
32
37
 
33
38
  def draw_it
34
39
  background 255
35
- @spiral.render :spiral, size: height, start_x: width/3, start_y: height/2
40
+ @spiral.render :spiral, size: height, start_x: width / 3, start_y: height / 2
36
41
  end