ruby-processing 2.4.4 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (227) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rpextras.jar +0 -0
  3. data/lib/ruby-processing.rb +8 -6
  4. data/lib/ruby-processing/app.rb +54 -67
  5. data/lib/ruby-processing/config.rb +7 -7
  6. data/lib/ruby-processing/exporters/application_exporter.rb +37 -38
  7. data/lib/ruby-processing/exporters/base_exporter.rb +34 -37
  8. data/lib/ruby-processing/exporters/creator.rb +27 -25
  9. data/lib/ruby-processing/helper_methods.rb +18 -22
  10. data/lib/ruby-processing/helpers/numeric.rb +5 -6
  11. data/lib/ruby-processing/helpers/string.rb +11 -20
  12. data/lib/ruby-processing/library_loader.rb +33 -35
  13. data/lib/ruby-processing/runner.rb +118 -65
  14. data/lib/ruby-processing/runners/base.rb +21 -26
  15. data/lib/ruby-processing/runners/live.rb +3 -4
  16. data/lib/ruby-processing/runners/run.rb +1 -3
  17. data/lib/ruby-processing/runners/watch.rb +8 -8
  18. data/lib/ruby-processing/version.rb +1 -1
  19. data/lib/templates/application/lib/args.txt.erb +1 -1
  20. data/lib/templates/application/run.erb +3 -3
  21. data/library/control_panel/control_panel.rb +29 -29
  22. data/library/fastmath/fastmath.rb +3 -0
  23. data/library/file_chooser/file_chooser.rb +11 -13
  24. data/library/vecmath/vecmath.rb +6 -35
  25. data/samples/Rakefile +3 -1
  26. data/samples/configRP5/configRP5.pde +150 -0
  27. data/samples/contributed/Rakefile +6 -6
  28. data/samples/contributed/animator.rb +6 -6
  29. data/samples/contributed/bezier_playground.rb +29 -68
  30. data/samples/contributed/circle_collision.rb +6 -13
  31. data/samples/contributed/elegant_ball.rb +14 -17
  32. data/samples/contributed/empathy.rb +8 -5
  33. data/samples/contributed/fibonacci_sphere.rb +10 -49
  34. data/samples/contributed/full_screen.rb +1 -1
  35. data/samples/contributed/grapher.rb +10 -9
  36. data/samples/contributed/gravity.rb +11 -16
  37. data/samples/contributed/jwishy.rb +18 -20
  38. data/samples/contributed/quadraticvertex.rb +26 -26
  39. data/samples/external_library/java_processing/custom/landscape.rb +6 -4
  40. data/samples/external_library/java_processing/hemesh/twin_iso.rb +69 -71
  41. data/samples/external_library/java_processing/pbox2d/bumpy_surface_noise.rb +57 -0
  42. data/samples/external_library/java_processing/pbox2d/contact_test.rb +23 -0
  43. data/samples/external_library/java_processing/pbox2d/data/java_args.txt +2 -0
  44. data/samples/external_library/java_processing/pbox2d/library/custom_shape/custom_shape.rb +158 -0
  45. data/samples/external_library/java_processing/pbox2d/library/particle_system/particle_system.rb +212 -0
  46. data/samples/external_library/java_processing/pbox2d/library/surface/surface.rb +154 -0
  47. data/samples/external_library/java_processing/pbox2d/liquidy.rb +58 -0
  48. data/samples/external_library/java_processing/pbox2d/polygons.rb +58 -0
  49. data/samples/external_library/java_processing/toxiclibs/library/vbo/vbo.rb +52 -0
  50. data/samples/external_library/java_processing/toxiclibs/model_align.rb +9 -16
  51. data/samples/processing_app/basics/color/color_wheel.rb +1 -1
  52. data/samples/processing_app/basics/form/regular_polygon.rb +2 -2
  53. data/samples/processing_app/basics/form/rgb_cube.rb +2 -2
  54. data/samples/processing_app/basics/form/shape_primitives.rb +1 -1
  55. data/samples/processing_app/basics/form/star.rb +2 -2
  56. data/samples/processing_app/basics/input/clock.rb +21 -16
  57. data/samples/processing_app/basics/input/storing_input.rb +6 -6
  58. data/samples/processing_app/basics/math/additive_wave.rb +1 -1
  59. data/samples/processing_app/basics/math/sine.rb +2 -2
  60. data/samples/processing_app/basics/math/sine_cosine.rb +1 -1
  61. data/samples/processing_app/basics/math/sine_wave.rb +1 -1
  62. data/samples/processing_app/basics/objects/inheritance.rb +2 -0
  63. data/samples/processing_app/basics/objects/inheritance_two.rb +88 -0
  64. data/samples/processing_app/basics/objects/module.rb +89 -0
  65. data/samples/processing_app/{library/vecmath/drawolver.rb → basics/objects/module_two.rb} +1 -1
  66. data/samples/processing_app/basics/objects/multiple_constructors.rb +5 -0
  67. data/samples/processing_app/basics/objects/struct.rb +38 -0
  68. data/samples/processing_app/basics/structure/recursion2.rb +1 -1
  69. data/samples/processing_app/basics/transform/birds.rb +7 -10
  70. data/samples/processing_app/basics/transform/library/bird/bird.rb +3 -3
  71. data/samples/processing_app/basics/transform/rotate.rb +1 -1
  72. data/samples/processing_app/basics/transform/rotate1.rb +1 -1
  73. data/samples/processing_app/basics/transform/rotate_x_y.rb +1 -1
  74. data/samples/processing_app/demos/graphics/bezier_patch.rb +1 -38
  75. data/samples/processing_app/demos/graphics/trefoil.rb +50 -40
  76. data/samples/processing_app/demos/graphics/wiggling.rb +36 -38
  77. data/samples/processing_app/demos/performance/cubic_grid_retained.rb +14 -14
  78. data/samples/processing_app/demos/performance/esfera.rb +27 -39
  79. data/samples/processing_app/demos/performance/text_rendering.rb +1 -1
  80. data/samples/processing_app/library/fastmath/clock.rb +44 -0
  81. data/samples/processing_app/library/pdf/complex_3D.rb +26 -24
  82. data/samples/processing_app/library/vecmath/{Rakefile → arcball/Rakefile} +6 -6
  83. data/samples/processing_app/library/vecmath/arcball/arcball_box.rb +23 -0
  84. data/samples/processing_app/library/vecmath/arcball/arcball_radius.rb +23 -0
  85. data/samples/processing_app/library/vecmath/arcball/arcball_shape.rb +29 -0
  86. data/samples/processing_app/library/vecmath/{README.txt → vec2d/README.txt} +0 -0
  87. data/samples/processing_app/library/vecmath/vec2d/Rakefile +30 -0
  88. data/samples/processing_app/library/vecmath/{acceleration_with_vectors.rb → vec2d/acceleration_with_vectors.rb} +4 -5
  89. data/samples/processing_app/library/vecmath/{bouncing_ball.rb → vec2d/bouncing_ball.rb} +9 -15
  90. data/samples/processing_app/library/vecmath/{circle_collision.rb → vec2d/circle_collision.rb} +46 -51
  91. data/samples/processing_app/library/vecmath/{data → vec2d/data}/java_args.txt +0 -0
  92. data/samples/processing_app/library/vecmath/{data → vec2d/data}/sprite.png +0 -0
  93. data/samples/processing_app/library/vecmath/{data → vec2d/data}/texture.png +0 -0
  94. data/samples/processing_app/library/vecmath/{flocking.rb → vec2d/flocking.rb} +3 -6
  95. data/samples/processing_app/library/vecmath/{library → vec2d/library}/flock/flock.rb +47 -67
  96. data/samples/processing_app/library/vecmath/{library → vec2d/library}/particle/particle_system.rb +5 -5
  97. data/samples/processing_app/library/vecmath/vec2d/library/tile/tile.rb +85 -0
  98. data/samples/processing_app/library/vecmath/{morph.rb → vec2d/morph.rb} +17 -16
  99. data/samples/processing_app/library/vecmath/{multiple_particle_systems.rb → vec2d/multiple_particle_systems.rb} +11 -28
  100. data/samples/processing_app/library/vecmath/{particle_system_pshape.rb → vec2d/particle_system_pshape.rb} +4 -6
  101. data/samples/processing_app/library/vecmath/vec2d/penrose.rb +71 -0
  102. data/samples/processing_app/library/vecmath/{reflection1.rb → vec2d/reflection1.rb} +6 -6
  103. data/samples/processing_app/library/vecmath/{seeking_neural.rb → vec2d/seeking_neural.rb} +12 -16
  104. data/samples/processing_app/library/vecmath/{simple_particle_system.rb → vec2d/simple_particle_system.rb} +8 -12
  105. data/samples/processing_app/library/vecmath/{smoke_particle_system.rb → vec2d/smoke_particle_system.rb} +8 -13
  106. data/samples/processing_app/library/vecmath/{vector_math.rb → vec2d/vector_math.rb} +0 -0
  107. data/samples/processing_app/library/vecmath/{library/wiggler/wiggler.rb → vec2d/wiggle_pshape.rb} +28 -4
  108. data/samples/processing_app/library/vecmath/vec3d/Rakefile +30 -0
  109. data/samples/processing_app/library/vecmath/vec3d/drawolver.rb +86 -0
  110. data/samples/processing_app/library/vecmath/vec3d/frame_of_reference.rb +103 -0
  111. data/samples/processing_app/library/vecmath/{hilbert_fractal.rb → vec3d/hilbert_fractal.rb} +5 -33
  112. data/samples/processing_app/library/vecmath/vec3d/library/geometry/geometry.rb +3 -0
  113. data/samples/processing_app/library/vecmath/vec3d/library/geometry/lib/cylinder.rb +44 -0
  114. data/samples/processing_app/library/vecmath/vec3d/library/geometry/lib/mat4.rb +28 -0
  115. data/samples/processing_app/library/vecmath/vec3d/library/geometry/lib/plane.rb +60 -0
  116. data/samples/processing_app/library/vecmath/{library → vec3d/library}/hilbert/hilbert.rb +14 -17
  117. data/samples/processing_app/library/vecmath/{retained_menger.rb → vec3d/retained_menger.rb} +20 -55
  118. data/samples/processing_app/topics/advanced_data/Rakefile +6 -6
  119. data/samples/processing_app/topics/advanced_data/counting_words.rb +7 -7
  120. data/samples/processing_app/topics/advanced_data/data/data.xml +0 -15
  121. data/samples/processing_app/topics/advanced_data/data/struct_data.yml +5 -0
  122. data/samples/processing_app/topics/advanced_data/library/bubble/bubble.rb +8 -8
  123. data/samples/processing_app/topics/advanced_data/load_save_XML.rb +41 -42
  124. data/samples/processing_app/topics/advanced_data/load_save_json.rb +11 -11
  125. data/samples/processing_app/topics/advanced_data/load_save_struct_yaml.rb +22 -23
  126. data/samples/processing_app/topics/advanced_data/load_save_table.rb +12 -12
  127. data/samples/processing_app/topics/advanced_data/load_save_yaml.rb +10 -12
  128. data/samples/processing_app/topics/advanced_data/regex.rb +5 -6
  129. data/samples/processing_app/topics/advanced_data/threads.rb +27 -27
  130. data/samples/processing_app/topics/advanced_data/threads_two.rb +3 -2
  131. data/samples/processing_app/topics/advanced_data/word_frequency.rb +18 -16
  132. data/samples/processing_app/topics/advanced_data/yahoo_weather.rb +6 -5
  133. data/samples/processing_app/topics/animation/animated_sprite.rb +9 -7
  134. data/samples/processing_app/topics/animation/sequential.rb +19 -19
  135. data/samples/processing_app/topics/cellular_automata/library/ca/ca.rb +1 -1
  136. data/samples/processing_app/topics/cellular_automata/wolfram.rb +1 -1
  137. data/samples/processing_app/topics/create_shapes/begin_end_contour.rb +1 -1
  138. data/samples/processing_app/topics/create_shapes/library/wiggler/wiggler.rb +4 -4
  139. data/samples/processing_app/topics/create_shapes/particle_system_pshape.rb +2 -2
  140. data/samples/processing_app/topics/create_shapes/path_pshape.rb +1 -1
  141. data/samples/processing_app/topics/create_shapes/polygon_pshape_oo3.rb +1 -1
  142. data/samples/processing_app/topics/create_shapes/polygon_shape.rb +3 -3
  143. data/samples/processing_app/topics/file_io/load_file1.rb +1 -1
  144. data/samples/processing_app/topics/file_io/save_frames.rb +5 -5
  145. data/samples/processing_app/topics/file_io/save_one_image.rb +2 -2
  146. data/samples/processing_app/topics/file_io/tile_images.rb +1 -1
  147. data/samples/processing_app/topics/gui/scrollbar.rb +3 -3
  148. data/samples/processing_app/topics/image_processing/blending.rb +13 -13
  149. data/samples/processing_app/topics/image_processing/blur.rb +1 -1
  150. data/samples/processing_app/topics/image_processing/brightness.rb +1 -1
  151. data/samples/processing_app/topics/image_processing/convolution.rb +1 -1
  152. data/samples/processing_app/topics/image_processing/edge_detection.rb +4 -4
  153. data/samples/processing_app/topics/image_processing/explode.rb +1 -1
  154. data/samples/processing_app/topics/image_processing/extrusion.rb +1 -1
  155. data/samples/processing_app/topics/image_processing/histogram.rb +1 -1
  156. data/samples/processing_app/topics/image_processing/linear_image.rb +1 -1
  157. data/samples/processing_app/topics/image_processing/pixel_array.rb +1 -1
  158. data/samples/processing_app/topics/image_processing/zoom.rb +2 -2
  159. data/samples/processing_app/topics/lsystems/Rakefile +6 -6
  160. data/samples/processing_app/topics/lsystems/chequer.rb +4 -10
  161. data/samples/processing_app/topics/lsystems/csplant.rb +25 -25
  162. data/samples/processing_app/topics/lsystems/cstest.rb +9 -4
  163. data/samples/processing_app/topics/lsystems/david_tour.rb +14 -16
  164. data/samples/processing_app/topics/lsystems/koch.rb +8 -18
  165. data/samples/processing_app/topics/lsystems/library/cs_grammar/cs_grammar.rb +18 -24
  166. data/samples/processing_app/topics/lsystems/library/grammar/grammar.rb +7 -9
  167. data/samples/processing_app/topics/lsystems/library/koch/koch_fractal.rb +75 -94
  168. data/samples/processing_app/topics/lsystems/library/stochastic_grammar/stochastic_grammar.rb +11 -13
  169. data/samples/processing_app/topics/lsystems/mpeano.rb +29 -32
  170. data/samples/processing_app/topics/lsystems/peano.rb +19 -21
  171. data/samples/processing_app/topics/lsystems/penrose.rb +31 -37
  172. data/samples/processing_app/topics/lsystems/penrose_snowflake.rb +10 -15
  173. data/samples/processing_app/topics/lsystems/pentagonal.rb +20 -23
  174. data/samples/processing_app/topics/lsystems/snake_kolam.rb +13 -13
  175. data/samples/processing_app/topics/lsystems/stochastic_test.rb +25 -28
  176. data/samples/processing_app/topics/lsystems/three_d_tree.rb +25 -24
  177. data/samples/processing_app/topics/motion/bouncy_bubbles.rb +17 -17
  178. data/samples/processing_app/topics/motion/cubes_in_cube.rb +1 -3
  179. data/samples/processing_app/topics/motion/library/cube/cube.rb +2 -2
  180. data/samples/processing_app/topics/motion/reflection2.rb +1 -1
  181. data/samples/processing_app/topics/shaders/blur_filter.rb +3 -3
  182. data/samples/processing_app/topics/shaders/bw_shader.rb +3 -3
  183. data/samples/processing_app/topics/shaders/conway.rb +5 -5
  184. data/samples/processing_app/topics/shaders/deform.rb +5 -5
  185. data/samples/processing_app/topics/shaders/edge_detect.rb +3 -5
  186. data/samples/processing_app/topics/shaders/glossy_fish_eye.rb +15 -21
  187. data/samples/processing_app/topics/shaders/glsl_heightmap_noise.rb +21 -19
  188. data/samples/processing_app/topics/shaders/image_mask.rb +6 -6
  189. data/samples/processing_app/topics/shaders/landscape.rb +4 -4
  190. data/samples/processing_app/topics/shaders/monjori.rb +15 -15
  191. data/samples/processing_app/topics/shaders/nebula.rb +3 -3
  192. data/samples/processing_app/topics/shaders/sep_blur.rb +15 -15
  193. data/samples/processing_app/topics/shaders/toon_shading.rb +2 -2
  194. data/samples/processing_app/topics/simulate/chain.rb +16 -14
  195. data/samples/processing_app/topics/simulate/smoke_particle_system.rb +3 -3
  196. data/samples/processing_app/topics/vectors/acceleration_with_vectors.rb +3 -2
  197. data/samples/processing_app/topics/vectors/bouncing_ball.rb +1 -0
  198. data/samples/processing_app/topics/vectors/vector_math.rb +2 -1
  199. data/vendors/Rakefile +15 -3
  200. metadata +99 -86
  201. data/.gitignore +0 -13
  202. data/.travis.yml +0 -6
  203. data/.yardopts +0 -5
  204. data/CHANGELOG +0 -316
  205. data/CONTRIBUTING.md +0 -35
  206. data/Gemfile +0 -6
  207. data/LICENSE.md +0 -39
  208. data/README.md +0 -119
  209. data/Rakefile +0 -37
  210. data/bin/install_jruby_complete +0 -13
  211. data/lib/ruby-processing/exporters/exporters.rb +0 -7
  212. data/library/vecmath/lib/arcball.rb +0 -64
  213. data/library/vecmath/lib/quaternion.rb +0 -62
  214. data/library/vecmath/lib/vec.rb +0 -232
  215. data/ruby-processing.gemspec +0 -54
  216. data/samples/processing_app/library/pdf/.gitignore +0 -1
  217. data/samples/processing_app/library/vecmath/retained_test.rb +0 -65
  218. data/samples/processing_app/library/vecmath/retained_test2.rb +0 -65
  219. data/samples/processing_app/library/vecmath/wiggle_pshape.rb +0 -22
  220. data/test/README.md +0 -6
  221. data/test/basic.rb +0 -14
  222. data/test/draw_ex.rb +0 -12
  223. data/test/graphics.rb +0 -7
  224. data/test/p2d.rb +0 -14
  225. data/test/p3d.rb +0 -14
  226. data/test/rp5_test.rb +0 -86
  227. data/test/setup_ex.rb +0 -12
