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


99
100
101
# File 'lib/ruby-processing/helper_methods.rb', line 99

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

#constrain(amt, low, high) ⇒ Object

explicitly provide 'processing.org' constrain instance method to return a float:- amt, low and high need to be floats


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

def constrain(amt, low, high)
  (low..high).clip(amt)
end

#dist(*args) ⇒ Object

explicitly provide 'processing.org' dist instance method


82
83
84
85
86
87
88
89
90
# File 'lib/ruby-processing/helper_methods.rb', line 82

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.


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

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


176
177
178
179
# File 'lib/ruby-processing/helper_methods.rb', line 176

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.


140
141
142
# File 'lib/ruby-processing/helper_methods.rb', line 140

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


134
135
136
137
# File 'lib/ruby-processing/helper_methods.rb', line 134

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)

187
188
189
# File 'lib/ruby-processing/helper_methods.rb', line 187

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


165
166
167
# File 'lib/ruby-processing/helper_methods.rb', line 165

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

#map(value, start1, stop1, start2, stop2) ⇒ float

Explicitly provides 'processing.org' map instance method, in which value is mapped from range 1, to range 2 (NB: values are not clamped to range 1). It may be better to explicitly write your own interpolate function

Parameters:

  • value (float)

    input

  • start1, (range)

    stop1

  • start2, (range)

    stop2

Returns:

  • (float)

    mapped value


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

def map(value, start1, stop1, start2, stop2)
  start2 + (stop2 - start2) * ((value - start1).to_f / (stop1 - start1))
  warn('map is deprecated use p5map or map1d instead')
end

#max(*args) ⇒ Object

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


77
78
79
# File 'lib/ruby-processing/helper_methods.rb', line 77

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


70
71
72
# File 'lib/ruby-processing/helper_methods.rb', line 70

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)

182
183
184
# File 'lib/ruby-processing/helper_methods.rb', line 182

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.


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

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


171
172
173
# File 'lib/ruby-processing/helper_methods.rb', line 171

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.


123
124
125
126
127
128
129
130
# File 'lib/ruby-processing/helper_methods.rb', line 123

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


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

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