ruby-processing 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +12 -0
- data/README +3 -0
- data/lib/core/core.jar +0 -0
- data/lib/core/jruby-complete.jar +0 -0
- data/lib/patches/JRubyApplet.diff +24 -0
- data/lib/patches/PATCHES.txt +3 -0
- data/lib/patches/PApplet.diff +27 -0
- data/lib/ruby-processing.rb +4 -1
- data/lib/ruby-processing/app.rb +121 -75
- data/lib/ruby-processing/exporters/applet_exporter.rb +1 -1
- data/lib/ruby-processing/exporters/base_exporter.rb +21 -16
- data/lib/ruby-processing/exporters/creator.rb +12 -6
- data/lib/ruby-processing/runner.rb +2 -2
- data/lib/ruby-processing/runners/base.rb +59 -0
- data/lib/ruby-processing/runners/live.rb +2 -2
- data/lib/ruby-processing/runners/run.rb +2 -1
- data/lib/ruby-processing/runners/watch.rb +47 -11
- data/lib/templates/applet/index.html.erb +6 -6
- data/lib/templates/create/bare_sketch.rb.erb +7 -0
- data/lib/templates/create/blank_sketch.rb.erb +2 -2
- data/library/control_panel/control_panel.rb +6 -2
- data/library/opengl/library/export.txt +0 -0
- data/library/opengl/library/opengl.jar +0 -0
- data/library/pdf/library/itext.jar +0 -0
- data/library/pdf/library/pdf.jar +0 -0
- data/library/pdf/notes.txt +3 -4
- data/samples/animator.rb +35 -39
- data/samples/bezier_playground.rb +2 -4
- data/samples/fern.rb +34 -42
- data/samples/flight_patterns.rb +48 -54
- data/samples/full_screen.rb +20 -25
- data/samples/getting_started.rb +19 -39
- data/samples/learning_processing/chapter_01/1_stroke_and_fill.rb +14 -30
- data/samples/learning_processing/chapter_01/2_nofill.rb +18 -23
- data/samples/learning_processing/chapter_01/3_rgb_color.rb +16 -28
- data/samples/learning_processing/chapter_01/4_alpha_transparency.rb +7 -1
- data/samples/learning_processing/chapter_01/5_zoog.rb +20 -33
- data/samples/learning_processing/chapter_02/1_zoog_again.rb +3 -1
- data/samples/learning_processing/chapter_03/6_interactive_zoog.rb +34 -42
- data/samples/learning_processing/chapter_16/03_adjust_video_brightness.rb +49 -0
- data/samples/learning_processing/chapter_17/01_simple_displaying_text.rb +14 -0
- data/samples/learning_processing/chapter_17/02_text_align.rb +21 -0
- data/samples/learning_processing/chapter_17/03_scrolling_headlines.rb +35 -0
- data/samples/learning_processing/chapter_17/04_text_mirror.rb +68 -0
- data/samples/learning_processing/chapter_17/05_rotating_text.rb +22 -0
- data/samples/learning_processing/chapter_17/06_text_breaking_up.rb +73 -0
- data/samples/learning_processing/chapter_17/07_boxes_along_a_curve.rb +49 -0
- data/samples/learning_processing/chapter_17/08_characters_along_a_curve.rb +51 -0
- data/samples/learning_processing/chapter_17/data/ArialMT-16.vlw +0 -0
- data/samples/learning_processing/chapter_17/data/Courier-Bold-20.vlw +0 -0
- data/samples/learning_processing/chapter_18/01_user_input.rb +39 -0
- data/samples/learning_processing/chapter_18/02_graphing_comma_separated_numbers_from_a_text_file.rb +28 -0
- data/samples/learning_processing/chapter_18/03_creating_object_from_a_text_file.rb +64 -0
- data/samples/learning_processing/chapter_18/data/data-1.txt +1 -0
- data/samples/learning_processing/chapter_18/data/data-2.txt +10 -0
- data/samples/orbit.rb +45 -0
- data/samples/processing_app/basics/image/pointillism.rb +1 -1
- data/samples/processing_app/topics/effects/lens.rb +1 -0
- metadata +30 -13
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL$ImageCache.class +0 -0
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL$TessCallback.class +0 -0
- data/library/opengl/bin/processing/opengl/PGraphicsOpenGL.class +0 -0
- data/library/pdf/bin/processing/pdf/PGraphicsPDF.class +0 -0
@@ -1,5 +1,9 @@
|
|
1
|
-
|
1
|
+
# This sketch introduces the fuller version of a Ruby-Processing sketch,
|
2
|
+
# and demonstrates what's really going on behind the scenes when you make
|
3
|
+
# one of the simpler sketches, with just a setup method.
|
2
4
|
|
5
|
+
# A sketch is a class that inherits from the Processing::App, which works
|
6
|
+
# very much along the lines of a PApplet in Processing.
|
3
7
|
class AlphaTransparency < Processing::App
|
4
8
|
|
5
9
|
def setup
|
@@ -33,4 +37,6 @@ class AlphaTransparency < Processing::App
|
|
33
37
|
|
34
38
|
end
|
35
39
|
|
40
|
+
# After defining your sketch, you create one.
|
41
|
+
# If you prefer, you may set the width, height, and title as you create it.
|
36
42
|
AlphaTransparency.new :title => "Alpha Transparency", :width => 200, :height => 200
|
@@ -1,37 +1,24 @@
|
|
1
|
-
|
1
|
+
size 200, 200
|
2
|
+
background 255
|
3
|
+
smooth
|
4
|
+
ellipse_mode CENTER
|
5
|
+
rect_mode CENTER
|
2
6
|
|
3
|
-
|
7
|
+
# Body
|
8
|
+
stroke 0
|
9
|
+
fill 150
|
10
|
+
rect 100, 100, 20, 100
|
4
11
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
ellipse_mode CENTER
|
9
|
-
rect_mode CENTER
|
12
|
+
# Head
|
13
|
+
fill 255
|
14
|
+
ellipse 100, 70, 60, 60
|
10
15
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
16
|
+
# Eyes
|
17
|
+
fill 0
|
18
|
+
ellipse 81, 70, 16, 32
|
19
|
+
ellipse 119, 70, 16, 32
|
15
20
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
# Eyes
|
21
|
-
fill 0
|
22
|
-
ellipse 81, 70, 16, 32
|
23
|
-
ellipse 119, 70, 16, 32
|
24
|
-
|
25
|
-
# Legs
|
26
|
-
stroke 0
|
27
|
-
line 90, 150, 80, 160
|
28
|
-
line 110, 150, 120, 160
|
29
|
-
end
|
30
|
-
|
31
|
-
def draw
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
Zoog.new :title => "Zoog", :width => 200, :height => 200
|
21
|
+
# Legs
|
22
|
+
stroke 0
|
23
|
+
line 90, 150, 80, 160
|
24
|
+
line 110, 150, 120, 160
|
@@ -1,50 +1,42 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
def setup
|
2
|
+
smooth
|
3
|
+
# The frame rate (like a movie) is set to 30 frames per second
|
4
|
+
frame_rate 30
|
5
|
+
end
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
frame_rate 30
|
9
|
-
end
|
7
|
+
def draw
|
8
|
+
# draw a white background
|
9
|
+
background 255
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
# Set ellipses and rects to CENTER mode
|
16
|
-
ellipse_mode CENTER
|
17
|
-
rect_mode CENTER
|
11
|
+
# Set ellipses and rects to CENTER mode
|
12
|
+
ellipse_mode CENTER
|
13
|
+
rect_mode CENTER
|
18
14
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
# Draw Zoog's body
|
16
|
+
stroke 0
|
17
|
+
fill 150
|
18
|
+
rect mouse_x, mouse_y, 20, 100
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
20
|
+
# Draw Zoog's head
|
21
|
+
stroke 0
|
22
|
+
fill 255
|
23
|
+
ellipse mouse_x, mouse_y - 30, 60, 60
|
28
24
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
25
|
+
# Draw Zoog's eyes
|
26
|
+
# The eye color is determined by mouse location.
|
27
|
+
fill mouse_x, 0, mouse_y
|
28
|
+
ellipse mouse_x - 19, mouse_y - 30, 16, 32
|
29
|
+
ellipse mouse_x + 19, mouse_y - 30, 16, 32
|
34
30
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def mouse_pressed
|
43
|
-
# In Ruby, you can call 'puts' to print to the console.
|
44
|
-
# 'print' also works (but doesn't make a new line).
|
45
|
-
puts 'Take me to your leader!'
|
46
|
-
end
|
47
|
-
|
31
|
+
# Draw Zoog's legs
|
32
|
+
stroke 0
|
33
|
+
# The legs are drawn according to where the mouse is now and where it used to be.
|
34
|
+
line mouse_x - 10, mouse_y + 50, pmouse_x - 10, pmouse_y + 60
|
35
|
+
line mouse_x + 10, mouse_y + 50, pmouse_x + 10, pmouse_y + 60
|
48
36
|
end
|
49
37
|
|
50
|
-
|
38
|
+
def mouse_pressed
|
39
|
+
# In Ruby, you can call 'puts' to print to the console.
|
40
|
+
# 'print' also works (but doesn't make a new line).
|
41
|
+
puts 'Take me to your leader!'
|
42
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# Example 16-3: Adjust video brightness
|
2
|
+
require 'ruby-processing'
|
3
|
+
|
4
|
+
class AdjustVideoBrightness < Processing::App
|
5
|
+
load_library "video"
|
6
|
+
import "processing.video"
|
7
|
+
|
8
|
+
def setup
|
9
|
+
size 240, 180, P3D
|
10
|
+
|
11
|
+
# Initialize Capture object via Constructor
|
12
|
+
# video is 320 x 240, @15 fps
|
13
|
+
@video = Capture.new self, 240, 180, 15
|
14
|
+
background 0
|
15
|
+
end
|
16
|
+
|
17
|
+
def draw
|
18
|
+
# Check to see if a new frame is available
|
19
|
+
# If so, read it.
|
20
|
+
@video.read if @video.available?
|
21
|
+
|
22
|
+
load_pixels
|
23
|
+
@video.load_pixels
|
24
|
+
pixs = @video.pixels
|
25
|
+
mx, my = mouse_x, mouse_y
|
26
|
+
max_dist = 100
|
27
|
+
vid_width, vid_height = @video.width, @video.height
|
28
|
+
|
29
|
+
vid_width.times do |x|
|
30
|
+
vid_height.times do |y|
|
31
|
+
# Calculate the 1D location from a 2D grid
|
32
|
+
loc = x + y * vid_width
|
33
|
+
pix = pixs[loc]
|
34
|
+
|
35
|
+
# Calculate an amount to change brightness based on proximity to the mouse
|
36
|
+
d = dist(x, y, mx, my)
|
37
|
+
fudge = (max_dist - d) / max_dist
|
38
|
+
r, g, b = red(pix) * fudge, green(pix) * fudge, blue(pix) * fudge
|
39
|
+
|
40
|
+
# Make a new color and set pixel in the window
|
41
|
+
pixels[loc] = color(r, g, b)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
update_pixels
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
AdjustVideoBrightness.new :title => "Adjust Video Brightness"
|
@@ -0,0 +1,14 @@
|
|
1
|
+
def setup
|
2
|
+
size 200, 200
|
3
|
+
# Load Font
|
4
|
+
@font = loadFont "ArialMT-16.vlw"
|
5
|
+
end
|
6
|
+
|
7
|
+
def draw
|
8
|
+
background 255
|
9
|
+
text_font @font, 16 # Specify font to be used
|
10
|
+
fill 0 # Specify font color
|
11
|
+
|
12
|
+
# Display Text
|
13
|
+
text "Mmmmm ... Strings ..." , 10, 100
|
14
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
def setup
|
2
|
+
size 400, 200
|
3
|
+
@font = create_font "Arial", 16, true
|
4
|
+
end
|
5
|
+
|
6
|
+
def draw
|
7
|
+
background 255
|
8
|
+
stroke 175
|
9
|
+
line width/2, 0, width/2, height
|
10
|
+
text_font @font
|
11
|
+
fill 0
|
12
|
+
|
13
|
+
# text_align sets the alignment for displaying text.
|
14
|
+
# It takes one argument: CENTER, LEFT, or RIGHT.
|
15
|
+
text_align CENTER
|
16
|
+
text "This text is centered.", width / 2, 60
|
17
|
+
text_align LEFT
|
18
|
+
text "This text is left aligned.", width/2, 100
|
19
|
+
text_align RIGHT
|
20
|
+
text "This text is right aligned.", width / 2, 140
|
21
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
HEADLINES = "Processing downloads break downloading record.",
|
2
|
+
"New study shows computer programming lowers cholesterol."
|
3
|
+
|
4
|
+
def setup
|
5
|
+
size 400, 200
|
6
|
+
@f = create_font "Arial" ,16, true
|
7
|
+
@x = width
|
8
|
+
@index = 0
|
9
|
+
end
|
10
|
+
|
11
|
+
def draw
|
12
|
+
background 255
|
13
|
+
fill 0
|
14
|
+
|
15
|
+
# Display headline at x location
|
16
|
+
text_font @f, 16
|
17
|
+
text_align LEFT
|
18
|
+
|
19
|
+
# A specific string from the array is displayed according to the value
|
20
|
+
# of the "index" variable.
|
21
|
+
text HEADLINES[@index], @x, 180
|
22
|
+
|
23
|
+
# Decrement x
|
24
|
+
@x = @x - 3
|
25
|
+
|
26
|
+
# If x is less than the negative width, then it is off the screen
|
27
|
+
# text_width is used to calculate the width of the current string.
|
28
|
+
w = text_width(HEADLINES[@index])
|
29
|
+
if (@x < -w)
|
30
|
+
@x = width
|
31
|
+
# @index is incremented when the current string has left
|
32
|
+
# the screen in order to display a new string.
|
33
|
+
@index = (@index + 1) % HEADLINES.length
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# This example demonstrates how to use the video library. You'll need a
|
2
|
+
# video camera hooked in to your computer.
|
3
|
+
|
4
|
+
class TextMirror < Processing::App
|
5
|
+
load_library "video"
|
6
|
+
import "processing.video"
|
7
|
+
|
8
|
+
# Size of each cell in the grid, ratio of window size to video size
|
9
|
+
VIDEOSCALE = 14
|
10
|
+
|
11
|
+
# The source text used in the mosaic pattern.
|
12
|
+
# A longer String might produce more interesting results.
|
13
|
+
CHARS = "thetextmirror"
|
14
|
+
|
15
|
+
def setup
|
16
|
+
size 640, 480
|
17
|
+
smooth
|
18
|
+
# Set up columns and rows
|
19
|
+
@cols = width / VIDEOSCALE # Number of columns and...
|
20
|
+
@rows = height / VIDEOSCALE # rows in our system
|
21
|
+
@video = Capture.new(self, @cols, @rows, 15)
|
22
|
+
|
23
|
+
# Load the font
|
24
|
+
# Using a fixed-width font. In most fonts, individual characters have different widths.
|
25
|
+
# In a fixed-width font, all characters have the same width.
|
26
|
+
# This is useful here since we intend to display the letters one at a time spaced out evenly.
|
27
|
+
# See Section 17.7 for how to display text character by character with a nonfixed width font.
|
28
|
+
@f = load_font "Courier-Bold-20.vlw"
|
29
|
+
end
|
30
|
+
|
31
|
+
def draw
|
32
|
+
background 0
|
33
|
+
|
34
|
+
# Read image from the camera
|
35
|
+
@video.read if @video.available?
|
36
|
+
@video.load_pixels
|
37
|
+
|
38
|
+
# Use a variable to count through chars in String
|
39
|
+
charcount = 0
|
40
|
+
# Begin loop for rows
|
41
|
+
@rows.times do |j|
|
42
|
+
# Begin loop for columns
|
43
|
+
@cols.times do |i|
|
44
|
+
|
45
|
+
# Where are we, pixel-wise?
|
46
|
+
x = i * VIDEOSCALE
|
47
|
+
y = j * VIDEOSCALE
|
48
|
+
|
49
|
+
# Looking up the appropriate color in the pixel array
|
50
|
+
c = @video.pixels[i + j * @video.width]
|
51
|
+
|
52
|
+
# Displaying an individual character from the String instead of a rectangle
|
53
|
+
text_font @f
|
54
|
+
fill c
|
55
|
+
|
56
|
+
# One character from the source text is displayed colored accordingly to the pixel location.
|
57
|
+
# A counter variableâ charcountâ is used to walk through the source String one character at a time.
|
58
|
+
text CHARS[charcount].chr, x, y
|
59
|
+
|
60
|
+
# Go on to the next character
|
61
|
+
charcount = (charcount + 1) % CHARS.length
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
TextMirror.new :title => "Text Mirror"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
def setup
|
2
|
+
size 200, 200
|
3
|
+
@message = "this text is spinning"
|
4
|
+
@theta = 0.0
|
5
|
+
@f = create_font "Arial", 20, true
|
6
|
+
end
|
7
|
+
|
8
|
+
def draw
|
9
|
+
background 255
|
10
|
+
fill 0
|
11
|
+
text_font @f # Set the font
|
12
|
+
translate width / 2, height / 2 # Translate to the center
|
13
|
+
rotate @theta # Rotate by theta
|
14
|
+
text_align CENTER
|
15
|
+
|
16
|
+
# The text is center aligned and displayed at 0,0) after translating and rotating.
|
17
|
+
# See Chapter 14 or a review of translation and rotation.
|
18
|
+
text @message, 0, 0
|
19
|
+
|
20
|
+
# Increase rotation
|
21
|
+
@theta += 0.05;
|
22
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'ruby-processing'
|
2
|
+
|
3
|
+
class TextBreakingUp < Processing::App
|
4
|
+
|
5
|
+
def setup
|
6
|
+
size 260, 200
|
7
|
+
fill 0
|
8
|
+
text_align LEFT
|
9
|
+
text_font create_font("Arial", 20, true)
|
10
|
+
@message = "click mouse to shake it up"
|
11
|
+
|
12
|
+
# Create the array
|
13
|
+
@letters = []
|
14
|
+
|
15
|
+
# Initialize Letters at the correct x location
|
16
|
+
x = 16
|
17
|
+
@message.each do |letter|
|
18
|
+
# Letter objects are initialized with their location within
|
19
|
+
# the String as well as what character they should display.
|
20
|
+
@letters << Letter.new(x, 100, letter)
|
21
|
+
x += text_width(letter)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def draw
|
26
|
+
background 255
|
27
|
+
@letters.each do |letter|
|
28
|
+
letter.display
|
29
|
+
# If the mouse is pressed the letters shake
|
30
|
+
# If not, they return to their original location
|
31
|
+
mouse_pressed? ? letter.shake : letter.home
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
# A class to describe a single Letter
|
38
|
+
class Letter
|
39
|
+
# The letter that this instance represents
|
40
|
+
attr_reader :letter
|
41
|
+
|
42
|
+
# The object knows its original "home" location...
|
43
|
+
attr_reader :homex, :homey
|
44
|
+
|
45
|
+
# As well as its current location
|
46
|
+
attr_reader :x, :y
|
47
|
+
|
48
|
+
def initialize(x, y, letter)
|
49
|
+
@home_x = @x = x
|
50
|
+
@home_y = @y = y
|
51
|
+
@letter = letter
|
52
|
+
end
|
53
|
+
|
54
|
+
# Display the letter
|
55
|
+
def display
|
56
|
+
$app.text @letter, @x, @y
|
57
|
+
end
|
58
|
+
|
59
|
+
# Move the letter randomly
|
60
|
+
def shake
|
61
|
+
@x += rand * 4 - 2
|
62
|
+
@y += rand * 4 - 2
|
63
|
+
end
|
64
|
+
|
65
|
+
# At any point, the current location can be set back to
|
66
|
+
# the home location by calling the home() method.
|
67
|
+
def home
|
68
|
+
@x = @home_x
|
69
|
+
@y = @home_y
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
TextBreakingUp.new :title => "Text Breaking Up"
|