Skip to content

From processing 3.0 to JRubyArt

Martin Prout edited this page Oct 8, 2015 · 9 revisions

Here are some the main differences moving from vanilla processing to ruby-processing:-

  1. You should put size, smooth, full_screen in the settings method, not in setup

  2. You do not declare types in ruby vec = PVector.new instead of PVector vec = new PVector() for example, however in this case you should prefer to use Vec2D and Vec3D, which are ruby-processing alternatives to PVector (but with methods that are much more ruby-like, and have extended functionality).

  3. There are no void methods (what's evaluated gets returned without needing an explicit return)

  4. Everything is an object (this includes primitive types float, integer etc cf. java) see more

  5. Confusing for beginners and especially pythonistas there is often more than one way to do it

  6. Processing makes heavy use of java inner classes (to make methods and values somewhat globally available) ruby-processing provides the Processing::Proxy mixin to somewhat mimic this behaviour see app.rb. An alternative to consider is to use delegator methods using extend Forwardable, requires require 'forwardable' see example. In general you should try and code in regular ruby (in JRubyArt), only using processing shortcuts / methods when you need to (ie when ruby alternatives don't exist, many processing short cuts just aren't needed in ruby, and many are not even available in JRubyArt). From 3. above you should use:-

  • a**b for pow(a, b) pow is not available in JRubyArt
  • theta.degrees for degrees(theta)
  • theta.radians for radians(theta)
  • x.abs for abs(x)
  • x.ceil for ceil(x)
  • x.round for round(x)
  • str.strip for trim(str)
  • str.hex for hex(str)
  • string.to_i(base=16) for unhex(str)

Other ruby methods to prefer:-

  • rand(x) to random(x)
  • rand(lo..hi) to random(lo, hi)
  • puts val (or even just p val) to println(val)
  • p5map(value, start1, stop1, start2, stop2) replaces map(x, ...)
  • map1d(val, (range1), (range2)) is a more ruby like alternative (fewer args)
  • (lo..hi).clip(amt) to constrain(amt, lo, hi) it is how it is implemented

The processing map(value, start1, stop1, start2, stop2) method is not implemented in JRubyArt, but p5map is a direct replacement, but for a more ruby like alternative see map1d see reference.

Mainly for benefit of Mac users with a retina display (also Windows High-DPI)

The place to set pixel_density is in settings (after size would be a good place). So if you've got a retina display add pixel_density(2) in the settings method.