ruby-processing 2.6.2 → 2.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/rpextras.jar +0 -0
- data/lib/ruby-processing.rb +5 -8
- data/lib/ruby-processing/app.rb +26 -27
- data/lib/ruby-processing/config.rb +0 -2
- data/lib/ruby-processing/exporters/application_exporter.rb +1 -1
- data/lib/ruby-processing/exporters/base_exporter.rb +1 -1
- data/lib/ruby-processing/exporters/creator.rb +11 -11
- data/lib/ruby-processing/helper_methods.rb +33 -31
- data/lib/ruby-processing/helpers/numeric.rb +1 -1
- data/lib/ruby-processing/helpers/range.rb +11 -0
- data/lib/ruby-processing/library_loader.rb +11 -16
- data/lib/ruby-processing/runner.rb +22 -24
- data/lib/ruby-processing/runners/watch.rb +1 -1
- data/lib/ruby-processing/version.rb +1 -1
- data/library/boids/boids.rb +39 -70
- data/library/control_panel/control_panel.rb +3 -3
- data/samples/contributed/circle_collision.rb +3 -3
- data/samples/contributed/fern.rb +7 -10
- data/samples/contributed/fibonacci_sphere.rb +2 -2
- data/samples/contributed/full_screen.rb +23 -22
- data/samples/contributed/grapher.rb +3 -3
- data/samples/contributed/gravity.rb +1 -1
- data/samples/contributed/mandelbrot.rb +10 -13
- data/samples/external_library/java_processing/box2d_processing/bumpy_surface_noise.rb +1 -1
- data/samples/external_library/java_processing/box2d_processing/library/custom_shape/custom_shape.rb +2 -2
- data/samples/external_library/java_processing/box2d_processing/library/particle_system/particle_system.rb +1 -1
- data/samples/external_library/java_processing/box2d_processing/library/surface/surface.rb +2 -2
- data/samples/external_library/java_processing/box2d_processing/liquidy.rb +1 -1
- data/samples/external_library/java_processing/fisica/bubbles.rb +2 -2
- data/samples/external_library/java_processing/fisica/joints.rb +4 -4
- data/samples/external_library/java_processing/generative_design/node_spring_attractor.rb +2 -2
- data/samples/external_library/java_processing/geomerative/hello_world_rotate_firstletter.rb +7 -7
- data/samples/external_library/java_processing/hemesh/twin_iso.rb +3 -3
- data/samples/external_library/java_processing/pbox2d/bumpy_surface_noise.rb +1 -1
- data/samples/external_library/java_processing/pbox2d/library/custom_shape/custom_shape.rb +2 -2
- data/samples/external_library/java_processing/pbox2d/library/particle_system/particle_system.rb +1 -1
- data/samples/external_library/java_processing/pbox2d/library/surface/surface.rb +2 -2
- data/samples/external_library/java_processing/pbox2d/liquidy.rb +1 -1
- data/samples/external_library/java_processing/peasy_cam/library/hilbert/hilbert.rb +4 -4
- data/samples/external_library/ruby_gem/draw_test.rb +2 -2
- data/samples/external_library/ruby_gem/game_of_life.rb +3 -3
- data/samples/processing_app/basics/arrays/array_objects.rb +2 -2
- data/samples/processing_app/basics/color/hue.rb +1 -1
- data/samples/processing_app/basics/control/conditionals1.rb +5 -24
- data/samples/processing_app/basics/control/conditionals2.rb +1 -1
- data/samples/processing_app/basics/form/bezier_ellipse.rb +1 -1
- data/samples/processing_app/basics/form/brick_tower.rb +4 -8
- data/samples/processing_app/basics/form/regular_polygon.rb +1 -1
- data/samples/processing_app/basics/form/star.rb +1 -1
- data/samples/processing_app/basics/form/triangle_strip.rb +1 -1
- data/samples/processing_app/basics/input/storing_input.rb +1 -1
- data/samples/processing_app/basics/lights/spot.rb +1 -1
- data/samples/processing_app/basics/math/additive_wave.rb +2 -2
- data/samples/processing_app/basics/math/double_random.rb +2 -2
- data/samples/processing_app/basics/math/noise_wave.rb +1 -1
- data/samples/processing_app/basics/math/random.rb +1 -1
- data/samples/processing_app/basics/objects/module.rb +1 -1
- data/samples/processing_app/basics/objects/struct.rb +1 -1
- data/samples/processing_app/basics/structure/loop.rb +19 -14
- data/samples/processing_app/basics/structure/recursion2.rb +2 -2
- data/samples/processing_app/basics/textures/texture3.rb +13 -33
- data/samples/processing_app/basics/transform/birds.rb +5 -5
- data/samples/processing_app/basics/transform/cubes_in_cube.rb +3 -3
- data/samples/processing_app/basics/transform/rotate.rb +1 -1
- data/samples/processing_app/basics/typography/kinetic_type.rb +1 -1
- data/samples/processing_app/demos/graphics/bezier_patch.rb +34 -34
- data/samples/processing_app/demos/graphics/trefoil.rb +1 -1
- data/samples/processing_app/demos/graphics/wiggling.rb +5 -5
- data/samples/processing_app/demos/performance/esfera.rb +4 -4
- data/samples/processing_app/demos/performance/text_rendering.rb +1 -1
- data/samples/processing_app/library/dxf/simple_export.rb +3 -3
- data/samples/processing_app/library/pdf/complex_3D.rb +11 -11
- data/samples/processing_app/library/vecmath/vec2d/bouncing_ball.rb +1 -1
- data/samples/processing_app/library/vecmath/vec2d/circle_collision.rb +3 -3
- data/samples/processing_app/library/vecmath/vec2d/library/flock/flock.rb +5 -5
- data/samples/processing_app/library/vecmath/vec2d/library/particle/{particle_system.rb → particle.rb} +28 -21
- data/samples/processing_app/library/vecmath/vec2d/morph.rb +3 -3
- data/samples/processing_app/library/vecmath/vec2d/particle_system_pshape.rb +3 -3
- data/samples/processing_app/library/vecmath/vec2d/reflection1.rb +2 -2
- data/samples/processing_app/library/vecmath/vec2d/seeking_neural.rb +3 -2
- data/samples/processing_app/library/vecmath/vec2d/simple_particle_system.rb +1 -1
- data/samples/processing_app/library/vecmath/vec3d/frame_of_reference.rb +4 -4
- data/samples/processing_app/topics/advanced_data/library/word/word.rb +1 -1
- data/samples/processing_app/topics/advanced_data/load_save_XML.rb +1 -1
- data/samples/processing_app/topics/advanced_data/load_save_json.rb +1 -1
- data/samples/processing_app/topics/advanced_data/load_save_struct_yaml.rb +1 -1
- data/samples/processing_app/topics/advanced_data/load_save_yaml.rb +1 -1
- data/samples/processing_app/topics/advanced_data/threads_two.rb +1 -2
- data/samples/processing_app/topics/cellular_automata/game_of_life.rb +3 -3
- data/samples/processing_app/topics/cellular_automata/library/ca/ca.rb +2 -2
- data/samples/processing_app/topics/cellular_automata/library/cell/cell.rb +4 -4
- data/samples/processing_app/topics/cellular_automata/library/simple_cell/simple_cell.rb +1 -1
- data/samples/processing_app/topics/cellular_automata/spore1.rb +1 -1
- data/samples/processing_app/topics/cellular_automata/spore2.rb +1 -1
- data/samples/processing_app/topics/create_shapes/group_pshape.rb +2 -2
- data/samples/processing_app/topics/create_shapes/library/particle/particle_system.rb +3 -3
- data/samples/processing_app/topics/create_shapes/library/polygon/polygon.rb +2 -2
- data/samples/processing_app/topics/create_shapes/library/star/star.rb +3 -3
- data/samples/processing_app/topics/create_shapes/particle_system_pshape.rb +1 -1
- data/samples/processing_app/topics/create_shapes/path_pshape.rb +1 -1
- data/samples/processing_app/topics/drawing/scribble_plotter.rb +2 -2
- data/samples/processing_app/topics/gui/button.rb +16 -16
- data/samples/processing_app/topics/gui/rollover.rb +13 -13
- data/samples/processing_app/topics/image_processing/blur.rb +2 -2
- data/samples/processing_app/topics/image_processing/edge_detection.rb +2 -2
- data/samples/processing_app/topics/lsystems/cstest.rb +1 -1
- data/samples/processing_app/topics/lsystems/library/stochastic_grammar/stochastic_grammar.rb +1 -1
- data/samples/processing_app/topics/motion/bouncy_bubbles.rb +1 -1
- data/samples/processing_app/topics/motion/brownian.rb +2 -2
- data/samples/processing_app/topics/motion/circle_collision.rb +1 -1
- data/samples/processing_app/topics/motion/cubes_in_cube.rb +1 -1
- data/samples/processing_app/topics/motion/library/cube/cube.rb +2 -2
- data/samples/processing_app/topics/motion/morph.rb +11 -11
- data/samples/processing_app/topics/motion/moving_on_curves.rb +4 -4
- data/samples/processing_app/topics/motion/puff.rb +4 -4
- data/samples/processing_app/topics/motion/reflection1.rb +3 -3
- data/samples/processing_app/topics/motion/reflection2.rb +1 -1
- data/samples/processing_app/topics/shaders/bw_shader.rb +1 -1
- data/samples/processing_app/topics/shaders/glsl_heightmap_noise.rb +2 -2
- data/samples/processing_app/topics/simulate/flocking.rb +6 -6
- data/samples/processing_app/topics/simulate/library/flock/flock.rb +33 -41
- data/samples/processing_app/topics/simulate/multiple_particle_systems.rb +34 -60
- data/samples/processing_app/topics/simulate/simple_particle_system.rb +20 -32
- data/samples/processing_app/topics/simulate/smoke_particle_system.rb +45 -57
- data/samples/processing_app/topics/simulate/springs.rb +40 -44
- metadata +4 -5
- data/samples/processing_app/library/vecmath/vec2d/multiple_particle_systems.rb +0 -141
- data/samples/processing_app/library/vecmath/vec2d/smoke_particle_system.rb +0 -133
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 591fe4a424a740865ae79dbf1060221b692ea81a
|
4
|
+
data.tar.gz: 5adb639c8832800b21f0877b33ddd366bfe73f44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed7651d8224f586ba6fc194cee99bdbef01248485cbabc3b92cb31514e746d1fa74a65d72fb8b8c8f189df56484728b2afa1984a5711359bd29761e9acadd688
|
7
|
+
data.tar.gz: 050764df809b66e1b7434368d7135309d2e61d6d842c6f976dacac90be50affd027d10031c634903d1057e77fe7593d7cf54739a00c4985838d0d9211230d101
|
data/lib/rpextras.jar
CHANGED
Binary file
|
data/lib/ruby-processing.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
# Ruby-Processing is for Code Art.
|
2
2
|
# Send suggestions, ideas, and hate-mail to jashkenas [at] gmail.com
|
3
3
|
# Also, send samples and libraries.
|
4
|
-
|
5
4
|
unless defined? RP5_ROOT
|
6
5
|
$LOAD_PATH << File.expand_path(File.dirname(__FILE__))
|
7
|
-
RP5_ROOT = File.expand_path(File.dirname(__FILE__) +
|
6
|
+
RP5_ROOT = File.expand_path(File.dirname(__FILE__) + '/../')
|
8
7
|
end
|
9
8
|
|
10
9
|
SKETCH_ROOT ||= Dir.pwd
|
@@ -12,21 +11,19 @@ SKETCH_ROOT ||= Dir.pwd
|
|
12
11
|
require 'ruby-processing/version'
|
13
12
|
require 'ruby-processing/helpers/string'
|
14
13
|
require 'ruby-processing/helpers/numeric'
|
14
|
+
require 'ruby-processing/helpers/range'
|
15
15
|
|
16
16
|
# The top-level namespace, a home for all Ruby-Processing classes.
|
17
17
|
module Processing
|
18
|
-
|
19
18
|
def self.exported?
|
20
19
|
@exported ||= ENV['EXPORTED'].eql?('true')
|
21
20
|
end
|
22
21
|
|
23
22
|
# Autoload a number of path/constants that we may end up using.
|
24
|
-
# mri ruby does not understand ** require 'java' ** and we may otherwise call
|
25
|
-
# from mri ruby without lazy path loading of autoload
|
23
|
+
# mri ruby does not understand ** require 'java' ** and we may otherwise call
|
24
|
+
# it from mri ruby without lazy path loading of autoload
|
26
25
|
# NB: autoload is slated for possible removal by ruby-2.2
|
27
|
-
|
28
26
|
autoload :App, 'ruby-processing/app'
|
29
27
|
autoload :Runner, 'ruby-processing/runner'
|
30
28
|
autoload :Watcher, 'ruby-processing/runners/watch'
|
31
|
-
|
32
|
-
end
|
29
|
+
end
|
data/lib/ruby-processing/app.rb
CHANGED
@@ -7,7 +7,7 @@ require_relative '../ruby-processing/helper_methods'
|
|
7
7
|
require_relative '../ruby-processing/library_loader'
|
8
8
|
require_relative '../ruby-processing/config'
|
9
9
|
|
10
|
-
Dir["#{Processing::RP_CONFIG[
|
10
|
+
Dir["#{Processing::RP_CONFIG['PROCESSING_ROOT']}/core/library/\*.jar"].each { |jar| require jar }
|
11
11
|
|
12
12
|
# Include some core processing classes that we'd like to use:
|
13
13
|
%w(PApplet PConstants PFont PImage PShape PShapeOBJ PShapeSVG PStyle
|
@@ -29,7 +29,7 @@ module Processing
|
|
29
29
|
include HelperMethods
|
30
30
|
|
31
31
|
# Alias some methods for familiarity for Shoes coders.
|
32
|
-
#attr_accessor :frame, :title
|
32
|
+
# attr_accessor :frame, :title
|
33
33
|
alias_method :oval, :ellipse
|
34
34
|
alias_method :stroke_width, :stroke_weight
|
35
35
|
alias_method :rgb, :color
|
@@ -57,11 +57,13 @@ module Processing
|
|
57
57
|
end
|
58
58
|
|
59
59
|
# Handy getters and setters on the class go here:
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
60
|
+
class << self
|
61
|
+
attr_accessor :sketch_class
|
62
|
+
end
|
63
|
+
|
64
|
+
def sketch_class
|
65
|
+
self.class.sketch_class
|
66
|
+
end
|
65
67
|
|
66
68
|
# Keep track of what inherits from the Processing::App, because we're going
|
67
69
|
# to want to instantiate one.
|
@@ -75,7 +77,7 @@ module Processing
|
|
75
77
|
def load_libraries(*args)
|
76
78
|
@@library_loader.load_library(*args)
|
77
79
|
end
|
78
|
-
|
80
|
+
alias_method :load_library, :load_libraries
|
79
81
|
|
80
82
|
def library_loaded?(library_name)
|
81
83
|
@@library_loader.library_loaded?(library_name)
|
@@ -101,19 +103,19 @@ module Processing
|
|
101
103
|
# argument in setup. Sensible options to pass are x and y to locate sketch
|
102
104
|
# on the screen, or full_screen: true (prefer new hash syntax)
|
103
105
|
|
104
|
-
def initialize(options={})
|
106
|
+
def initialize(options = {})
|
105
107
|
super()
|
106
108
|
post_initialize(options)
|
107
109
|
$app = self
|
108
110
|
proxy_java_fields
|
109
|
-
set_sketch_path #unless Processing.online?
|
111
|
+
set_sketch_path # unless Processing.online?
|
110
112
|
mix_proxy_into_inner_classes
|
111
|
-
|
113
|
+
# @started = false
|
112
114
|
|
113
115
|
java.lang.Thread.default_uncaught_exception_handler = proc do |_thread_, exception|
|
114
116
|
puts(exception.class.to_s)
|
115
117
|
puts(exception.message)
|
116
|
-
puts(exception.backtrace.
|
118
|
+
puts(exception.backtrace.map { |trace| '\t' + trace })
|
117
119
|
close
|
118
120
|
end
|
119
121
|
|
@@ -125,20 +127,19 @@ module Processing
|
|
125
127
|
|
126
128
|
args = []
|
127
129
|
@width, @height = options[:width], options[:height]
|
128
|
-
if
|
129
|
-
|
130
|
-
args <<
|
130
|
+
if @full_screen || options[:full_screen]
|
131
|
+
@full_screen = true
|
132
|
+
args << '--present'
|
131
133
|
end
|
132
134
|
@render_mode ||= JAVA2D
|
133
|
-
xc = Processing::RP_CONFIG[
|
134
|
-
yc = Processing::RP_CONFIG[
|
135
|
+
xc = Processing::RP_CONFIG['X_OFF'] ||= 0
|
136
|
+
yc = Processing::RP_CONFIG['Y_OFF'] ||= 0
|
135
137
|
x = options[:x] || xc
|
136
138
|
y = options[:y] || yc
|
137
139
|
args << "--location=#{x},#{y}" # important no spaces here
|
138
140
|
title = options[:title] || File.basename(SKETCH_PATH).sub(/(\.rb)$/, '').titleize
|
139
141
|
args << title
|
140
142
|
PApplet.run_sketch(args, self)
|
141
|
-
#end
|
142
143
|
end
|
143
144
|
|
144
145
|
def size(*args)
|
@@ -155,27 +156,26 @@ module Processing
|
|
155
156
|
super(*args)
|
156
157
|
end
|
157
158
|
|
158
|
-
def post_initialize(
|
159
|
+
def post_initialize(_args)
|
159
160
|
nil
|
160
161
|
end
|
161
162
|
|
162
163
|
# Make sure we set the size if we set it before we start the animation thread.
|
163
164
|
def start
|
164
|
-
|
165
|
+
size(@width, @height) if @width && @height
|
165
166
|
super()
|
166
167
|
end
|
167
168
|
|
168
169
|
# Provide a loggable string to represent this sketch.
|
169
170
|
def inspect
|
170
171
|
"#<Processing::App:#{self.class}:#{@title}>"
|
171
|
-
#"#<Processing::App:#{self.class}>"
|
172
172
|
end
|
173
173
|
|
174
174
|
# Cleanly close and shutter a running sketch.
|
175
175
|
def close
|
176
176
|
control_panel.remove if respond_to?(:control_panel)
|
177
|
-
|
178
|
-
|
177
|
+
dispose
|
178
|
+
frame.dispose
|
179
179
|
end
|
180
180
|
|
181
181
|
private
|
@@ -183,7 +183,6 @@ module Processing
|
|
183
183
|
# Mix the Processing::Proxy into any inner classes defined for the
|
184
184
|
# sketch, attempting to mimic the behavior of Java's inner classes.
|
185
185
|
def mix_proxy_into_inner_classes
|
186
|
-
|
187
186
|
klass = Processing::App.sketch_class
|
188
187
|
klass.constants.each do |name|
|
189
188
|
const = klass.const_get name
|
@@ -203,14 +202,14 @@ module Processing
|
|
203
202
|
def self.desired_method_names(inner_class)
|
204
203
|
bad_method = /__/ # Internal JRuby methods.
|
205
204
|
unwanted = PApplet.superclass.instance_methods + Object.instance_methods
|
206
|
-
unwanted -=
|
205
|
+
unwanted -= %w(width height cursor create_image background size resize)
|
207
206
|
methods = Processing::App.public_instance_methods
|
208
|
-
methods.reject {|m| unwanted.include?(m) || bad_method.match(m) || inner_class.method_defined?(m) }
|
207
|
+
methods.reject { |m| unwanted.include?(m) || bad_method.match(m) || inner_class.method_defined?(m) }
|
209
208
|
end
|
210
209
|
|
211
210
|
# Proxy methods through to the sketch.
|
212
211
|
def self.proxy_methods(inner_class)
|
213
|
-
code = desired_method_names(inner_class).
|
212
|
+
code = desired_method_names(inner_class).reduce('') do |rcode, method|
|
214
213
|
rcode << <<-EOS
|
215
214
|
def #{method}(*args, &block) # def rect(*args, &block)
|
216
215
|
if block_given? # if block_given?
|
@@ -61,7 +61,7 @@ module Processing
|
|
61
61
|
|
62
62
|
def calculate_substitutions
|
63
63
|
file_list = ['lib/ruby/jruby-complete.jar']
|
64
|
-
@class_path = file_list.map { |f| '$JAVAROOT/' + f.sub(@prefix +
|
64
|
+
@class_path = file_list.map { |f| '$JAVAROOT/' + f.sub(@prefix + '/', '') }.join(':')
|
65
65
|
@linux_class_path = '.:../lib/ruby/*:../lib/*:../lib/library/*'
|
66
66
|
@windows_class_path = '.;../lib/ruby/*;../lib/*;../lib/library/*'
|
67
67
|
end
|
@@ -62,7 +62,7 @@ module Processing
|
|
62
62
|
class BasicSketch < Creator
|
63
63
|
# Create a blank sketch, given a path.
|
64
64
|
def basic_template
|
65
|
-
%
|
65
|
+
%(
|
66
66
|
def setup
|
67
67
|
size <%=@width%>, <%=@height%>
|
68
68
|
end
|
@@ -70,11 +70,11 @@ end
|
|
70
70
|
def draw
|
71
71
|
|
72
72
|
end
|
73
|
-
|
73
|
+
)
|
74
74
|
end
|
75
75
|
|
76
76
|
def basic_template_mode
|
77
|
-
%
|
77
|
+
%(
|
78
78
|
def setup
|
79
79
|
size <%=@width%>, <%=@height%>, <%=@mode%>
|
80
80
|
end
|
@@ -82,7 +82,7 @@ end
|
|
82
82
|
def draw
|
83
83
|
|
84
84
|
end
|
85
|
-
|
85
|
+
)
|
86
86
|
end
|
87
87
|
|
88
88
|
def create!(path, args)
|
@@ -109,7 +109,7 @@ end
|
|
109
109
|
class ClassSketch < Creator
|
110
110
|
|
111
111
|
def class_template
|
112
|
-
%
|
112
|
+
%(
|
113
113
|
class <%=@name%> < Processing::App
|
114
114
|
def setup
|
115
115
|
size <%=@width%>, <%=@height%>
|
@@ -121,11 +121,11 @@ class <%=@name%> < Processing::App
|
|
121
121
|
end
|
122
122
|
|
123
123
|
# <%=@name%>.new(x: 20, y: 20)
|
124
|
-
|
124
|
+
)
|
125
125
|
end
|
126
126
|
|
127
127
|
def class_template_mode
|
128
|
-
%
|
128
|
+
%(
|
129
129
|
class <%=@name%> < Processing::App
|
130
130
|
def setup
|
131
131
|
size <%=@width%>, <%=@height%>, <%=@mode%>
|
@@ -137,7 +137,7 @@ class <%=@name%> < Processing::App
|
|
137
137
|
end
|
138
138
|
|
139
139
|
# <%=@name%>.new(x: 20, y: 20)
|
140
|
-
|
140
|
+
)
|
141
141
|
end
|
142
142
|
# Create a bare blank sketch, given a path.
|
143
143
|
def create!(path, args)
|
@@ -163,12 +163,12 @@ end
|
|
163
163
|
# This class creates a ruby-processing class that mimics java inner class
|
164
164
|
class Inner < Creator
|
165
165
|
def inner_class_template
|
166
|
-
%
|
166
|
+
%(
|
167
167
|
class <%=@name%>
|
168
|
-
|
168
|
+
include Processing::Proxy
|
169
169
|
|
170
170
|
end
|
171
|
-
|
171
|
+
)
|
172
172
|
end
|
173
173
|
# Create a blank sketch, given a path.
|
174
174
|
def create!(path, _args_)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Processing
|
2
2
|
module HelperMethods
|
3
|
-
|
3
|
+
# processings epsilon may not be defined yet
|
4
|
+
EPSILON ||= 1.0e-04
|
4
5
|
# Nice block method to draw to a buffer.
|
5
6
|
# You can optionally pass it a width, a height, and a renderer.
|
6
7
|
# Takes care of starting and ending the draw for you.
|
@@ -42,31 +43,20 @@ module Processing
|
|
42
43
|
super(*args)
|
43
44
|
end
|
44
45
|
|
45
|
-
# Overrides convenience function loop, to add ability to loop over a block
|
46
|
-
# if supplied, otherwise perform as the PApplet class would
|
47
|
-
def loop(&block)
|
48
|
-
if block_given?
|
49
|
-
while true do
|
50
|
-
yield
|
51
|
-
end
|
52
|
-
else
|
53
|
-
super
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
46
|
# Overrides Processing convenience function thread, which takes a String
|
58
47
|
# arg (for a function) to more rubylike version, takes a block...
|
59
48
|
def thread(&block)
|
60
49
|
if block_given?
|
61
50
|
Thread.new(&block)
|
62
51
|
else
|
63
|
-
fail ArgumentError, 'thread must be called with a block'
|
52
|
+
fail ArgumentError, 'thread must be called with a block', caller
|
64
53
|
end
|
65
54
|
end
|
66
55
|
|
67
56
|
# Explicitly provides 'processing.org' map instance method, in which
|
68
57
|
# value is mapped from range 1, to range 2 (NB: values are not clamped to
|
69
|
-
# range 1). It may be better to explicitly write your own interpolate
|
58
|
+
# range 1). It may be better to explicitly write your own interpolate
|
59
|
+
# function
|
70
60
|
# @param [float] value input
|
71
61
|
# @param [range] start1, stop1
|
72
62
|
# @param [range] start1, stop2
|
@@ -74,11 +64,12 @@ module Processing
|
|
74
64
|
def map(value, start1, stop1, start2, stop2)
|
75
65
|
start2 + (stop2 - start2) * ((value - start1).to_f / (stop1 - start1))
|
76
66
|
end
|
77
|
-
|
67
|
+
|
78
68
|
# ruby alternative implementation of map using range parameters
|
79
|
-
#
|
69
|
+
# (begin..end) and excluded end (begin...end) produce the same result
|
80
70
|
def map1d(val, r_in, r_out)
|
81
|
-
r_out.begin + (r_out.end - r_out.begin) *
|
71
|
+
r_out.begin + (r_out.end - r_out.begin) *
|
72
|
+
((val - r_in.begin).to_f / (r_in.end - r_in.begin))
|
82
73
|
end
|
83
74
|
|
84
75
|
# explicitly provide 'processing.org' norm instance method
|
@@ -95,34 +86,40 @@ module Processing
|
|
95
86
|
# to return a float:- a, b and c need to be floats
|
96
87
|
|
97
88
|
def min(*args)
|
98
|
-
args.min
|
89
|
+
args.min # { |a,b| a <=> b } optional block not reqd
|
99
90
|
end
|
100
91
|
|
101
92
|
# explicitly provide 'processing.org' max instance method
|
102
93
|
# to return a float:- a, b and c need to be floats
|
103
94
|
|
104
95
|
def max(*args)
|
105
|
-
args.max
|
96
|
+
args.max # { |a, b| a <=> b } optional block not reqd
|
106
97
|
end
|
107
|
-
|
108
98
|
|
109
99
|
# explicitly provide 'processing.org' dist instance method
|
110
100
|
def dist(*args)
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
101
|
+
len = args.length
|
102
|
+
if len == 4
|
103
|
+
dx = args[0] - args[2]
|
104
|
+
dy = args[1] - args[3]
|
105
|
+
return 0 if dx.abs < EPSILON && dy.abs < EPSILON
|
106
|
+
return Math.hypot(dx, dy)
|
107
|
+
elsif len == 6
|
108
|
+
dx = args[0] - args[3]
|
109
|
+
dy = args[1] - args[4]
|
110
|
+
dz = args[2] - args[5]
|
111
|
+
return 0 if dx.abs < EPSILON && dy.abs < EPSILON && dz.abs < EPSILON
|
112
|
+
return Math.sqrt(dx * dx + dy * dy + dz * dz)
|
113
|
+
end
|
116
114
|
fail ArgumentError, 'takes 4 or 6 parameters'
|
117
115
|
end
|
118
116
|
|
119
117
|
# explicitly provide 'processing.org' constrain instance method
|
120
118
|
# to return a float:- amt, low and high need to be floats
|
121
119
|
def constrain(amt, low, high)
|
122
|
-
(
|
120
|
+
(low..high).clip(amt)
|
123
121
|
end
|
124
122
|
|
125
|
-
|
126
123
|
# Uses PImage class method under hood
|
127
124
|
def blend_color(c1, c2, mode)
|
128
125
|
PImage.blendColor(c1, c2, mode)
|
@@ -132,7 +129,7 @@ module Processing
|
|
132
129
|
# Here's a convenient way to look for them.
|
133
130
|
def find_method(method_name)
|
134
131
|
reg = Regexp.new("#{method_name}", true)
|
135
|
-
|
132
|
+
methods.sort.select { |meth| reg.match(meth) }
|
136
133
|
end
|
137
134
|
|
138
135
|
# Proxy over a list of Java declared fields that have the same name as
|
@@ -159,7 +156,7 @@ module Processing
|
|
159
156
|
|
160
157
|
# Provide a convenient handle for the Java-space version of self.
|
161
158
|
def java_self
|
162
|
-
@java_self ||=
|
159
|
+
@java_self ||= to_java(Java::ProcessingCore::PApplet)
|
163
160
|
end
|
164
161
|
|
165
162
|
|
@@ -170,13 +167,18 @@ module Processing
|
|
170
167
|
|
171
168
|
# Fields that should be made accessible as under_scored.
|
172
169
|
def mouse_x; mouseX; end
|
170
|
+
|
173
171
|
def mouse_y; mouseY; end
|
172
|
+
|
174
173
|
def pmouse_x; pmouseX; end
|
174
|
+
|
175
175
|
def pmouse_y; pmouseY; end
|
176
|
+
|
176
177
|
def frame_count; frameCount; end
|
178
|
+
|
177
179
|
def mouse_button; mouseButton; end
|
178
|
-
def key_code; keyCode; end
|
179
180
|
|
181
|
+
def key_code; keyCode; end
|
180
182
|
|
181
183
|
# Ensure that load_strings returns a real Ruby array
|
182
184
|
def load_strings(file_or_url)
|