@@ -2,8 +2,8 @@
2
2
  # Part of a series of articles on Processing 2.
3
3
  # Blog post here:
4
4
  # http://vormplus.be/blog/article/drawing-shapes-with-quadratic-vertices
5
- # translated for ruby-processing by Martin Prout
6
- # Note how to specify fill and background using hexadecimal string for color,
5
+ # translated for ruby-processing by Martin Prout
6
+ # Note how to specify fill and background using hexadecimal string for color,
7
7
  # this is different from vanilla processing
8
8
  #
9
9
 
@@ -16,14 +16,14 @@ def setup
16
16
  @hide = false
17
17
  control_panel do |c|
18
18
  c.title = "controller"
19
- c.menu(:detail, ['4', '5', '6', '7', '8', '9', '10' ], '7')
19
+ c.menu(:detail, %w(4 5 6 7 8 9 10), '7')
20
20
  c.button :toggle_debug
21
21
  c.button :save_image
22
22
  @panel = c
23
23
  end
24
-
24
+
25
25
  @debug = false
26
- @save_one = false
26
+ @save_one = false
27
27
  smooth 8
28
28
  end
29
29
 
@@ -33,45 +33,45 @@ def draw
33
33
  @hide = true
34
34
  end
35
35
  background color('#BDF018')
