propane 0.7.0-java → 0.8.0-java

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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -3
  3. data/CHANGELOG.md +2 -0
  4. data/README.md +3 -5
  5. data/examples/{complete → data_path}/Rakefile +2 -2
  6. data/examples/{complete → data_path}/bw_shader.rb +7 -6
  7. data/examples/{complete → data_path}/data/Texture01.jpg +0 -0
  8. data/examples/{complete → data_path}/data/Texture02.jpg +0 -0
  9. data/examples/{complete → data_path}/data/Univers45.vlw +0 -0
  10. data/examples/{complete → data_path}/data/bwfrag.glsl +0 -0
  11. data/examples/{complete → data_path}/data/displaceFrag.glsl +0 -0
  12. data/examples/{complete → data_path}/data/displaceVert.glsl +0 -0
  13. data/examples/{complete → data_path}/data/lachoy.jpg +0 -0
  14. data/examples/{complete → data_path}/data/landscape.glsl +0 -0
  15. data/examples/{complete → data_path}/data/monjori.glsl +0 -0
  16. data/examples/{complete → data_path}/data/moon.jpg +0 -0
  17. data/examples/{complete → data_path}/data/sea.jpg +0 -0
  18. data/examples/{complete → data_path}/edge_detection.rb +2 -2
  19. data/examples/{complete → data_path}/glsl_heightmap_noise.rb +9 -5
  20. data/examples/{complete → data_path}/kinetic_type.rb +5 -5
  21. data/examples/{complete → data_path}/landscape.rb +11 -9
  22. data/examples/{complete → data_path}/linear_image.rb +2 -2
  23. data/examples/{complete → data_path}/monjori.rb +7 -5
  24. data/examples/regular/arcball_box.rb +3 -13
  25. data/examples/regular/arcball_constrain.rb +12 -21
  26. data/examples/regular/bezier_playground.rb +32 -31
  27. data/examples/regular/circle_collision.rb +9 -9
  28. data/examples/regular/colors_two.rb +2 -1
  29. data/examples/regular/creating_colors.rb +2 -2
  30. data/examples/regular/drawolver.rb +1 -0
  31. data/examples/regular/elegant_ball.rb +1 -1
  32. data/examples/regular/empathy.rb +11 -10
  33. data/examples/regular/fern.rb +1 -0
  34. data/examples/regular/fibonacci_sphere.rb +1 -0
  35. data/examples/regular/flight_patterns.rb +6 -5
  36. data/examples/regular/fractions.rb +1 -0
  37. data/examples/regular/grapher.rb +6 -5
  38. data/examples/regular/gravity.rb +17 -17
  39. data/examples/regular/grey_circles.rb +2 -2
  40. data/examples/regular/jwishy.rb +5 -6
  41. data/examples/regular/letters.rb +19 -19
  42. data/examples/regular/liquidy.rb +5 -4
  43. data/examples/regular/mouse_button_demo.rb +5 -7
  44. data/examples/regular/polyhedrons.rb +1 -0
  45. data/examples/regular/raining.rb +6 -5
  46. data/examples/regular/ribbon_doodle.rb +1 -1
  47. data/examples/regular/select_file.rb +32 -0
  48. data/examples/regular/select_image.rb +40 -0
  49. data/examples/regular/slider_demo.rb +2 -1
  50. data/examples/regular/slider_example.rb +1 -1
  51. data/examples/regular/slider_simple.rb +1 -1
  52. data/examples/regular/tree.rb +7 -6
  53. data/lib/propane/creators/sketch_writer.rb +66 -0
  54. data/lib/propane/library_loader.rb +1 -5
  55. data/lib/propane/runner.rb +4 -3
  56. data/lib/propane/version.rb +1 -1
  57. data/library/file_chooser/chooser.rb +20 -0
  58. data/library/file_chooser/file_chooser.rb +20 -0
  59. data/pom.rb +1 -1
  60. data/pom.xml +1 -1
  61. data/propane.gemspec +1 -1
  62. data/src/monkstone/MathToolModule.java +63 -47
  63. data/src/monkstone/filechooser/Chooser.java +44 -0
  64. data/test/create_test.rb +48 -0
  65. metadata +30 -23
  66. data/lib/propane/creators/creator.rb +0 -136
@@ -1,15 +1,15 @@
1
+ #!/usr/bin/env jruby -v -w
1
2
  require 'propane'
