Module: Processing::HelperMethods

Included in:
App
Defined in:
lib/ruby-processing/helper_methods.rb

Defined Under Namespace

Classes: VersionError

Instance Method Summary collapse

Instance Method Details

#blend_color(c1, c2, mode) ⇒ Object

Uses PImage class method under hood


79
80
81
# File 'lib/ruby-processing/helper_methods.rb', line 79

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)

14
15
16
17
18
19
20
# File 'lib/ruby-processing/helper_methods.rb', line 14

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


38
39
40
41
# File 'lib/ruby-processing/helper_methods.rb', line 38

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


68
69
70
71
72
73
74
75
76
# File 'lib/ruby-processing/helper_methods.rb', line 68

def dist(*args)
  len = args.length
  if len == 4
    return dist2d(*args)
  elsif len == 6
    return dist3d(*args)
  end
  fail ArgumentError, 'takes 4 or 6 parameters'
end

#find_method(method_name) ⇒ Object

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


85
86
87
88
# File 'lib/ruby-processing/helper_methods.rb', line 85

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

#frame_rate(fps = nil) ⇒ Object

frame_rate needs to support reading and writing


156
157
158
159
# File 'lib/ruby-processing/helper_methods.rb', line 156

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.


24
25
26
27
28
29
30
# File 'lib/ruby-processing/helper_methods.rb', line 24

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

#java_selfObject

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


120
121
122
# File 'lib/ruby-processing/helper_methods.rb', line 120

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

#keyObject

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


114
115
116
117
# File 'lib/ruby-processing/helper_methods.rb', line 114

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?


167
168
169
# File 'lib/ruby-processing/helper_methods.rb', line 167

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:


34
35
36
# File 'lib/ruby-processing/helper_methods.rb', line 34

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


145
146
147
# File 'lib/ruby-processing/helper_methods.rb', line 145

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


63
64
65
# File 'lib/ruby-processing/helper_methods.rb', line 63

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


56
57
58
# File 'lib/ruby-processing/helper_methods.rb', line 56

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

#mouse_pressed?Boolean

Is the mouse pressed for this frame?


162
163
164
# File 'lib/ruby-processing/helper_methods.rb', line 162

def mouse_pressed?
  @declared_fields['mousePressed'].value(java_self)
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.


92
93
94
95
96
# File 'lib/ruby-processing/helper_methods.rb', line 92

def proxy_java_fields
  fields = %w(sketchPath key frameRate frame 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


151
152
153
# File 'lib/ruby-processing/helper_methods.rb', line 151

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

#set_sketch_path(spath = nil) ⇒ Object

By default, your sketch path is the folder that your sketch is in. If you'd like to do something fancy, feel free.


103
104
105
106
107
108
109
110
# File 'lib/ruby-processing/helper_methods.rb', line 103

def set_sketch_path(spath = nil)
  field = @declared_fields['sketchPath']
  begin
    field.set_value(java_self, spath || SKETCH_ROOT)
  rescue TypeError
    fail VersionError, 'Use JRubyArt for processing-3.0'
  end
end

#sketch_pathObject

Get the sketch path


125
126
127
# File 'lib/ruby-processing/helper_methods.rb', line 125

def sketch_path
  @declared_fields['sketchPath'].value(java_self)
end

#thread(&block) ⇒ Object

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


45
46
47
48
49
50
51
# File 'lib/ruby-processing/helper_methods.rb', line 45

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