36
- translate width / 2, height / 2
37
- @step_angle = TWO_PI / (detail.to_i - 1)
36
+ translate width / 2, height / 2
37
+ @step_angle = TAU / (detail.to_i - 1)
38
38
  fill color('#ffffff')
39
39
  no_stroke
40
40
  @cr = map(mouse_x, 0, width, 20, 200)
41
41
  begin_shape
42
- detail.to_i.times do |i|
43
- if (i == 0)
44
- vertex cos_x(i), sin_y(i)
45
- else
42
+ detail.to_i.times do |i|
43
+ if (i == 0)
44
+ vertex cos_x(i), sin_y(i)
45
+ else
46
46
  quadratic_vertex cos_cx(i), sin_cy(i), cos_x(i), sin_y(i)
47
47
  end
48
48
  end
49
49
  end_shape(CLOSE)
50
-
51
- if (debug)
50
+
51
+ if (debug)
52
52
  # draw lines between points
53
53
  stroke_weight(1)
54
54
  no_fill
55
55
  stroke(0)
56
-
56
+
57
57
  begin_shape
58
- detail.to_i.times do |i|
59
- vertex cos_cx(i), sin_cy(i) unless i == 0
60
- vertex cos_x(i), sin_y(i)
58
+ detail.to_i.times do |i|
59
+ vertex cos_cx(i), sin_cy(i) unless i == 0
60
+ vertex cos_x(i), sin_y(i)
61
61
  end
