propane 0.7.0-java → 0.8.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -3
- data/CHANGELOG.md +2 -0
- data/README.md +3 -5
- data/examples/{complete → data_path}/Rakefile +2 -2
- data/examples/{complete → data_path}/bw_shader.rb +7 -6
- data/examples/{complete → data_path}/data/Texture01.jpg +0 -0
- data/examples/{complete → data_path}/data/Texture02.jpg +0 -0
- data/examples/{complete → data_path}/data/Univers45.vlw +0 -0
- data/examples/{complete → data_path}/data/bwfrag.glsl +0 -0
- data/examples/{complete → data_path}/data/displaceFrag.glsl +0 -0
- data/examples/{complete → data_path}/data/displaceVert.glsl +0 -0
- data/examples/{complete → data_path}/data/lachoy.jpg +0 -0
- data/examples/{complete → data_path}/data/landscape.glsl +0 -0
- data/examples/{complete → data_path}/data/monjori.glsl +0 -0
- data/examples/{complete → data_path}/data/moon.jpg +0 -0
- data/examples/{complete → data_path}/data/sea.jpg +0 -0
- data/examples/{complete → data_path}/edge_detection.rb +2 -2
- data/examples/{complete → data_path}/glsl_heightmap_noise.rb +9 -5
- data/examples/{complete → data_path}/kinetic_type.rb +5 -5
- data/examples/{complete → data_path}/landscape.rb +11 -9
- data/examples/{complete → data_path}/linear_image.rb +2 -2
- data/examples/{complete → data_path}/monjori.rb +7 -5
- data/examples/regular/arcball_box.rb +3 -13
- data/examples/regular/arcball_constrain.rb +12 -21
- data/examples/regular/bezier_playground.rb +32 -31
- data/examples/regular/circle_collision.rb +9 -9
- data/examples/regular/colors_two.rb +2 -1
- data/examples/regular/creating_colors.rb +2 -2
- data/examples/regular/drawolver.rb +1 -0
- data/examples/regular/elegant_ball.rb +1 -1
- data/examples/regular/empathy.rb +11 -10
- data/examples/regular/fern.rb +1 -0
- data/examples/regular/fibonacci_sphere.rb +1 -0
- data/examples/regular/flight_patterns.rb +6 -5
- data/examples/regular/fractions.rb +1 -0
- data/examples/regular/grapher.rb +6 -5
- data/examples/regular/gravity.rb +17 -17
- data/examples/regular/grey_circles.rb +2 -2
- data/examples/regular/jwishy.rb +5 -6
- data/examples/regular/letters.rb +19 -19
- data/examples/regular/liquidy.rb +5 -4
- data/examples/regular/mouse_button_demo.rb +5 -7
- data/examples/regular/polyhedrons.rb +1 -0
- data/examples/regular/raining.rb +6 -5
- data/examples/regular/ribbon_doodle.rb +1 -1
- data/examples/regular/select_file.rb +32 -0
- data/examples/regular/select_image.rb +40 -0
- data/examples/regular/slider_demo.rb +2 -1
- data/examples/regular/slider_example.rb +1 -1
- data/examples/regular/slider_simple.rb +1 -1
- data/examples/regular/tree.rb +7 -6
- data/lib/propane/creators/sketch_writer.rb +66 -0
- data/lib/propane/library_loader.rb +1 -5
- data/lib/propane/runner.rb +4 -3
- data/lib/propane/version.rb +1 -1
- data/library/file_chooser/chooser.rb +20 -0
- data/library/file_chooser/file_chooser.rb +20 -0
- data/pom.rb +1 -1
- data/pom.xml +1 -1
- data/propane.gemspec +1 -1
- data/src/monkstone/MathToolModule.java +63 -47
- data/src/monkstone/filechooser/Chooser.java +44 -0
- data/test/create_test.rb +48 -0
- metadata +30 -23
- data/lib/propane/creators/creator.rb +0 -136
data/examples/regular/liquidy.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
#!/usr/bin/env jruby -v -W2
|
1
2
|
require 'propane'
|
2
3
|
require 'pbox2d'
|
3
4
|
require_relative 'lib/particle_system'
|
@@ -7,7 +8,7 @@ Vect = Struct.new(:x, :y)
|
|
7
8
|
|
8
9
|
class Liquidy < Propane::App
|
9
10
|
attr_reader :box2d, :boundaries, :systems
|
10
|
-
|
11
|
+
|
11
12
|
def setup
|
12
13
|
size(400, 300)
|
13
14
|
@box2d = WorldBuilder.build(app: self, gravity: [0, -20])
|
@@ -17,7 +18,7 @@ class Liquidy < Propane::App
|
|
17
18
|
Boundary.new(box2d, Vect.new(250, 175), Vect.new(300, 5), 0.5)
|
18
19
|
]
|
19
20
|
end
|
20
|
-
|
21
|
+
|
21
22
|
def draw
|
22
23
|
background(255)
|
23
24
|
# Run all the particle systems
|
@@ -30,11 +31,11 @@ class Liquidy < Propane::App
|
|
30
31
|
# Display all the boundaries
|
31
32
|
boundaries.each(&:display)
|
32
33
|
end
|
33
|
-
|
34
|
+
|
34
35
|
def mouse_pressed
|
35
36
|
# Add a new Particle System whenever the mouse is clicked
|
36
37
|
systems << ParticleSystem.new(box2d, 0, mouse_x, mouse_y)
|
37
|
-
end
|
38
|
+
end
|
38
39
|
end
|
39
40
|
|
40
41
|
Liquidy.new title: 'Liquidy'
|
@@ -1,23 +1,21 @@
|
|
1
|
-
|
1
|
+
#!/usr/bin/env jruby -v -W2
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
5
|
-
require_relative '../../lib/propane' # temporary local
|
6
|
-
|
4
|
+
require_relative 'propane'
|
7
5
|
# Demo of Mouse Button
|
8
6
|
class MouseButtonDemo < Propane::App
|
9
7
|
# Click within the image and press
|
10
|
-
# the left and right mouse buttons to
|
8
|
+
# the left and right mouse buttons to
|
11
9
|
# change the value of the rectangle
|
12
10
|
def setup
|
13
11
|
size 300, 200
|
14
12
|
end
|
15
|
-
|
13
|
+
|
16
14
|
def draw
|
17
15
|
rect(25, 25, 150, 80)
|
18
16
|
end
|
19
17
|
|
20
|
-
def mouse_pressed
|
18
|
+
def mouse_pressed
|
21
19
|
case mouse_button
|
22
20
|
when LEFT
|
23
21
|
fill 0
|
data/examples/regular/raining.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
#!/usr/bin/env jruby -v -W2
|
1
2
|
require 'propane'
|
2
3
|
require_relative 'lib/rain_drops'
|
3
4
|
|
@@ -15,12 +16,12 @@ class Raining < Propane::App
|
|
15
16
|
#
|
16
17
|
# License: Same as processing
|
17
18
|
#
|
18
|
-
|
19
|
+
|
19
20
|
attr_reader :drops, :weight, :drops_size, :paused
|
20
|
-
|
21
|
+
|
21
22
|
def setup
|
22
23
|
size 640, 480
|
23
|
-
frame_rate 30
|
24
|
+
frame_rate 30
|
24
25
|
@drops_size = 20
|
25
26
|
@weight = 20
|
26
27
|
@drops = RainDrops.new width, height
|
@@ -28,7 +29,7 @@ class Raining < Propane::App
|
|
28
29
|
font = create_font('Georgia', 15)
|
29
30
|
text_font(font)
|
30
31
|
end
|
31
|
-
|
32
|
+
|
32
33
|
def draw
|
33
34
|
return if paused
|
34
35
|
# we fill up with new drops randomly
|
@@ -39,7 +40,7 @@ class Raining < Propane::App
|
|
39
40
|
form = '%d of %d drops with a size of %d'
|
40
41
|
text(format(form, drops.size, drops_size, weight), 10, 20)
|
41
42
|
end
|
42
|
-
|
43
|
+
|
43
44
|
def key_pressed
|
44
45
|
case key
|
45
46
|
when '+'
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env jruby -v -W2
|
2
|
+
|
3
|
+
############################
|
4
|
+
# Use mouse drag to rotate
|
5
|
+
# The arcball. Use mousewheel
|
6
|
+
# to zoom. Hold down x, y, z
|
7
|
+
# to constrain rotation axis.
|
8
|
+
############################
|
9
|
+
|
10
|
+
require 'propane'
|
11
|
+
|
12
|
+
class SelectFile < Propane::App
|
13
|
+
|
14
|
+
load_library :file_chooser
|
15
|
+
###########
|
16
|
+
# Example Native File Chooser using vanilla processing
|
17
|
+
# select_input, and file_selected
|
18
|
+
###########
|
19
|
+
|
20
|
+
def setup
|
21
|
+
size 200, 100
|
22
|
+
# java_signature 'void selectInput(String, String)'
|
23
|
+
select_input('Select a File', 'file_selected')
|
24
|
+
end
|
25
|
+
|
26
|
+
# signature 'void file_selected(java.io.File file)'
|
27
|
+
def file_selected(file)
|
28
|
+
puts file.get_absolute_path unless file.nil?
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
SelectFile.new
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env jruby -v -W2
|
2
|
+
|
3
|
+
require 'propane'
|
4
|
+
|
5
|
+
class SelectImage < Propane::App
|
6
|
+
|
7
|
+
load_library :file_chooser
|
8
|
+
###########
|
9
|
+
# Example Native File Chooser using vanilla processing
|
10
|
+
# select_input, and file_selected
|
11
|
+
###########
|
12
|
+
attr_reader :img
|
13
|
+
|
14
|
+
def setup
|
15
|
+
size(400, 200)
|
16
|
+
fill 0, 0, 200
|
17
|
+
text('Click Window to Load Image', 10, 100)
|
18
|
+
end
|
19
|
+
|
20
|
+
def draw
|
21
|
+
image(img, 0, 0) unless img.nil?
|
22
|
+
end
|
23
|
+
|
24
|
+
def file_selected(selection)
|
25
|
+
if selection.nil?
|
26
|
+
puts 'Nothing Chosen'
|
27
|
+
else
|
28
|
+
@img = load_image(selection.get_absolute_path)
|
29
|
+
img.resize(width, height)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def mouse_clicked
|
34
|
+
@img = nil
|
35
|
+
# java_signature 'void selectInput(String, String)'
|
36
|
+
select_input('Select Image File', 'file_selected')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
SelectImage.new
|
data/examples/regular/tree.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
#!/usr/bin/env jruby -v -W2
|
1
2
|
require 'propane'
|
2
3
|
|
3
4
|
class Tree < Propane::App
|
@@ -13,7 +14,7 @@ class Tree < Propane::App
|
|
13
14
|
@start_time = Time.now
|
14
15
|
@frame_time = nil
|
15
16
|
end
|
16
|
-
|
17
|
+
|
17
18
|
def draw
|
18
19
|
t = Time.now
|
19
20
|
if @frame_time
|
@@ -21,7 +22,7 @@ class Tree < Propane::App
|
|
21
22
|
# printf "%0.1f fps\n", fps
|
22
23
|
end
|
23
24
|
@frame_time = t
|
24
|
-
|
25
|
+
|
25
26
|
background 0
|
26
27
|
stroke 1, 1, 1
|
27
28
|
# Let's pick an angle 0 to 90 degrees based on the mouse position
|
@@ -37,7 +38,7 @@ class Tree < Propane::App
|
|
37
38
|
translate(0, -h)
|
38
39
|
# Start the recursive branching!
|
39
40
|
branch(h)
|
40
|
-
|
41
|
+
|
41
42
|
@x += @dx
|
42
43
|
if @x < 0
|
43
44
|
puts "Time after this iteration: " + (Time.now - @start_time).to_s
|
@@ -47,7 +48,7 @@ class Tree < Propane::App
|
|
47
48
|
@x += @dx * 2
|
48
49
|
end
|
49
50
|
end
|
50
|
-
|
51
|
+
|
51
52
|
def branch(h)
|
52
53
|
# Each branch will be 2/3rds the size of the previous one
|
53
54
|
h *= 0.66
|
@@ -60,7 +61,7 @@ class Tree < Propane::App
|
|
60
61
|
translate(0, -h) # Move to the end of the branch
|
61
62
|
branch(h) # Ok, now call myself to draw two new branches!!
|
62
63
|
pop_matrix # Whenever we get back here, we "pop" in order to restore the previous matrix state
|
63
|
-
|
64
|
+
|
64
65
|
# Repeat the same thing, only branch off to the "left" this time!
|
65
66
|
push_matrix
|
66
67
|
rotate(-@theta)
|
@@ -69,7 +70,7 @@ class Tree < Propane::App
|
|
69
70
|
branch(h)
|
70
71
|
pop_matrix
|
71
72
|
end
|
72
|
-
end
|
73
|
+
end
|
73
74
|
end
|
74
75
|
|
75
76
|
Tree.new title: 'Tree'
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
# The SketchParameters class knows how to format, size, title & class name
|
3
|
+
class SketchParameters
|
4
|
+
attr_reader :name, :args
|
5
|
+
def initialize(name:, args:)
|
6
|
+
@name = name
|
7
|
+
@args = args
|
8
|
+
end
|
9
|
+
|
10
|
+
def class_name
|
11
|
+
name.split('_').collect(&:capitalize).join
|
12
|
+
end
|
13
|
+
|
14
|
+
def sketch_title
|
15
|
+
human = name.split('_').collect(&:capitalize).join(' ')
|
16
|
+
format("sketch_title '%s'", human)
|
17
|
+
end
|
18
|
+
|
19
|
+
def sketch_size
|
20
|
+
mode = args.length == 3 ? format(', %s', args[2].upcase) : ''
|
21
|
+
return 'size 200, 200' if args.empty?
|
22
|
+
format('size %d, %d%s', args[0].to_i, args[1].to_i, mode)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# The file writer can write a sketch when given instance of Sketch type
|
27
|
+
class SketchWriter
|
28
|
+
attr_reader :file, :param
|
29
|
+
|
30
|
+
def initialize(path, args)
|
31
|
+
@param = SketchParameters.new(name: path, args: args)
|
32
|
+
@file = format('%s/%s.rb', File.dirname(path), path)
|
33
|
+
end
|
34
|
+
|
35
|
+
def write(creator)
|
36
|
+
sketch = creator.code(param)
|
37
|
+
File.open(file, 'w+') { |f| f.write sketch.join("\n") }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# A simple class wrapped sketch
|
42
|
+
class ClassSketch
|
43
|
+
INDENT ||= ' '
|
44
|
+
def code(param)
|
45
|
+
lines = [
|
46
|
+
'# frozen_string_literal: false',
|
47
|
+
"require 'propane'",
|
48
|
+
''
|
49
|
+
]
|
50
|
+
lines << format('class %s < Propane::App', param.class_name)
|
51
|
+
lines.concat method_lines('setup', param.sketch_size)
|
52
|
+
lines.concat method_lines('draw', '')
|
53
|
+
lines << 'end'
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def method_lines(name, content)
|
59
|
+
one = format('%sdef %s', INDENT, name)
|
60
|
+
two = content.empty? ? '' : format(' %s%s', INDENT, content)
|
61
|
+
three = format('%send', INDENT)
|
62
|
+
return [one, two, three] if /draw/ =~ name
|
63
|
+
[one, two, three, '']
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
@@ -1,8 +1,4 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
# frozen_string_literal: false
|
3
|
-
|
4
|
-
require "#{PROPANE_ROOT}/lib/propane"
|
5
|
-
|
6
2
|
# The processing wrapper module
|
7
3
|
module Propane
|
8
4
|
# Encapsulate library loader functionality as a class
|
@@ -112,6 +108,6 @@ module Propane
|
|
112
108
|
end
|
113
109
|
end
|
114
110
|
nil
|
115
|
-
end
|
111
|
+
end
|
116
112
|
end
|
117
113
|
end
|
data/lib/propane/runner.rb
CHANGED
@@ -37,7 +37,7 @@ module Propane
|
|
37
37
|
opt_parser = OptionParser.new do |opts|
|
38
38
|
# Set a banner, displayed at the top
|
39
39
|
# of the help screen.
|
40
|
-
opts.banner = 'Usage: propane [options] sketch.rb'
|
40
|
+
opts.banner = 'Usage: propane [options] [<sketch.rb>]'
|
41
41
|
|
42
42
|
# Define the options, and what they do
|
43
43
|
options[:version] = false
|
@@ -109,8 +109,9 @@ module Propane
|
|
109
109
|
end
|
110
110
|
|
111
111
|
def create
|
112
|
-
require_relative 'creators/
|
113
|
-
|
112
|
+
require_relative 'creators/sketch_writer'
|
113
|
+
sketch = ClassSketch.new
|
114
|
+
SketchWriter.new(File.basename(filename, '.rb'), argc).write(sketch)
|
114
115
|
end
|
115
116
|
|
116
117
|
def show_version
|
data/lib/propane/version.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Usage: :wq
|
3
|
+
# load_library :chooser
|
4
|
+
#
|
5
|
+
# def setup
|
6
|
+
# java_signature 'void selectInput(String, String)'
|
7
|
+
# selectInput('Select a file to process:', 'fileSelected')
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# def fileSelected(selection)
|
11
|
+
# if selection.nil?
|
12
|
+
# puts 'Window was closed or the user hit cancel.'
|
13
|
+
# else
|
14
|
+
# puts format('User selected %s', selection.get_absolute_path)
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
class Propane::App
|
18
|
+
include Java::MonkstoneFilechooser::Chooser
|
19
|
+
Chooser
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Usage:
|
3
|
+
# load_library :file_chooser
|
4
|
+
# class ...
|
5
|
+
# def setup
|
6
|
+
# java_signature 'void selectInput(String, String)'
|
7
|
+
# selectInput('Select a file to process:', 'fileSelected')
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# def fileSelected(selection)
|
11
|
+
# if selection.nil?
|
12
|
+
# puts 'Window was closed or the user hit cancel.'
|
13
|
+
# else
|
14
|
+
# puts format('User selected %s', selection.get_absolute_path)
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
# ...
|
18
|
+
class Propane::App
|
19
|
+
include Java::MonkstoneFilechooser::Chooser
|
20
|
+
end
|
data/pom.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
project 'rp5extras', 'https://github.com/monkstone/propane' do
|
3
3
|
model_version '4.0.0'
|
4
|
-
id 'propane:rp5extras', '0.
|
4
|
+
id 'propane:rp5extras', '0.8.0'
|
5
5
|
packaging 'jar'
|
6
6
|
description 'rp5extras for propane'
|
7
7
|
organization 'ruby-processing', 'https://ruby-processing.github.io'
|
data/pom.xml
CHANGED
@@ -11,7 +11,7 @@ DO NOT MODIFIY - GENERATED CODE
|
|
11
11
|
<modelVersion>4.0.0</modelVersion>
|
12
12
|
<groupId>propane</groupId>
|
13
13
|
<artifactId>rp5extras</artifactId>
|
14
|
-
<version>0.
|
14
|
+
<version>0.8.0</version>
|
15
15
|
<name>rp5extras</name>
|
16
16
|
<description>rp5extras for propane</description>
|
17
17
|
<url>https://github.com/monkstone/propane</url>
|