Module: Processing::HelperMethods

Included in:
App, Proxy
Defined in:
lib/jruby_art/helper_methods.rb

Overview

Provides some convenience methods

Instance Method Summary collapse

Instance Method Details

#blend_color(c1, c2, mode) ⇒ Object

Uses PImage class method under hood



109
110
111
# File 'lib/jruby_art/helper_methods.rb', line 109

def blend_color(c1, c2, mode)
  Java::ProcessingCore::PImage.blendColor(c1, c2, mode)
end

#buffer(buf_width = width, buf_height = height, renderer = @render_mode) {|buf| ... } ⇒ Object

Nice block method to draw to a buffer. You can optionally pass it a width, a height, and a renderer. Takes care of starting and ending the draw for you.

Yields:

  • (buf)


13
14
15
16
17
18
19
# File 'lib/jruby_art/helper_methods.rb', line 13

def buffer(buf_width = width, buf_height = height, renderer = @render_mode)
  buf = create_graphics(buf_width, buf_height, renderer)
  buf.begin_draw
  yield buf
  buf.end_draw
  buf
end

#color(*args) ⇒ Object



59
60
61
62
# File 'lib/jruby_art/helper_methods.rb', line 59

def color(*args)
  return super(*args) unless args.length == 1
  super(hex_color(args[0]))
end

#dist(*args) ⇒ Object

explicitly provide ‘processing.org’ dist instance method



97
98
99
100
101
102
103
104
105
106
# File 'lib/jruby_art/helper_methods.rb', line 97

def dist(*args)
  case args.length
  when 4
    return dist2d(*args)
  when 6
    return dist3d(*args)
  else
    raise ArgumentError, 'takes 4 or 6 parameters'
  end
end

#find_method(method_name) ⇒ Object

There’s just so many functions in Processing, Here’s a convenient way to look for them.



115
116
117
118
# File 'lib/jruby_art/helper_methods.rb', line 115

def find_method(method_name)
  reg = Regexp.new(method_name.to_s, true)
  methods.sort.select { |meth| reg.match(meth) }
end

#frame_rate(fps = nil) ⇒ Object

frame_rate needs to support reading and writing



167
168
169
170
# File 'lib/jruby_art/helper_methods.rb', line 167

def frame_rate(fps = nil)
  return @declared_fields['frameRate'].value(java_self) unless fps
  super(fps)
end

#grid(cols, rows, col_size = 1, row_size = 1) ⇒ Object

A nice method to run a given block for a grid. Lifted from action_coding/Nodebox.



40
41
42
43
44
45
46
# File 'lib/jruby_art/helper_methods.rb', line 40

def grid(cols, rows, col_size = 1, row_size = 1)
  (0...cols * rows).map do |i|
    x = col_size * (i % cols)
    y = row_size * i.div(cols)
    yield x, y
  end
end

#hsb_color(hue, sat, brightness) ⇒ Object

hue, sat, brightness in range 0..1.0 returns RGB color int



55
56
57
# File 'lib/jruby_art/helper_methods.rb', line 55

def hsb_color(hue, sat, brightness)
  Java::Monkstone::ColorUtil.hsbToRgB(hue, sat, brightness)
end

#int_to_ruby_colors(hex) ⇒ Object



68
69
70
# File 'lib/jruby_art/helper_methods.rb', line 68

def int_to_ruby_colors(hex)
  Java::Monkstone::ColorUtil.rubyString(hex)
end

#java_selfObject

Provide a convenient handle for the Java-space version of self.



136
137
138
# File 'lib/jruby_art/helper_methods.rb', line 136

def java_self
  @java_self ||= to_java(Java::ProcessingCore::PApplet)
end

#kamera(eye: Vec3D.new(width / 2.0, height / 2.0, (height / 2.0) / tan(PI * 30.0 / 180.0)), center: Vec3D.new(width / 2.0, height / 2.0, 0), up: Vec3D.new(0, 1.0, 0)) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/jruby_art/helper_methods.rb', line 21