2
3
 
3
-
4
4
  # Based on http://processing.org/learning/topics/circlecollision.html
5
- class CircleCollision < Propane::App
5
+ class CircleCollision < Propane::App
6
6
  attr_reader :balls
7
-
7
+
8
8
  def setup
9
9
  size 640, 360
10
10
  @balls = [Ball.new(100, 40, 20), Ball.new(200, 100, 80)]
11
11
  end
12
-
12
+
13
13
  def draw
14
14
  background(51)
15
15
  balls.each do |b|
@@ -25,18 +25,18 @@ end
25
25
  class Ball
26
26
  include Propane::Proxy, Math
27
27
  attr_accessor :position, :r, :m, :velocity
28
-
28
+
29
29
  def initialize(x = 0.0, y = 0.0, r = 0.0)
30
30
  @position = Vec2D.new(x, y)
31
31
  @r = r
32
32
  @m = r * 0.1
33
33
  @velocity = Vec2D.new(rand(-3.0..3), rand(-3.0..3))
34
34
  end
35
-
35
+
36
36
  def update
37
37
  @position += velocity
38
38
  end
39
-
39
+
40
40
  def check_boundary(width, height)
41
41
  unless (r..width - r).include?(position.x)
42
42
  (position.x > width - r) ? position.x = width - r : position.x = r
@@ -46,7 +46,7 @@ class Ball
46
46
  (position.y > height - r) ? position.y = height - r : position.y = r
47
47
  velocity.y *= -1
48
48
  end
49
-
49
+
50
50
  def check_collision(other_ball)
51
51
  # get distances between the balls components
52
52
  difference = other_ball.position - position
@@ -105,7 +105,7 @@ class Ball
105
105
  other_ball.velocity.x = cosine * final_velocities[1].x - sine * final_velocities[1].y
106
106
  other_ball.velocity.y = cosine * final_velocities[1].y + sine * final_velocities[1].x
107
107
  end
108
-
108
+
109
109
  def display
110
110
  no_stroke
111
111
  fill(204)
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env jruby -v -w
1
2
  # Creating Colors (Homage to Albers).
2
3
  #
3
4
  require 'propane'
@@ -7,7 +8,7 @@ require 'propane'
7
8
  class CreatingColors < Propane::App
8
9
  attr_reader :redder, :yellower, :orangish
9
10
  def setup
10
- size 640, 600
11
+ size 640, 360
11
12
  # palette = web_to_color_array(['#CC6600', '#CC9900', '#993300'].to_java(:string))
12
13
  palette = web_to_color_array(['#CC6600', '#CC9900', '#993300'])
13
14
  # @redder = color 204, 102, 0
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ #!/usr/bin/env jruby -v -w
2
2
  # frozen_string_literal: true
3
3
  # Creating Colors (Homage to Albers).
4
4
  #
@@ -8,7 +8,7 @@ require 'propane'
8
8
  # in the program by their name, rather than a number.
9
9
  class CreatingColors < Propane::App
10
10
  attr_reader :redder, :yellower, :orangish
