ruby-processing 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. data/CHANGELOG +12 -0
  2. data/lib/ruby-processing.rb +2 -1
  3. data/lib/ruby-processing/app.rb +7 -5
  4. data/lib/ruby-processing/exporters/creator.rb +7 -4
  5. data/lib/ruby-processing/helpers/numeric.rb +11 -0
  6. data/lib/ruby-processing/helpers/string.rb +8 -0
  7. data/lib/ruby-processing/runner.rb +11 -10
  8. data/lib/ruby-processing/runners/watch.rb +33 -0
  9. data/samples/bezier_playground.rb +243 -0
  10. data/samples/flight_patterns.rb +1 -1
  11. data/samples/learning_processing/chapter_16/01_display_video.rb +1 -1
  12. data/samples/learning_processing/chapter_16/02_manipulate_video_image.rb +1 -1
  13. data/samples/processing_app/basics/arrays/array.rb +41 -0
  14. data/samples/processing_app/basics/arrays/array_2d.rb +38 -0
  15. data/samples/processing_app/basics/arrays/array_objects.rb +67 -0
  16. data/samples/processing_app/basics/color/brightness.rb +30 -0
  17. data/samples/processing_app/basics/color/color_wheel.rb +97 -0
  18. data/samples/processing_app/basics/color/creating.rb +37 -0
  19. data/samples/processing_app/basics/color/hue.rb +29 -0
  20. data/samples/processing_app/basics/color/linear_gradient.rb +47 -0
  21. data/samples/processing_app/basics/color/radial_gradient.rb +52 -0
  22. data/samples/processing_app/basics/color/reading/data/cait.jpg +0 -0
  23. data/samples/processing_app/basics/color/reading/reading.rb +43 -0
  24. data/samples/processing_app/basics/color/relativity.rb +38 -0
  25. data/samples/processing_app/basics/color/saturation.rb +35 -0
  26. data/samples/processing_app/basics/color/wave_gradient.rb +45 -0
  27. data/samples/processing_app/basics/control/conditionals1.rb +51 -0
  28. data/samples/processing_app/basics/control/conditionals2.rb +44 -0
  29. data/samples/processing_app/basics/control/embedded_iteration.rb +42 -0
  30. data/samples/processing_app/basics/control/iteration.rb +61 -0
  31. data/samples/processing_app/basics/control/logical_operators.rb +59 -0
  32. data/samples/processing_app/basics/data/characters_strings/characters_strings.rb +87 -0
  33. data/samples/processing_app/basics/data/characters_strings/data/Eureka-90.vlw +0 -0
  34. data/samples/processing_app/basics/data/characters_strings/data/rathausFrog.jpg +0 -0
  35. data/samples/processing_app/basics/data/datatype_conversion.rb +45 -0
  36. data/samples/processing_app/basics/data/integers_floats.rb +34 -0
  37. data/samples/processing_app/basics/data/true_false.rb +37 -0
  38. data/samples/processing_app/basics/data/variable_scope.rb +80 -0
  39. data/samples/processing_app/basics/data/variables.rb +40 -0
  40. data/samples/processing_app/basics/form/bezier.rb +23 -0
  41. data/samples/processing_app/basics/form/bezier_ellipse.rb +110 -0
  42. data/samples/processing_app/basics/form/pie_chart.rb +31 -0
  43. data/samples/processing_app/basics/form/points_lines.rb +37 -0
  44. data/samples/processing_app/basics/form/shape_primitives.rb +25 -0
  45. data/samples/processing_app/basics/form/triangle_strip.rb +43 -0
  46. data/samples/processing_app/basics/form/vertices.rb +51 -0
  47. data/samples/processing_app/basics/image/alphamask.rb +23 -0
  48. data/samples/processing_app/basics/image/background_image.rb +30 -0
  49. data/samples/processing_app/basics/image/create_image.rb +23 -0
  50. data/samples/processing_app/basics/image/data/construct.jpg +0 -0
  51. data/samples/processing_app/basics/image/data/eames.jpg +0 -0
  52. data/samples/processing_app/basics/image/data/jelly.jpg +0 -0
  53. data/samples/processing_app/basics/image/data/mask.jpg +0 -0
  54. data/samples/processing_app/basics/image/data/milan_rubbish.jpg +0 -0
  55. data/samples/processing_app/basics/image/data/teddy.gif +0 -0
  56. data/samples/processing_app/basics/image/data/test.jpg +0 -0
  57. data/samples/processing_app/basics/image/data/wash.jpg +0 -0
  58. data/samples/processing_app/basics/image/load_display_image.rb +25 -0
  59. data/samples/processing_app/basics/image/pointillism.rb +30 -0
  60. data/samples/processing_app/basics/image/request_image.rb +71 -0
  61. data/samples/processing_app/basics/image/sprite.rb +38 -0
  62. data/samples/processing_app/basics/image/transparency.rb +27 -0
  63. data/samples/processing_app/basics/input/clock.rb +46 -0
  64. data/samples/processing_app/basics/input/constrain.rb +39 -0
  65. data/samples/processing_app/basics/input/easing.rb +33 -0
  66. data/samples/processing_app/basics/input/keyboard.rb +36 -0
  67. data/samples/processing_app/basics/input/keyboard_2.rb +45 -0
  68. data/samples/processing_app/basics/input/keyboard_functions.rb +87 -0
  69. data/samples/processing_app/basics/input/milliseconds.rb +25 -0
  70. data/samples/processing_app/basics/input/mouse_1d.rb +34 -0
  71. data/samples/processing_app/basics/input/mouse_2d.rb +25 -0
  72. data/samples/processing_app/basics/input/mouse_functions.rb +73 -0
  73. data/samples/processing_app/basics/input/mouse_press.rb +21 -0
  74. data/samples/processing_app/basics/input/mouse_signals.rb +45 -0
  75. data/samples/processing_app/basics/input/storing_input.rb +39 -0
  76. data/samples/processing_app/basics/math/additive_wave.rb +66 -0
  77. data/samples/processing_app/basics/math/arctangent.rb +54 -0
  78. data/samples/processing_app/topics/simulate/chain.rb +82 -0
  79. data/samples/processing_app/topics/simulate/multiple_particle_systems.rb +166 -0
  80. data/samples/processing_app/topics/simulate/simple_particle_system.rb +113 -0
  81. data/samples/processing_app/topics/simulate/spring.rb +85 -0
  82. data/samples/processing_app/topics/simulate/springs.rb +125 -0
  83. metadata +93 -2
