cf3 0.0.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module Cf3
2
- VERSION = "0.0.5"
2
+ VERSION = '1.0.0'
3
3
  end
@@ -0,0 +1,30 @@
1
+ # Simple demo Rakefile to autorun samples in current directory
2
+ # adjust path to k9 executable, and or opts as required
3
+
4
+ SAMPLES_DIR = './'
5
+
6
+ desc 'run demo'
7
+ task default: [:demo]
8
+
9
+ desc 'demo'
10
+ task :demo do
11
+ samples_list.shuffle.each { |sample| run_sample sample }
12
+ end
13
+
14
+ def samples_list
15
+ files = []
16
+ Dir.chdir(SAMPLES_DIR)
17
+ Dir.glob('*.rb').each do |file|
18
+ files << File.join(SAMPLES_DIR, file)
19
+ end
20
+ return files
21
+ end
22
+
23
+ def run_sample(sample_name)
24
+ puts "Running #{sample_name}...quit to run next sample"
25
+ open("|k9 -r #{sample_name}", 'r') do |io|
26
+ while l = io.gets
27
+ puts(l.chop)
28
+ end
29
+ end
30
+ end
@@ -1,26 +1,28 @@
1
1
  #########################
2
- # rubystar.rb
2
+ # rubystar.rb
3
3
  #########################
4
- require 'cf3'
4
+ require 'cf3'
5
5
 
6
6
  PHI = (1 + Math.sqrt(5)) / 2
7
7
 
8
8
  def setup_the_sunstar
9
9
  @hexa = ContextFree.define do
10
- ############ Begin defining custom terminals, as a sharp and flat triangles
10
+ ############ Begin defining custom terminals, as a sharp and flat triangles
11
11
  class << self
12
12
  include Math
13
- define_method(:sharp) do |some_options|
14
- size, options = *self.get_shape_values(some_options)
15
- rot = options[:rotation]
13
+ define_method(:sharp) do |some_options|
14
+ options = get_shape_values(some_options)
15
+ size = options[:size]
16
+ rot = options[:rotation]
16
17
  #f = (options[:flip])? -1 : 1
17
- @app.rotate(rot) if rot
18
+ @app.rotate(rot) if rot
18
19
  #@app.triangle(0, 0, size * cos(0), size * sin(0), size * cos(PI * f/5), size * sin(PI*f/5))
19
20
  @app.triangle(0, 0, size * cos(0), size * sin(0), size * cos(PI/5), size * sin(PI/5))
20
21
  @app.rotate(-rot) if rot
21
22
  end
22
- define_method(:flat) do |some_options|
23
- size, options = *self.get_shape_values(some_options)
23
+ define_method(:flat) do |some_options|
24
+ options = get_shape_values(some_options)
25
+ size = options[:size]
24
26
  rot = options[:rotation]
25
27
  f = (options[:flip])? -1 : 1 # NB custom flip adjustment
26
28
  @app.triangle(0, 0, size * cos(0), size * sin(0), size/PHI * cos(PI * f/5 ), size/PHI * sin(PI * f/5))
@@ -28,51 +30,49 @@ def setup_the_sunstar
28
30
  end
29
31
  end
30
32
  ########### End definition of custom terminals 'sharp and flat'
31
-
33
+
32
34
  shape :tiling do
33
35
  outer brightness: 1.0
34
36
  end
35
-
36
-
37
+
37
38
  shape :outer do
38
39
  split do
39
- 10.times do
40
+ 10.times do
40
41
  sunstar y: sqrt((PHI)** - 0.125), rotation: 36
41
42
  end
42
43
  rewind
43
44
  end
44
45
  outer size: 1/PHI
45
- end
46
-
47
-
46
+ end
47
+
48
48
  shape :sunstar do
49
49
  split do
50
- sun brightness: 0.9, alpha: 1.0
50
+ sun brightness: 0.9, alpha: 1.0
51
51
  rewind
52
52
  star brightness: 0.9, alpha: 0.8
53
53
  rewind
54
54
  end
55
55
  end
56
-
56
+
57
57
  shape :dart do
58
- flat size: 1, hue: 65, sat: 0.9, brightness: 0.9
58
+ flat size: 1, hue: 65, sat: 0.9, brightness: 0.9
59
59
  flat size: 1, hue: 65, sat: 1.0, brightness: 1.0, flip: true
60
60
  end
