Propane a Standalone Ruby-Processing
Recently I have been experimenting with configuration free version of processing (in a ruby environment) [Propane][propane] and it has just been released for testing (full version Mac / Linux, only Java2D on Windows). To install gem:-
gem install propane # simplest or safer
jgem install propane # or belt and braces
jruby -S gem install propane
Post install:-
propane --install # requires wget, use to install Video, Sound libraries and/or Examplea
Create sketch from template
propane -c my_sketch 200 200 # creates `my_sketch.rb` with class `MySketch`
Run sketches
jruby my_sketch.rb
Example Sketch:-
# encoding: utf-8
# frozen_string_literal: true
require 'propane'
# Iconic ruby-processing example for Propane
class JWishy < Propane::App
load_library :control_panel
attr_reader :alpha, :back_color, :bluish, :hide, :magnitude, :panel
attr_reader :x_wiggle, :y_wiggle
def setup
size 600, 600
control_panel do |c|
c.title = 'Control Panel'
c.look_feel 'Nimbus'
c.slider :bluish, 0.0..1.0, 0.5
c.slider :alpha, 0.0..1.0, 0.5
c.checkbox :go_big
c.button :reset
c.menu :shape, %w(oval square triangle)
@panel = c
end
@hide = false
@shape = 'oval'
@x_wiggle, @y_wiggle = 10.0, 0
@magnitude = 8.15
@back_color = [0.06, 0.03, 0.18]
color_mode RGB, 1
ellipse_mode CORNER
smooth
end
def draw_background
back_color[3] = alpha
fill(*back_color.to_java(:float))
rect 0, 0, width, height
end
def reset
@y_wiggle = 0
end
def draw
# only make control_panel visible once, or again when hide is false
unless hide
@hide = true
panel.set_visible(hide)
end
draw_background
# Seed the random numbers for consistent placement from frame to frame
srand(0)
horiz, vert, mag = x_wiggle, y_wiggle, magnitude
if @go_big
mag *= 2
vert /= 2
end
blu = bluish
x, y = (width / 2), -27
c = 0.0
64.times do
x += cos(horiz) * mag
y += log10(vert) * mag + sin(vert) * 2
fill(sin(y_wiggle + c), rand * 0.2, rand * blu, 0.5)
s = 42 + cos(vert) * 17
args = [@shape, x - s / 2, y - s / 2, s, s]
draw_shape(args)
vert += rand * 0.25
horiz += rand * 0.25
c += 0.1
end
@x_wiggle += 0.05
@y_wiggle += 0.1
end
def mouse_pressed
return unless hide
@hide = false
end
def draw_shape(args)
case args[0]
when 'triangle'
draw_triangle(args)
when 'square'
rect(args[1], args[2], args[3], args[4])
else
ellipse(args[1], args[2], args[3], args[4]) # oval for Shoes
end
end
def draw_triangle(args)
x2 = args[1] + (args[3] * 0.6)
y0 = args[2] + (args[4] * 0.396)
y1 = args[2] - (args[4] * 0.792)
y2 = args[2] + (args[4] * 0.396)
triangle(args[1] - (args[3] * 0.6), y0, args[1], y1, x2, y2)
end
end
JWishy.new