@@ -5,7 +5,7 @@ require 'ruby-processing'
5
5
 
6
6
  class FlightPatterns < Processing::App
7
7
  load_libraries 'boids', 'opengl'
8
- include_package "processing.opengl" if library_loaded? "opengl"
8
+ import "processing.opengl" if library_loaded? "opengl"
9
9
 
10
10
  def setup
11
11
  library_loaded?(:opengl) ? setup_opengl : render_mode(P3D)
@@ -5,7 +5,7 @@ class CaptureVideoSketch < Processing::App
5
5
  # Step 1. Import the video library
6
6
  load_library "video"
7
7
  # We need the video classes to be included here.
8
- include_package "processing.video"
8
+ import "processing.video"
9
9
 
10
10
  def setup
11
11
  # Step 2. Declare a Capture object
@@ -3,7 +3,7 @@ require 'ruby-processing'
3
3
  class ManipulateVideoImageSketch < Processing::App
4
4
 
5
5
  load_library "video"
6
- include_package "processing.video"
6
+ import "processing.video"
7
7
 
8
8
  def setup
9
9
  @video = Capture.new(self, width, height, 30)
@@ -0,0 +1,41 @@
1
+ require 'ruby-processing'
2
+
3
+ # * An array is a list of data. Each piece of data in an array
4
+ # * is identified by an index number representing its position in
5
+ # * the array. Arrays are zero based, which means that the first
6
+ # * element in the array is [0], the second element is [1], and so on.
7
+ # * In this example, an array named "coswav" is created and
8
+ # * filled with the cosine values. This data is displayed three
9
+ # * separate ways on the screen.
10
+
11
+ class ArrayExample < Processing::App
12
+
13
+ def setup
14
+
15
+ coswave = []
16
+
17
+ 0.upto( width ) do |i|
18
+ amount = map i, 0, width, 0, PI
19
+ coswave[i] = cos( amount ).abs
20
+ end
21
+
22
+ 0.upto( width ) do |i|
23
+ stroke( coswave[i] * 255 )
24
+ line i, 0, i, height/3
25
+ end
26
+
27
+ 0.upto( width ) do |i|
28
+ stroke( coswave[i] * 255 / 4 )
29
+ line i, height/3, i, height/3*2
30
+ end
31
+
32
+ 0.upto( width ) do |i|
33
+ stroke( 255 - coswave[i] * 255 )
34
+ line i, height/3*2, i, height
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+
41
+ ArrayExample.new :title => "Array Example", :width => 200, :height => 200
@@ -0,0 +1,38 @@
1
+ require 'ruby-processing'
2
+
3
+ # * Demonstrates the syntax for creating a two-dimensional (2D) array.
4
+ # * Values in a 2D array are accessed through two index values.
5
+ # * 2D arrays are useful for storing images. In this example, each dot
6
+ # * is colored in relation to its distance from the center of the image.
7
+
8
+ class Array2d < Processing::App
9
+
10
+ def setup
11
+
12
+ distances = Array.new( width ) { Array.new( height ) } # [width][height]
13
+
14
+ max_distance = dist( width/2, height/2, width, height )
15
+
16
+ width.times do |x|
17
+ height.times do |y|
18
+ distance = dist( width/2, height/2, x, y )
19
+ distances[x][y] = distance / max_distance * 255
20
+ end
21
+ end
22
+
23
+ background 0
24
+
25
+ x = 0; while x < distances.length
26
+ y = 0; while y < distances[x].length
27
+ stroke distances[x][y]
28
+ point x, y
29
+ y += 2
30
+ end
31
+ x += 2
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ Array2d.new :title => "Array 2d", :width => 200, :height => 200
@@ -0,0 +1,67 @@
1
+ require 'ruby-processing'
2
+
3
+ # * Demonstrates the syntax for creating an array of custom objects.
4
+
5
+ class ArrayObjects < Processing::App
6
+
7
+ UNIT = 40
8
+
9
+ def setup
10
+
11
+ @num = width/UNIT ** 2
12
+ @mods = []
13
+
14
+ basis = (height/UNIT).to_i
15
+
16
+ basis.times do |i|
17
+ basis.times do |j|
18
+ @mods << CustomObject.new( j*UNIT, i*UNIT, UNIT/2, UNIT/2, random( 0.05, 0.8 ) )
19
+ end
20
+ end
21
+
22
+ background 176
23
+ no_stroke
24
+ end
25
+
26
+ def draw
27
+ stroke(second * 4)
28
+
29
+ @mods.each do |mod|
30
+ mod.update; mod.draw
31
+ end
32
+ end
33
+
34
+ # the custom object
35
+
36
+ class CustomObject
37
+
38
+ def initialize( mx, my, x, y, speed )
39
+ @mx, @my = my, mx # This is backwards because the Processing example is backwards.
40
+ @x, @y = x.to_i, y.to_i
41
+ @xdir, @ydir = 1, 1
42
+ @speed = speed
43
+ @size = UNIT
44
+ end
45
+
46
+ def update
47
+ @x += @speed * @xdir
48
+ if @x >= @size || @x <= 0
49
+ @xdir *= -1
50
+ @x += @xdir
51
+ @y += @ydir
52
+ end
53
+ if @y >= @size || @x <= 0
54
+ @ydir *= -1
55
+ @y += @ydir
56
+ end
57
+ end
58
+
59
+ def draw
60
+ $app.point( @mx + @x - 1, @my + @y - 1 )
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+
67
+ ArrayObjects.new :title => "Array Objects", :width => 200, :height => 200
@@ -0,0 +1,30 @@
1
+ require 'ruby-processing'
2
+
3
+ # Brightness
4
+ # by Rusty Robison.
5
+ #
6
+ # Brightness is the relative lightness or darkness of a color.
7
+ # Move the cursor vertically over each bar to alter its brightness.
8
+
9
+ class Brightness < Processing::App
10
+
11
+ def setup
12
+ no_stroke
13
+ color_mode HSB, 360, height, height
14
+ @bar_width = 5
15
+ @brightness = Array.new(width/@bar_width, 0)
16
+ end
17
+
18
+ def draw
19
+ (width/@bar_width).times do |i|
20
+ n = i * @bar_width
21
+ range = (n..n+@bar_width)
22
+ @brightness[i] = mouse_y if range.include? mouse_x
23
+ fill n, height, @brightness[i]
24
+ rect n, 0, @bar_width, height
25
+ end
26
+ end
27
+
28
+ end
29
+
30
+ Brightness.new :title => "Brightness", :width => 200, :height => 200
@@ -0,0 +1,97 @@
1
+ require 'ruby-processing'
2
+
3
+ # Subtractive Color Wheel
4
+ # by Ira Greenberg.
5
+ #
6
+ # The primaries are red, yellow, and blue. The
7
+ # secondaries are green, purple, and orange. The
8
+ # tertiaries are yellow-orange, red-orange, red-purple,
9
+ # blue-purple, blue-green, and yellow-green.
10
+ #
11
+ # Create a shade or tint of the
12
+ # subtractive color wheel using
13
+ # SHADE or TINT parameters.
14
+
15
+ class ColorWheel < Processing::App
16
+
17
+ def setup
18
+ background 127
19
+ smooth
20
+ ellipse_mode RADIUS
21
+ no_stroke
22
+
23
+ @style = :tint # use :shade or :tint
24
+ create_wheel width/2, height/2, @style
25
+ end
26
+
27
+
28
+ def create_wheel( x, y, value_shift )
29
+
30
+ segs = 12
31
+ steps = 6
32
+ rot_adjust = (360.0 / segs / 2.0) * PI / 180
33
+ radius = 95.0
34
+ seg_width = radius / steps
35
+ interval = TWO_PI / segs
36
+
37
+ case value_shift
38
+ when :shade
39
+ steps.times do |j|
40
+ cols = [
41
+ color(255-(255/steps)*j, 255-(255/steps)*j, 0),
42
+ color(255-(255/steps)*j, (255/1.5)-((255/1.5)/steps)*j, 0),
43
+ color(255-(255/steps)*j, (255/2)-((255/2)/steps)*j, 0),
44
+ color(255-(255/steps)*j, (255/2.5)-((255/2.5)/steps)*j, 0),
45
+ color(255-(255/steps)*j, 0, 0),
46
+ color(255-(255/steps)*j, 0, (255/2)-((255/2)/steps)*j),
47
+ color(255-(255/steps)*j, 0, 255-(255/steps)*j),
48
+ color((255/2)-((255/2)/steps)*j, 0, 255-(255/steps)*j),
49
+ color(0, 0, 255-(255/steps)*j),
50
+ color(0, 255-(255/steps)*j, (255/2.5)-((255/2.5)/steps)*j),
51
+ color(0, 255-(255/steps)*j, 0),
52
+ color((255/2)-((255/2)/steps)*j, 255-(255/steps)*j, 0)
53
+ ]
54
+ segs.times do |i|
55
+ fill cols[i]
56
+ arc x, y, radius, radius, interval*i+rot_adjust, interval*(i+1)+rot_adjust
57
+ end
58
+ radius -= seg_width
59
+ end
60
+
61
+ when :tint
62
+ steps.times do |j|
63
+ cols = [
64
+ color((255/steps)*j, (255/steps)*j, 0),
65
+ color((255/steps)*j, ((255/1.5)/steps)*j, 0),
66
+ color((255/steps)*j, ((255/2)/steps)*j, 0),
67
+ color((255/steps)*j, ((255/2.5)/steps)*j, 0),
68
+ color((255/steps)*j, 0, 0),
69
+ color((255/steps)*j, 0, ((255/2)/steps)*j),
70
+ color((255/steps)*j, 0, (255/steps)*j),
71
+ color(((255/2)/steps)*j, 0, (255/steps)*j),
72
+ color(0, 0, (255/steps)*j),
73
+ color(0, (255/steps)*j, ((255/2.5)/steps)*j),
74
+ color(0, (255/steps)*j, 0),
75
+ color(((255/2)/steps)*j, (255/steps)*j, 0)
76
+ ]
77
+ segs.times do |i|
78
+ fill cols[i]
79
+ arc x, y, radius, radius, interval*i+rot_adjust, interval*(i+1)+rot_adjust
80
+ end
81
+ radius -= seg_width
82
+ end
83
+ end
84
+ end
85
+
86
+ def draw
87
+ # Empty draw method. Things only change when you click.
88
+ end
89
+
90
+ def mouse_pressed
91
+ @style = @style == :tint ? :shade : :tint
92
+ create_wheel width/2, height/2, @style
93
+ end
94
+
95
+ end
96
+
97
+ ColorWheel.new :title => "Color Wheel", :width => 200, :height => 200
@@ -0,0 +1,37 @@
1
+ require 'ruby-processing'
2
+
3
+ # Creating Colors (Homage to Albers).
4
+ #
5
+ # Creating variables for colors that may be referred to
6
+ # in the program by their name, rather than a number.
7
+
8
+ class Creating < Processing::App
9
+
10
+ def setup
11
+
12
+ redder = color 204, 102, 0
13
+ yellower = color 204, 153, 0
14
+ orangish = color 153, 51, 0
15
+
16
+ # These statements are equivalent to the statements above.
17
+ # Programmers may use the format they prefer.
18
+
19
+ # redder = 0xFFCC6600
20
+ # yellower = 0xFFCC9900
21
+ # orangish = 0xFF993300
22
+
23
+ no_stroke
24
+
25
+ fill orangish
26
+ rect 0, 0, 200, 200
27
+
28
+ fill yellower
29
+ rect 40, 60, 120, 120
30
+
31
+ fill redder
32
+ rect 60, 90, 80, 80
33
+ end
34
+
35
+ end
36
+
37
+ Creating.new :title => "Creating", :width => 200, :height => 200
@@ -0,0 +1,29 @@
1
+ require 'ruby-processing'
2
+
3
+ # Hue is the color reflected from or transmitted through an object
4
+ # and is typically referred to as the name of the color (red, blue, yellow, etc.)
5
+ # Move the cursor vertically over each bar to alter its hue.
6
+
7
+ class Hue < Processing::App
8
+
9
+ def setup
10
+ @bar_width = 5
11
+ @hue = Array.new( (width/@bar_width), 0 )
12
+
13
+ color_mode HSB, 360, height, height
14
+ no_stroke
15
+ end
16
+
17
+ def draw
18
+ (width/@bar_width).times do |i|
19
+ n = i * @bar_width
20
+ range = (n..n+@bar_width)
21
+ @hue[i] = mouse_y if range.include?(mouse_x)
22
+ fill @hue[i], height/1.2, height/1.2
23
+ rect n, 0, @bar_width, height
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ Hue.new :title => "Hue", :width => 200, :height => 200
@@ -0,0 +1,47 @@
1
+ require 'ruby-processing'
2
+
3
+ # Simple Linear Gradient
4
+ # by Ira Greenberg.
5
+ #
6
+ # Using the convenient red(), green()
7
+ # and blue() component functions,
8
+ # generate some linear gradients.
9
+
10
+ class LinearGradient < Processing::App
11
+
12
+ def setup
13
+ b1 = color 190
14
+ b2 = color 20
15
+ set_gradient 0, 0, width.to_f, height.to_f, b1, b2, :y_axis
16
+
17
+ c1 = color 255, 120, 0
18
+ c2 = color 10, 45, 255
19
+ c3 = color 10, 255, 15
20
+ c4 = color 125, 2, 140
21
+ c5 = color 255, 255, 0
22
+ c6 = color 25, 255, 200
23
+ set_gradient 25, 25, 75, 75, c1, c2, true
24
+ set_gradient 100, 25, 75, 75, c3, c4, false
25
+ set_gradient 25, 100, 75, 75, c2, c5, false
26
+ set_gradient 100, 100, 75, 75, c4, c6, true
27
+ end
28
+
29
+ def set_gradient( x, y, w, h, c1, c2, vertical )
30
+ delta_r = red(c2) - red(c1)
31
+ delta_g = green(c2) - green(c1)
32
+ delta_b = blue(c2) - blue(c1)
33
+
34
+ x.upto( x+w ) do |i|
35
+ y.upto( y+w ) do |j|
36
+ c = color(red(c1)+(j-y)*(delta_r/h),
37
+ green(c1)+(j-y)*(delta_g/h),
38
+ blue(c1)+(j-y)*(delta_b/h) )
39
+
40
+ vertical ? set(i, j, c) : set(j, i, c)
41
+ end
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ LinearGradient.new :title => "Linear Gradient", :width => 200, :height => 200
@@ -0,0 +1,52 @@
1
+ require 'ruby-processing'
2
+
3
+ # Simple Radial Gradient
4
+ # by Ira Greenberg.
5
+ #
6
+ # Using the convenient red(), green()
7
+ # and blue() component functions,
8
+ # generate an array of radial gradients.
9
+
10
+ class RadialGradient < Processing::App
11
+
12
+ def setup
13
+ background 0
14
+ smooth
15
+ no_fill
16
+ stroke_width 1.8
17
+
18
+ columns = 4
19
+ radius = (width / columns) / 2
20
+ diameter = radius * 2
21
+
22
+ (width / diameter).times do |left|
23
+ (height / diameter).times do |top|
24
+ create_gradient(
25
+ radius+left*diameter, radius+top*diameter, radius, random_color, random_color
26
+ )
27
+ end
28
+ end
29
+ end
30
+
31
+ def random_color
32
+ color(rand(255), rand(255), rand(255))
33
+ end
34
+
35
+ def create_gradient( x, y, radius, c1, c2 )
36
+
37
+ delta_r = red(c2) - red(c1)
38
+ delta_g = green(c2) - green(c1)
39
+ delta_b = blue(c2) - blue(c1)
40
+
41
+ radius.times do |r|
42
+ c = color(red(c1) + r * (delta_r / radius),
43
+ green(c1) + r * (delta_g / radius),
44
+ blue(c1) + r * (delta_b / radius))
45
+ stroke c
46
+ ellipse x, y, r*2, r*2
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ RadialGradient.new :title => "Radial Gradient", :width => 200, :height => 200