61
-
62
- shape :kite do
63
- sharp size: 1, hue: 0, sat: 0.9, brightness: 0.9
61
+
62
+ shape :kite do
63
+ sharp size: 1, hue: 0, sat: 0.9, brightness: 0.9
64
64
  sharp size: 1, hue: 0, sat: 1.0, brightness: 1.0, rotation: 180, flip: true
65
65
  end
66
-
67
- shape :star do
66
+
67
+ shape :star do
68
68
  split do
69
69
  5.times do |i|
70
- dart rotation: 72 * i
70
+ dart rotation: 72 * i
71
71
  rewind
72
72
  end
73
73
  end
74
74
  end
75
-
75
+
76
76
  shape :sun do
77
77
  split do
78
78
  5.times do |i|
@@ -84,14 +84,18 @@ def setup_the_sunstar
84
84
  end
85
85
  end
86
86
 
87
- def setup
87
+ def settings
88
88
  size 800, 800
89
- background 255
89
+ end
90
+
91
+ def setup
92
+ sketch_title 'Accident'
93
+ background 255
90
94
  setup_the_sunstar
91
95
  draw_it
92
96
  end
93
97
 
94
98
  def draw_it
95
- @hexa.render :tiling, start_x: width * 0.75, start_y: height/2.64,
96
- size: height/6
99
+ @hexa.render :tiling, start_x: width * 0.75, start_y: height/2.64,
100
+ size: height/6
97
101
  end
@@ -8,34 +8,36 @@ RED = [17, 0.983, 0.231, 1]
8
8
  COLORS = [GOLD, BLACK, GREEN, BLUE, RED]
9
9
 
10
10
  def setup_the_tiles
11
- @tiles= ContextFree.define do
12
- ############ Begin defining custom terminal, an wavy_triangle triangle
13
- class << self
11
+ @tiles = ContextFree.define do
12
+ ############ Begin defining custom terminal, an wavy_triangle triangle
13
+ class << self
14
+ SQRT3 = Math.sqrt(3)
14
15
  define_method(:wavy_triangle) do |some_options| # wavy_triangle triangle
15
- size, options = *self.get_shape_values(some_options)
16
+ options = get_shape_values(some_options)
17
+ size = options[:size]
16
18
  rot = options[:rotation]
17
19
  disp = 0.32 # could introduce a rule option?
18
20
  x0 = options[:x]
19
21
  y0 = options[:y]
20
22
  pts = Array.new(12)
21
- pts[0] = PVector.new(x0, y0 - size/Math.sqrt(3)) # A
22
- pts[1] = PVector.new(x0 - 0.5 * size, y0 + (Math.sqrt(3)*size)/6) # B
23
- pts[2] = PVector.new(x0 + 0.5 * size, y0 + (Math.sqrt(3)*size)/6) # C
24
- pts[3] = get_mid_point(pts[0], pts[1]) # Ab
25
- pts[4] = get_mid_point(pts[1], pts[2]) # Bc
26
- pts[5] = get_mid_point(pts[0], pts[2]) # Ca
27
- pts[6] = get_mid_point(pts[0], pts[3]) # Aba
28
- adjust_bezier(pts[6], PI/3, disp*size) # Aba
29
- pts[7] = get_mid_point(pts[3], pts[1]) # Abb
30
- adjust_bezier(pts[7], PI/3, -disp*size) # Abb
23
+ pts[0] = Vec2D.new(x0, y0 - size / SQRT3) # A
24
+ pts[1] = Vec2D.new(x0 - 0.5 * size, y0 + SQRT3 * size / 6) # B
25
+ pts[2] = Vec2D.new(x0 + 0.5 * size, y0 + SQRT3 * size / 6) # C
26
+ pts[3] = get_mid_point(pts[0], pts[1]) # Ab
27
+ pts[4] = get_mid_point(pts[1], pts[2]) # Bc
28
+ pts[5] = get_mid_point(pts[0], pts[2]) # Ca
29
+ pts[6] = get_mid_point(pts[0], pts[3]) # Aba
30
+ pts[6] += adjust_bezier(PI/3, disp * size) # Aba
31
+ pts[7] = get_mid_point(pts[3], pts[1]) # Abb
32
+ pts[7] += adjust_bezier(PI/3, -disp * size) # Abb
31
33
  pts[8] = get_mid_point(pts[1], pts[4])