def kamera(
  eye: Vec3D.new(width / 2.0, height / 2.0, (height / 2.0) / tan(PI * 30.0 / 180.0)),
  center: Vec3D.new(width / 2.0, height / 2.0, 0),
  up: Vec3D.new(0, 1.0, 0)
)
  camera(eye.x, eye.y, eye.z, center.x, center.y, center.z, up.x, up.y, up.z)
end

#keyObject

Fix java conversion problems getting the last key If it’s ASCII, return the character, otherwise the integer



130
131
132
133
# File 'lib/jruby_art/helper_methods.rb', line 130

def key
  int = @declared_fields['key'].value(java_self)
  int < 256 ? int.chr : int
end

#key_pressed?Boolean

Is a key pressed for this frame?

Returns:

  • (Boolean)


178
179
180
# File 'lib/jruby_art/helper_methods.rb', line 178

def key_pressed?
  @declared_fields['keyPressed'].value(java_self)
end

#lerp_color(*args) ⇒ Object

lerp_color takes three or four arguments, in Java that’s two different methods, one regular and one static, so:



50
51
52
# File 'lib/jruby_art/helper_methods.rb', line 50

def lerp_color(*args)
  args.length > 3 ? self.class.lerp_color(*args) : super(*args)
end

#load_strings(file_or_url) ⇒ Object

Ensure that load_strings returns a real Ruby array



156
157
158
# File 'lib/jruby_art/helper_methods.rb', line 156

def load_strings(file_or_url)
  loadStrings(file_or_url).to_a
end

#max(*args) ⇒ Object

explicitly provide ‘processing.org’ max instance method to return a float:- a, b and c need to be floats



92
93
94
# File 'lib/jruby_art/helper_methods.rb', line 92

def max(*args)
  args.max # { |a, b| a <=> b } optional block not reqd
end

#min(*args) ⇒ Object

explicitly provide ‘processing.org’ min instance method to return a float:- a, b and c need to be floats



85
86
87
# File 'lib/jruby_art/helper_methods.rb', line 85

def min(*args)
  args.min # { |a,b| a <=> b } optional block not reqd
end

#mouse_pressed?Boolean

Is the mouse pressed for this frame?

Returns:

  • (Boolean)


173
174
175
# File 'lib/jruby_art/helper_methods.rb', line 173

def mouse_pressed?
  @declared_fields['mousePressed'].value(java_self)
end

#perspektiv(fov: Math::PI / 3.0, aspect_ratio: width.to_f / height, near_z: (height / 20.0) / tan(fov / 2.0), far_z: (height * 5) / tan(fov / 2.0)) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/jruby_art/helper_methods.rb', line 29

def perspektiv(
  fov: Math::PI / 3.0,
  aspect_ratio: width.to_f / height,
  near_z: (height / 20.0) / tan(fov / 2.0),
  far_z: (height * 5) / tan(fov / 2.0)
)
  perspective(fov, aspect_ratio, near_z, far_z)
end

#proxy_java_fieldsObject

Proxy over a list of Java declared fields that have the same name as some methods. Add to this list as needed.



122
123
124
125
126
# File 'lib/jruby_art/helper_methods.rb', line 122

def proxy_java_fields
  fields = %w(key frameRate mousePressed keyPressed)
  methods = fields.map { |field| java_class.declared_field(field) }
  @declared_fields = Hash[fields.zip(methods)]
end

#save_strings(filename, strings) ⇒ Object

Writes an array of strings to a file, one line per string. This file is saved to the sketch’s data folder



162
163
164
# File 'lib/jruby_art/helper_methods.rb', line 162

def save_strings(filename, strings)
  saveStrings(filename, [strings].flatten.to_java(:String))
end

#thread(&block) ⇒ Object

Overrides Processing convenience function thread, which takes a String arg (for a function) to more rubylike version, takes a block…



74
75
76
77
78
79
80
# File 'lib/jruby_art/helper_methods.rb', line 74

def thread(&block)
  if block_given?
    Thread.new(&block)
  else
    raise ArgumentError, 'thread must be called with a block', caller
  end
end

#web_to_color_array(web) ⇒ Object



64
65
66
# File 'lib/jruby_art/helper_methods.rb', line 64

def web_to_color_array(web)
  Java::Monkstone::ColorUtil.webArray(web)
end