62
62
  end_shape CLOSE
63
-
63
+
64
64
  # draw points
65
- stroke_weight 8
66
- detail.to_i.times do |i|
67
- stroke 0
68
- point cos_x(i), sin_y(i)
69
- stroke 255, 0, 0
70
- point cos_cx(i), sin_cy(i)
65
+ stroke_weight 8
66
+ detail.to_i.times do |i|
67
+ stroke 0
68
+ point cos_x(i), sin_y(i)
69
+ stroke 255, 0, 0
70
+ point cos_cx(i), sin_cy(i)
71
71
  end
72
72
  end
73
-
74
- if (save_one)
73
+
74
+ if save_one
75
75
  save_frame("images/quadraticvertex-#####.png")
76
76
  @save_one = false
77
77
  end
@@ -23,7 +23,9 @@ class Landscape
23
23
  def calculate(nn)
24
24
  val = ->(curr, nn, x, y){curr * 0.95 + 0.05 * (nn.feed_forward([x, y]) * 280.0 - 140.0)}
25
25
  @z = (0 ... cols).map{|i|
26
- (0 ... rows).map{|j| val.call(z[i][j], nn, i * 1.0/ cols, j * 1.0/cols)}
26
+ (0 ... rows).map{|j|
27
+ val.call(z[i][j], nn, i * 1.0/ cols, j * 1.0/cols)
28
+ }
27
29
  }