11
-
11
+
12
12
  WEB = %w(#CC6600 #CC9900 #993300)
13
13
 
14
14
  def setup
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env jruby -v -w
1
2
  require 'propane'
2
3
 
3
4
  # Example to show how to use the VecMath library.
@@ -1,9 +1,9 @@
1
+ #!/usr/bin/env jruby -v -w
1
2
  # elegant_ball.rb
2
3
  # After a vanilla processing sketch by
3
4
  # Ben Notorianni aka lazydog
4
5
  #
5
6
  # elegant_ball.rb
6
- #!/usr/bin/env jruby
7
7
  require 'propane'
8
8
 
9
9
  class ElegantBall < Propane::App
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env jruby -v -W2
1
2
  # Empathy
2
3
  # original by Kyle McDonald
3
4
  # http://www.openprocessing.org/visuals/?visualID=1182
@@ -12,16 +13,16 @@ ROTATION = 0.004
12
13
  LINE_LENGTH = 37
13
14
 
14
15
  class Empathy < Propane::App
15
-
16
+
16
17
  attr_reader :cells
17
-
18
+
18
19
  def setup
19
20
  size(500, 500)
20
21
  stroke(0, 0, 0, 25)
21
22
  @cells = create_cells(CELL_COUNT)
22
23
  start_cell_updates
23
24
  end
24
-
25
+
25
26
  def create_cells(n)
26
27
  (0..n).map do |i|
27
28
  a = i + rand(PI / 9.0)
@@ -29,20 +30,20 @@ class Empathy < Propane::App
29
30
  Cell.new((r * cos(a) + width / 2).to_i, (r * sin(a) + height / 2).to_i)
30
31
  end
31
32
  end
32
-
33
+
33
34
  def start_cell_updates
34
35
  Thread.new { Kernel.loop { cells.each(&:update) } }
35
36
  end
36
-
37
+
37
38
  def draw
38
39
  background 255
39
40
  cells.each(&:draw_line) if started?
40
41
  end
41
-
42
+
42
43
  def started?
43
44
  pmouse_x != 0 || pmouse_y != 0
44
45
  end
45
-
46
+
46
47
  def mouse_pressed
47
48
  cells.each(&:reset)
48
49
  end
@@ -58,18 +59,18 @@ class Cell
58
59
  @x, @y = x, y
59
60
  reset
60
61
  end
61
-
62
+
62
63
  def reset
63
64
  @spin, @angle = 0, 0
64
65
  end
65
-
66
+
66
67
  def update
67
68
  det = ((pmouse_x - x) * (mouse_y - y) - (mouse_x - x) * (pmouse_y - y))
68
69
  @spin += ROTATION * det.to_f / dist(x, y, mouse_x, mouse_y)
69
70
  @spin *= SLOW_DOWN
70
71
  @angle += spin
71
72
  end
72
-
73
+
73
74
  def draw_line
74
75
  d = LINE_LENGTH * spin + 0.001
75
76
  line(x, y, x + d * cos(angle), y + d * sin(angle))
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env jruby -v -w
1
2
  require 'propane'
2
3
 
3
4
  class Fern < Propane::App
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env jruby -v -W2
1
2
  require 'propane'
2
3
  require 'arcball'
3
4
 
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env jruby -v -w
1
2
  # Description:
2
3
  # Flight Patterns is that ol' Euruko 2008 demo.
3
4
  # Reworked version for Propane
@@ -8,9 +9,9 @@ require 'propane'
8
9
 
9
10
  class FlightPatterns < Propane::App
10
11
  load_library :boids
11
-
12
+
12
13
  attr_reader :flee, :radius
13
-
14
+
14
15
  def setup
15
16
  size 1024, 768, P3D
16
17
  sphere_detail 8
@@ -24,16 +25,16 @@ class FlightPatterns < Propane::App
24
25
  @flee = false
25
26
  @flocks = (0..3).map { Boids.flock(n: 20, x: 0, y: 0, w: width, h: height) }
26
27
  end
27
-
28
+
28
29
  def mouse_pressed
29
30
  @click = !@click
30
31
  end
31
-
32
+
32
33
  def key_pressed
33
34
  return unless key == 'f'
34
35
  @flee = !@flee
35
36
  end
36
-
37
+
37
38
  def draw
38
39
  background 0.05
39
40
  ambient_light 0.01, 0.01, 0.01
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env jruby -v -w
1
2
  # fractions.rb, by Martin Prout
2
3
  require 'propane'
3
4
 
@@ -1,15 +1,16 @@
1
+ #!/usr/bin/env jruby -v -w
1
2
  require 'propane'
2
3
 
3
4
  class Grapher < Propane::App
4
5
  # Grapher is based on a context free art design
5
6
  # by ColorMeImpressed (takes a bit of time to run)
6
7
  # http://www.contextfreeart.org/gallery/view.php?id=2844
7
- #
8
+ #
8
9
  CMIN = -2.0 # Important to specify float else get random int from range?
9
10
  CMAX = 2.0
10
11
  FUZZ = 0.04
11
12
  SZ = 5
12
-
13
+
13
14
  def setup
14
15
  size 600, 600
15
16
  no_stroke
@@ -17,12 +18,12 @@ class Grapher < Propane::App
17
18
  background(0)
18
19
  frame_rate(4_000)
19
20
  end
20
-
21
+
21
22
  def draw
22
23
  translate(width / 2, height / 2)
23
24
  dot(rand(-180..180), rand(-180..180), rand(CMIN..CMAX)) unless frame_count > 200_000
24
25
  end
25
-
26
+
26
27
  def dot(px, py, c)
27
28
  func = DegLut.sin(px) + DegLut.sin(py) + c
28
29
  # change function to change the graph eg.
@@ -33,7 +34,7 @@ class Grapher < Propane::App
33
34
  else
34
35
  dot(rand(-180..180), rand(-180..180), rand(CMIN..CMAX))
35
36
  end
36
- end
37
+ end
37
38
  end
38
39
 
39
40
  Grapher.new title: 'Grapher'
@@ -1,10 +1,11 @@
1
+ #!/usr/bin/env jruby -v -w
2
+ # After Gravity by Christian Hahn
3
+ # mouse click on window
1
4
  require 'propane'
2
5
 
3
6
  class Gravity < Propane::App
4
- # After Gravity by Christian Hahn
5
-
6
7
  attr_reader :particles, :grabbed
7
-
8
+
8
9
  def setup
9
10
  size 600, 500
10
11
  @particles = []
@@ -15,24 +16,24 @@ class Gravity < Propane::App
15
16
  ellipse_mode CENTER
16
17
  color_mode RGB, 255
17
18
  end
18
-
19
+
19
20
  def draw
20
21
  no_stroke
21
22
  fill 0, 60
22
23
  rect 0, 0, width, height
23
24
  particles.each(&:run)
24
25
  end
25
-
26
+
26
27
  def mouse_pressed
27
28
  return if mouse_x == 0 || mouse_y == 0
28
29
  return if particle_grab
29
30
  particles << Particle.new(mouse_x, mouse_y, rand(0.1..8))
30
31
  end
31
-
32
+
32
33
  def mouse_released
33
34
  @grabbed = nil
34
35
  end
35
-
36
+
36
37
  def particle_grab
37
38
  @grabbed = particles.detect { |p| dist(mouse_x, mouse_y, p.x1, p.y1) < p.diameter/2 }
38
39
  end
@@ -42,7 +43,7 @@ class Particle
42
43
  include Math, Propane::Proxy
43
44
  GRAVITY = 1.0
44
45
  attr_reader :x0, :y0, :x1, :y1, :diameter, :mass_amount
45
-
46
+
46
47
  def initialize(x, y, mass)
47
48
  @x0, @y0, @x1, @y1 = x, y, x, y
48
49
  @x_speed, @y_speed = 0, 0
@@ -50,7 +51,7 @@ class Particle
50
51
  @mass_amount = mass
51
52
  @diameter = sqrt(mass_amount) * 20
52
53
  end
53
-
54
+
54
55
  def collect_force
55
56
  @x_accel, @y_accel = 0, 0
56
57
  @min_dist = 1000
@@ -66,29 +67,29 @@ class Particle
66
67
  end
67
68
  end
68
69
  end
69
-
70
+
70
71
  def move
71
72
  @x_speed, @y_speed = 0, 0 if grabbed?
72
73
  @x_speed += @x_accel
73
74
  @y_speed += @y_accel
74
75
  @x1, @y1 = x0 + @x_speed, y0 + @y_speed
75
76
  end
76
-
77
+
77
78
  def grabbed?
78
79
  $app.grabbed == self
79
80
  end
80
-
81
+
81
82
  def run
82
83
  collect_force
83
84
  move
84
85
  render
85
86
  end
86
-
87
+
87
88
  def render
88
89
  no_stroke
89
90
  grabbed? ? render_grabbed : render_free
90
91
  end
91
-
92
+
92
93
  def render_free
93
94
  charge_col = 1000.0 / @min_dist / 50.0
94
95
  tot_col_1 = 100 + charge_col * 6
@@ -101,7 +102,7 @@ class Particle
101
102
  ellipse x1, y1, diameter, diameter
102
103
  @x0, @y0 = x1, y1
103
104
  end
104
-
105
+
105
106
  def render_grabbed
106
107
  fill 150, 150, 255, 100
107
108
  ellipse mouse_x, mouse_y, diameter + 8, diameter + 8
@@ -110,11 +111,10 @@ class Particle
110
111
  ellipse mouse_x, mouse_y, diameter, diameter
111
112
  @x0, @y0 = mouse_x, mouse_y
112
113
  end
113
-
114
+
114
115
  def angle_of(x1, y1, x2, y2)
115
116
  Math::PI - atan2(y1 - y2, x1 - x2)
116
117
  end
117
118
  end
118
119
 
119
-
120
120
  Gravity.new title: 'Gravity'
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ #!/usr/bin/env jruby -v -w
2
2
  # frozen_string_literal: true
3
3
  # grey circles : borrowed from https://github.com/quil/quil
4
4
  require 'propane'
@@ -9,7 +9,7 @@ class GreyCircles < Propane::App
9
9
  size(323, 200)
10
10
  smooth
11
11
  frame_rate(1)
12
- background(200)
12
+ background(200)
13
13
  end
14
14
 
15
15
  def draw
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ #!/usr/bin/env jruby -v -W2
2
2
  # frozen_string_literal: true
3
3
  require 'propane'
4
4
  # Iconic ruby-processing example for Propane
@@ -6,7 +6,7 @@ class JWishy < Propane::App
6
6
  load_library :control_panel
7
7
 
8
8
  attr_reader :alpha, :back_color, :bluish, :hide, :magnitude, :panel
9
- attr_reader :x_wiggle, :y_wiggle
9
+ attr_reader :x_wiggle, :y_wiggle, :go_big, :shape
10
10
 
11
11
  def setup
12
12
  size 600, 600
@@ -15,13 +15,12 @@ class JWishy < Propane::App
15
15
  c.look_feel 'Nimbus'
16
16
  c.slider :bluish, 0.0..1.0, 0.5
17
17
  c.slider :alpha, 0.0..1.0, 0.5
18
- c.checkbox :go_big
18
+ c.checkbox :go_big, false
19
19
  c.button :reset
20
- c.menu :shape, %w(oval square triangle)
20
+ c.menu :shape, %w(oval square triangle), 'oval'
21
21
  @panel = c
22
22
  end
23
23
  @hide = false
24
- @shape = 'oval'
25
24
  @x_wiggle, @y_wiggle = 10.0, 0
26
25
  @magnitude = 8.15
27
26
  @back_color = [0.06, 0.03, 0.18]
@@ -50,7 +49,7 @@ class JWishy < Propane::App
50
49
  # Seed the random numbers for consistent placement from frame to frame
51
50
  srand(0)
52
51
  horiz, vert, mag = x_wiggle, y_wiggle, magnitude
53
- if @go_big
52
+ if go_big
54
53
  mag *= 2
55
54
  vert /= 2
56
55
  end
@@ -1,36 +1,36 @@
1
- # encoding: utf-8
1
+ #!/usr/bin/env jruby -v -W2
2
2
  # frozen_string_literal: true
3
- # Letters.
4
- #
3
+ # Letters. Hit any key.
4
+ #
5
5
  require 'propane'
6
6
 
7
7
  LETTERS = ('A'..'Z').to_a + ('0'..'9').to_a + ('a'..'z').to_a
8
8
 
9
- # Draws letters to the screen. This requires loading a font,
9
+ # Draws letters to the screen. This requires loading a font,
10
10
  # setting the font, and then drawing the letters.
11
11
  class Letters < Propane::App
12
- def setup
13
- size 640, 360
14
- @font = create_font 'Georgia', 24
12
+ def setup
13
+ size 640, 360
14
+ @font = create_font 'Georgia', 24
15
15
  text_font @font
16
- text_align CENTER, CENTER
16
+ text_align CENTER, CENTER
17
17
  end
18
-
19
- def draw
20
- background 0
21
- translate 24, 32
18
+
19
+ def draw
20
+ background 0
21
+ translate 24, 32
22
22
  x, y = 0.0, 0.0
23
- gap = 30
24
- # ranges -> arrays -> joined!
25
- LETTERS.each do |letter|
23
+ gap = 30
24
+ # ranges -> arrays -> joined!
25
+ LETTERS.each do |letter|
26
26
  fill 255
27
27
  fill 204, 204, 0 if letter =~ /[AEIOU]/
28
28
  fill 0, 204, 204 if letter =~ /[aeiou]/
29
29
  fill 153 if letter =~ /[0-9]/
30
- fill 255, 100, 0 if key_pressed? && (letter.downcase.eql? key)
31
- fill 0, 100, 255 if key_pressed? && (letter.upcase.eql? key)
32
- text letter, x, y
33
- x += gap
30
+ fill 255, 100, 0 if key_pressed? && (letter.downcase.eql? key)
31
+ fill 0, 100, 255 if key_pressed? && (letter.upcase.eql? key)
32
+ text letter, x, y
33
+ x += gap
34
34
  if x > width - 30
35
35
  x = 0
36
36
  y += gap