32
- adjust_bezier(pts[8], PI/2, -disp*size)
34
+ pts[8] += adjust_bezier(PI/2, -disp * size)
33
35
  pts[9] = get_mid_point(pts[4], pts[2])
34
- adjust_bezier(pts[9], PI/2, disp*size)
36
+ pts[9] += adjust_bezier(PI/2, disp * size)
35
37
  pts[10] = get_mid_point(pts[2], pts[5])
36
- adjust_bezier(pts[10], -PI/3, -disp*size)
38
+ pts[10] += adjust_bezier(-PI/3, -disp * size)
37
39
  pts[11] = get_mid_point(pts[5], pts[0])
38
- adjust_bezier(pts[11], -PI/3, disp*size)
40
+ pts[11] += adjust_bezier(-PI/3, disp * size)
39
41
  rotate(rot) if rot
40
42
  begin_shape
41
43
  vertex(pts[0].x, pts[0].y)
@@ -45,22 +47,20 @@ def setup_the_tiles
45
47
  bezier_vertex(pts[4].x, pts[4].y, pts[9].x, pts[9].y, pts[2].x, pts[2].y)
46
48
  bezier_vertex(pts[2].x, pts[2].y, pts[10].x, pts[10].y, pts[5].x, pts[5].y)
47
49
  bezier_vertex(pts[5].x, pts[5].y, pts[11].x, pts[11].y, pts[0].x, pts[0].y)
48
- end_shape(CLOSE)
50
+ end_shape(CLOSE)
49
51
  rotate(-rot) if rot
50
52
  end
51
-
53
+
52
54
  private
53
- def adjust_bezier(base, theta, disp)
54
- base.add(PVector.new(Math.cos(theta)*disp, Math.sin(theta)*disp))
55
+ def adjust_bezier(theta, disp)
56
+ Vec2D.new(Math.cos(theta) * disp, Math.sin(theta) * disp)
55
57
  end
56
-
58
+
57
59
  def get_mid_point(a, b)
58
- mid = PVector.add(a, b)
59
- mid.div(2)
60
- return mid
60
+ (a + b) / 2.0
61
61
  end
62
62
  end
63
-
63
+
64
64
  ########### End definition of custom terminal 'wavy_triangle' shape
65
65
  shape :tiles do
66
66
  20.times do |i|
@@ -72,10 +72,13 @@ def setup_the_tiles
72
72
  end
73
73
  end
74
74
 
75
- def setup
75
+ def settings
76
76
  size 1024, 720
77
+ end
78
+
79
+ def setup
80
+ sketch_title 'Alhambra Tiling'
77
81
  background 255
78
- smooth
79
82
  setup_the_tiles
80
83
  draw_it
81
84
  end
@@ -9,77 +9,81 @@ require 'cf3'
9
9
  def setup_the_barcode
10
10
  @barcode = ContextFree.define do
11
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)
12
+ class << self
13
+ define_method(:vbar) do |some_options|
14
+ options = self.get_shape_values(some_options)
15
+ size = options[:size]
15
16
  w = some_options[:w]|| 0.1 # default vbar width is 0.1
16
- ratio = w * size
17
+ ratio = w * size
17
18
  rot = options[:rotation]
18
19
  rect_mode(CENTER)
19
- rotate(rot) if rot
20
+ rotate(rot) if rot
20
21
  rect(-0.5 * ratio, -0.4 * size, 0.5 * ratio, 0.6 * size)
21
22
  rotate(-rot) if rot
22
- end
23
+ end
23
24
  end
24
25
  ########### End definition of custom terminal 'vbar'
25
-
26
+
26
27
  shape :strip do
27
28
  2.times do
28
- end_bar x: 0.09
29
- end
29
+ end_bar x: 0.09
30
+ end
30
31
  4.times do
31
32
  five x: 0.04
32
33
  end
33
34
  2.times do
34
35
  end_bar x: 0.09
35
- end
36
+ end
36
37
  end
37
-
38
+
38
39
  shape :bar, 1 do # wide
39
40
  vbar size: 0.8, w: 0.08, brightness: -1
40
41
  end
41
-
42
+
42
43
  shape :bar, 1 do # wide
43
44
  vbar size: 0.8, w: 0.06, brightness: -1
44
45
  end
45
-
46
+
46
47
  shape :bar, 1.6 do # narrow
47
48
  vbar size: 0.8, w: 0.02, brightness: -1