28
30
  end
29
31
 
@@ -49,10 +51,10 @@ class Landscape
49
51
  vertex(scl, scl, z[x+1][y+1])
50
52
  fill(z[x][y+1]+127, 220)
51
53
  vertex(0, scl, z[x][y+1])
52
- end_shape
53
- pop_matrix
54
+ end_shape
55
+ pop_matrix
56
+ end
54
57
  end
55
58
  end
56
59
  end
57
- end
58
60
 
@@ -1,71 +1,69 @@
1
- load_libraries :hemesh, :vbo
2
-
3
- include MS # module MS imports necessary java classes and contains ruby MeshToVBO class
4
-
5
- RES = 20
6
-
7
- attr_reader :mesh_ret, :inv_mesh_ret, :render
8
-
9
- def setup
10
- size(800, 800, P3D)
11
- smooth(8)
12
- values = [] # build a multi-dimensional array in ruby
13
- (0 .. RES).each do |i| # the inclusive range is intentional here
14
- valu = []
15
- (0 .. RES).each do |j|
16
- val = []
17
- (0 .. RES).each do |k|
18
- val << 2.1 * noise(0.35 * i, 0.35 * j, 0.35 * k)
19
- end
20
- valu << val
21
- end
22
- values << valu
23
- end
24
-
25
- creator = HEC_IsoSurface.new
26
- creator.set_resolution(RES,RES, RES) # number of cells in x,y,z direction
27
- creator.set_size(400.0/RES, 400.0/RES, 400.0/RES) # cell size
28
-
29
- # JRuby requires a bit of help to determine correct 'java args', particulary with
30
- # overloaded arrays args as seen below. Note we are saying we have an 'array' of
31
- # 'float array' here, where the values can also be double[][][].
32
- java_values = values.to_java(Java::float[][]) # pre-coerce values to java
33
- creator.set_values(java_values) # the grid points
34
-
35
- creator.set_isolevel(1) # isolevel to mesh
36
- creator.set_invert(false) # invert mesh
37
- creator.set_boundary(100) # value of isoFunction outside grid
38
- # use creator.clear_boundary to set boundary values to "no value".
39
- # A boundary value of "no value" results in an open mesh
40
-
41
- mesh = HE_Mesh.new(creator)
42
- # mesh.modify(HEM_Smooth.new.set_iterations(10).setAutoRescale(true))
43
- creator.set_invert(true)
44
-
45
- inv_mesh = HE_Mesh.new(creator)
46
- inv_mesh.modify(HEM_Smooth.new.set_iterations(10).set_auto_rescale(true))
47
- @render = MeshToVBO.new(self)
48
- no_stroke
49
- # no color args produces a default light grey fill
50
- @mesh_ret = render.meshToVBO(mesh, color(200, 0, 0))
51
- @inv_mesh_ret = render.meshToVBO(inv_mesh, color(0, 0, 200))
52
- end
53
-
54
- def draw
55
- background(120)
56
- lights
57
- define_lights
58
- translate(400, 400)
59
- rotate_y(mouse_x.to_f / width * TWO_PI) # use TWO_PI until processing-2.0b9
60
- rotate_x(mouse_y.to_f / height * TWO_PI) # then we can use TAU
61
- shape(inv_mesh_ret)
62
- shape(mesh_ret)
63
- end
64
-
65
- def define_lights
66
- ambient(20, 20, 20)
67
- ambient_light(60, 60, 60)
68
- point_light(30, 30, 30, 0, 0, 0)
69
- directional_light(40, 40, 50, 1, 0, 0)
70
- spot_light(30, 30, 30, 0, 40, 200, 0, -0.5, 0.5, PI / 2, 2)
71
- end
1
+ load_libraries :hemesh, :vbo, :vecmath
2
+
3
+ include MS # module MS imports necessary java classes and contains ruby MeshToVBO class
4
+
5
+ RES = 20
6
+
7
+ attr_reader :mesh_ret, :inv_mesh_ret, :render
8
+
9
+ def setup
10
+ size(800, 800, P3D)
11
+ ArcBall.init(self)
12
+ smooth(8)
13
+ values = [] # build a multi-dimensional array in ruby
14
+ (0 .. RES).each do |i| # the inclusive range is intentional here
15
+ valu = []
16
+ (0 .. RES).each do |j|
17
+ val = []
18
+ (0 .. RES).each do |k|
19
+ val << 2.1 * noise(0.35 * i, 0.35 * j, 0.35 * k)
20
+ end
21
+ valu << val
22
+ end
23
+ values << valu
24
+ end
25
+
26
+ creator = HEC_IsoSurface.new
27
+ creator.set_resolution(RES,RES, RES) # number of cells in x,y,z direction
28
+ creator.set_size(400.0/RES, 400.0/RES, 400.0/RES) # cell size
29
+
30
+ # JRuby requires a bit of help to determine correct 'java args', particulary with
31
+ # overloaded arrays args as seen below. Note we are saying we have an 'array' of
32
+ # 'float array' here, where the values can also be double[][][].
33
+ java_values = values.to_java(Java::float[][]) # pre-coerce values to java
34
+ creator.set_values(java_values) # the grid points
35
+
36
+ creator.set_isolevel(1) # isolevel to mesh
37
+ creator.set_invert(false) # invert mesh
38
+ creator.set_boundary(100) # value of isoFunction outside grid
39
+ # use creator.clear_boundary to set boundary values to "no value".
40
+ # A boundary value of "no value" results in an open mesh
41
+
42
+ mesh = HE_Mesh.new(creator)
43
+ # mesh.modify(HEM_Smooth.new.set_iterations(10).setAutoRescale(true))
44
+ creator.set_invert(true)
45
+
46
+ inv_mesh = HE_Mesh.new(creator)
47
+ inv_mesh.modify(HEM_Smooth.new.set_iterations(10).set_auto_rescale(true))
48
+ @render = MeshToVBO.new(self)
49
+ no_stroke
50
+ # no color args produces a default light grey fill
51
+ @mesh_ret = render.meshToVBO(mesh, color(200, 0, 0))
52
+ @inv_mesh_ret = render.meshToVBO(inv_mesh, color(0, 0, 200))
53
+ end
54
+
55
+ def draw
56
+ background(120)
57
+ lights
58
+ define_lights
59
+ shape(inv_mesh_ret)
60
+ shape(mesh_ret)
61
+ end
62
+
63
+ def define_lights
64
+ ambient(80, 80, 80)
65
+ ambient_light(80, 80, 80)
66
+ point_light(30, 30, 30, 0, 0, 1)
67
+ directional_light(40, 40, 50, 0, 0, 1)
68
+ spot_light(30, 30, 30, 0, 40, 200, 0, -0.5, 0.5, PI / 2, 2)
69
+ end
@@ -0,0 +1,57 @@
1
+ # The Nature of Code
2
+ # <http:#www.shiffman.net/teaching/nature>
3
+ # Spring 2010
4
+ # PBox2D example
5
+
6
+ # An uneven surface
7
+
8
+ load_library :jbox2d
9
+ load_library :surface
10
+
11
+ include SB
12
+
13
+ attr_reader :surface, :box2d, :particles
14
+
15
+ def setup
16
+ size(500,300)
17
+ smooth
18
+
19
+ # Initialize box2d physics and create the world
20
+ @box2d = Processing::Box2d::Box2d.new(self)
21
+ box2d.create_world
22
+ # We are setting a custom gravity
23
+ box2d.set_gravity(0, -20)
24
+
25
+ # Create the empty list
26
+ @particles = []
27
+ # Create the surface
28
+ @surface = Surface.new(box2d)
29
+ end
30
+
31
+ def draw
32
+ # If the mouse is pressed, we make new particles
33
+
34
+
35
+ # We must always step through time!
36
+ box2d.step
37
+
38
+ background(138, 66, 54)
39
+ # Draw the surface
40
+ surface.display
41
+ # NB question mark is reqd to call mouse_pressed value, else method gets called.
42
+ particles << Particle.new(box2d, mouse_x, mouse_y, rand(2.0 .. 6)) if mouse_pressed?
43
+ # Draw all particles
44
+ particles.each do |p|
45
+ p.display
46
+ end
47
+ # Particles that leave the screen, we delete them
48
+ # (note they have to be deleted from both the box2d world and our list
49
+ particles.each_with_index do |p, i|
50
+ if (p.done)
51
+ particles.delete_at(i)
52
+ end
53
+ end
54
+ # Just drawing the framerate to see how many particles it can handle
55
+ fill(0)
56
+ text("framerate: #{frame_rate.to_i}", 12, 16)
57
+ end
@@ -0,0 +1,23 @@
1
+ load_library 'jbox2d'
2
+ require 'jruby/core_ext'
3
+ class JContactListener
4
+ include org.jbox2d.callbacks.ContactListener
5
+
6
+ def initialize()
7
+ end
8
+ java_signature "void beginContact(org.jbox2d.dynamics.contacts.Contact c)"
9
+ def begin_contact(c)
10
+ end
11
+ java_signature "void endContact(org.jbox2d.dynamics.contacts.Contact c)"
12
+ def end_contact(c)
13
+ end
14
+ java_signature "void beginContact(org.jbox2d.dynamics.contacts.Contact,org.jbox2d.callbacks.ContactImpulse )"
15
+ def pre_solve(c, ci)
16
+ end
17
+ java_signature "void beginContact(org.jbox2d.dynamics.contacts.Contact,org.jbox2d.callbacks.ContactImpulse )"
18
+ def post_solve(c, ci)
19
+ end
20
+ end
21
+
22
+
23
+
@@ -0,0 +1,2 @@
1
+ -XX:CompileCommand=dontinline,org.jruby.runtime.invokedynamic.InvokeDynamicSupport::invocationFallback
2
+
@@ -0,0 +1,158 @@
1
+ module B2D
2
+ include_package 'pbox2d'
3
+ include_package 'org.jbox2d.collision.shapes'
4
+ include_package 'org.jbox2d.common'
5
+ include_package 'org.jbox2d.dynamics'
6
+ java_import 'pbox2d.PBox2D'
7
+
8
+
9
+ # The Nature of Code
10
+ # <http://www.shiffman.net/teaching/nature>
11
+ # Spring 2011
12
+ # PBox2D example
13
+ # A rectangular box
14
+
15
+ class CustomShape
16
+
17
+ # We need to keep track of a Body and a width and height
18
+ attr_reader :body, :box2d
19
+
20
+ # Constructor
21
+ def initialize(b2d, x, y)
22
+ # Add the box to the box2d world
23
+ @box2d = b2d
24
+ make_body(B2D::Vec2.new(x, y))
25
+ end
26
+
27
+ # This function removes the particle from the box2d world
28
+ def kill_body!
29
+ box2d.destroy_body(body)
30
+ end
31
+
32
+ # Is the particle ready for deletion?
33
+ def done
34
+ # Let's find the screen position of the particle
35
+ pos = box2d.get_body_pixel_coord(body)
36
+ # Is it off the bottom of the screen?
37
+ if (pos.y > $app.height)
38
+ kill_body!
39
+ return true
40
+ end
41
+ return false
42
+ end
43
+
44
+ # Drawing the box
45
+ def display
46
+ # We look at each body and get its screen position
47
+ pos = box2d.get_body_pixel_coord(body)
48
+ # Get its angle of rotation
49
+ a = body.get_angle
50
+
51
+ f = body.get_fixture_list
52
+ ps = f.get_shape
53
+
54
+
55
+ rect_mode(CENTER)
56
+ push_matrix
57
+ translate(pos.x, pos.y)
58
+ rotate(-a)
59
+ fill(175)
60
+ stroke(0)
61
+ begin_shape
62
+ # For every vertex, convert to pixel vector
63
+ ps.get_vertex_count.times do |i|
64
+ v = box2d.vector_world_to_pixels(ps.get_vertex(i))
65
+ vertex(v.x, v.y)
66
+ end
67
+ end_shape(CLOSE)
68
+ pop_matrix
69
+ end
70
+
71
+ # This function adds the rectangle to the box2d world
72
+ def make_body(center)
73
+
74
+ # Define a polygon (this is what we use for a rectangle)
75
+ sd = B2D::PolygonShape.new
76
+
77
+ vertices = []
78
+ vertices << box2d.vector_pixels_to_world(B2D::Vec2.new(-15, 25))
79
+ vertices << box2d.vector_pixels_to_world(B2D::Vec2.new(15, 0))
80
+ vertices << box2d.vector_pixels_to_world(B2D::Vec2.new(20, -15))
81
+ vertices << box2d.vector_pixels_to_world(B2D::Vec2.new(-10, -10))
82
+ sd.set(vertices.to_java(Java::OrgJbox2dCommon::Vec2), vertices.length)
83
+
84
+ # Define the body and make it from the shape
85
+ bd = B2D::BodyDef.new
86
+ bd.type = B2D::BodyType::DYNAMIC
87
+ bd.position.set(box2d.coord_pixels_to_world(center))
88
+ @body = box2d.create_body(bd)
89
+
90
+ body.create_fixture(sd, 1.0)
91
+
92
+
93
+ # Give it some initial random velocity
94
+ body.set_linear_velocity(Vec2.new(rand(-5 .. 5), rand(2 .. 5)))
95
+ body.set_angular_velocity(rand(-5 .. 5))
96
+ end
97
+ end
98
+
99
+ # The Nature of Code
100
+ # <http://www.shiffman.net/teaching/nature>
101
+ # Spring 2012
102
+ # PBox2D example
103
+
104
+ # A fixed boundary class (now incorporates angle)
105
+
106
+
107
+
108
+ class Boundary
109
+
110
+ attr_reader :box2d, :b, :x, :y, :w, :h #, :a
111
+
112
+ def initialize(b2d, x, y, w, h, a)
113
+ @box2d = b2d
114
+ @x = x
115
+ @y = y
116
+ @w = w
117
+ @h = h
118
+
119
+ # Define the polygon
120
+ sd = B2D::PolygonShape.new
121
+
122
+ # Figure out the box2d coordinates
123
+ box2dW = box2d.scalar_pixels_to_world(w/2)
124
+ box2dH = box2d.scalar_pixels_to_world(h/2)
125
+ # We're just a box
126
+ sd.set_as_box(box2dW, box2dH)
127
+
128
+
129
+ # Create the body
130
+ bd = B2D::BodyDef.new
131
+ bd.type = B2D::BodyType::STATIC
132
+ bd.angle = a
133
+ bd.position.set(box2d.coord_pixels_to_world(x,y))
134
+ @b = box2d.create_body(bd)
135
+
136
+ # Attached the shape to the body using a Fixture
137
+ b.create_fixture(sd,1)
138
+ end
139
+
140
+ # Draw the boundary, it doesn't move so we don't have to ask the Body for location
141
+ def display
142
+ fill(0)
143
+ stroke(0)
144
+ stroke_weight(1)
145
+ rect_mode(CENTER)
146
+ a = b.get_angle
147
+ push_matrix
148
+ translate(x,y)
149
+ rotate(-a)
150
+ rect(0,0,w,h)
151
+ pop_matrix
152
+ end
153
+
154
+ end
155
+ end
156
+
157
+
158
+