48
49
  end
49
-
50
+
50
51
  shape :bar, 1.6 do # narrow
51
52
  vbar size: 0.8, w: 0.03, brightness: -1
52
53
  end
53
-
54
+
54
55
  shape :end_bar, 1.6 do # narrow extra long
55
56
  vbar size: 1, w: 0.03, brightness: -1
56
57
  end
57
58
 
58
59
  shape :five do
59
60
  5.times do
60
- bar x: 0.06
61
- end
62
- end
61
+ bar x: 0.06
62
+ end
63
63
  end
64
64
  end
65
+ end
65
66
 
66
- def setup
67
+ def settings
67
68
  size 350, 200
69
+ end
70
+
71
+ def setup
72
+ sketch_title 'Bar Code'
68
73
  text_font(create_font("Dialog.plain", 24), 24)
69
74
  background 255, 255, 0
70
75
  draw_text
71
- smooth
72
76
  setup_the_barcode
73
77
  draw_it
74
78
  end
75
79
 
76
80
  def draw_it
77
- @barcode.render :strip, start_x: 0, start_y: height,
81
+ @barcode.render :strip, start_x: 0, start_y: height,
78
82
  size: height
79
83
  end
80
84
 
81
85
  def draw_text
82
- code = "23467"
86
+ code = "23467"
83
87
  fill 0
84
88
  text code, 40, 80
85
89
  end
@@ -1,10 +1,10 @@
1
1
  # city.rb after city.cfdg
2
2
 
3
- require 'cf3' # NB: requires ruby 1.9 for rand range
3
+ require 'cf3'
4
4
 
5
5
  def setup_the_city
6
6
  @city = ContextFree.define do
7
-
7
+
8
8
  shape :neighborhood do
9
9
  split do
10
10
  block x: -0.25, y: -0.25
@@ -16,29 +16,32 @@ def setup_the_city
16
16
  block x: -0.25, y: 0.25
17
17
  end
18
18
  end
19
-
19
+
20
20
  shape :block do
21
21
  buildings size: 0.85
22
22
  end
23
-
23
+
24
24
  shape :block, 5 do
25
25
  neighborhood size: 0.5, rotation: rand(-PI..PI), hue: rand(2), brightness: rand(0.75..1.75)
26
26
  end
27
-
27
+
28
28
  shape :block, 0.1 do
29
29
  # Do nothing
30
30
  end
31
-
31
+
32
32
  shape :buildings do
33
33
  square
34
34
  end
35
-
35
+
36
36
  end
37
37
  end
38
38
 
39
- def setup
39
+ def settings
40
40
  size 600, 600
41
- smooth
41
+ end
42
+
43
+ def setup
44
+ sketch_title 'City'
42
45
  setup_the_city
43
46
  @background = color 255, 255, 255
44
47
  draw_it
@@ -50,8 +53,8 @@ end
50
53
 
51
54
  def draw_it
52
55
  background @background
53
- @city.render :neighborhood,
54
- start_x: width/2, start_y: height/2,
56
+ @city.render :neighborhood,
57
+ start_x: width/2, start_y: height/2,
55
58
  size: height/2.5, color: [0.1, 0.1, 0.1]
56
59
  end
57
60
 
@@ -4,7 +4,7 @@ require 'cf3'
4
4
 
5
5
  def setup_the_creature
6
6
  @creature = ContextFree.define do
7
-
7
+
8
8
  shape :start do
9
9
  rot = 0
10
10
  split do
@@ -16,26 +16,30 @@ def setup_the_creature
16
16
  legs rotation: 360
17
17
  end
18
18
  end
19
-
19
+
20
20
  shape :legs do
21
21
  circle hue: 54, saturation: 0.5, brightness: 1.0
22
22
  legs y: 0.1, size: 0.96
23
23
  end
24
-
24
+
25
25
  shape :legs, 0.01 do
26
26
  circle
27
27
  split do
28
- legs rotation: 3
28
+ legs rotation: 3
29
29
  rewind
30
30
  legs rotation: -3
31
31
  end
32
32
  end
33
-
33
+
34
34
  end
35
35
  end
36
36
 
37
- def setup
37
+ def settings
38
38
  size 600, 600
39
+ end
40
+
41
+ def setup
42
+ sketch_title 'Creature'
39
43
  setup_the_creature
40
44
  no_stroke
41
45
  end