Skip to content

Commit 93621f9

Browse files
committed
class wrapper required for picrate
1 parent e029122 commit 93621f9

File tree

1 file changed

+81
-75
lines changed

1 file changed

+81
-75
lines changed
Lines changed: 81 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,94 @@
1-
load_library :pgs
2-
%w[
3-
PGS_Contour PGS_Conversion PGS_Morphology PGS_Transformation PGS_ShapeBoolean
4-
].each do |klass|
5-
java_import "micycle.pgs.#{klass}"
6-
end
1+
#!/usr/bin/env jruby
2+
require 'picrate'
73

8-
class Letter
9-
include Processing::Proxy
4+
class MinkShear < Processing::App
5+
load_library :pgs
6+
%w[
7+
PGS_Contour PGS_Conversion PGS_Morphology PGS_Transformation PGS_ShapeBoolean
8+
].each do |klass|
9+
java_import "micycle.pgs.#{klass}"
10+
end
1011

11-
attr_reader :hue, :l, :xn, :yn, :pos, :letter, :serif
12+
attr_reader :l1, :l2
1213

13-
def initialize(c)
14-
@pos = Vec2D.new(rand(width), rand(height))
15-
list = Java::ProcessingCore::PFont.list.to_a
16-
@serif = list.select { |fon| fon =~ /Serif/i }
17-
random_font = list.sample
18-
font = createFont(random_font, 96, true)
19-
@l = font.get_shape(c.to_java(:char))
20-
@hue = rand
21-
@xn = rand(4096)
22-
@yn = rand(4096)
23-
end
14+
class Letter
15+
include Processing::Proxy
2416

25-
def update
26-
@xn += 0.005
27-
@yn += 0.005
28-
pos.x = map1d(noise(xn), -1.0..1.0, 0..width)
29-
pos.y = map1d(noise(yn), -1.0..1.0, 0..height)
30-
@letter = PGS_Transformation.translate_to(l, 0, 0)
31-
@letter = PGS_Transformation.shear(letter,
32-
map1d(@pos.x, 0..width, -TWO_PI..TWO_PI),
33-
map1d(@pos.y, 0..height, -TWO_PI..TWO_PI)
34-
)
35-
@letter = PGS_Transformation.translate_to(letter, pos.x, pos.y)
36-
@letter = PGS_Morphology.simplify(letter, 1) # as some fonts have very dense vertices
37-
letter.setStroke(color(hue, 1, 1))
38-
end
17+
attr_reader :hue, :l, :xn, :yn, :pos, :letter, :serif
3918

40-
def randomise
41-
@hue = rand
42-
list = Java::ProcessingCore::PFont.list.to_a
43-
random_font = serif.sample
44-
font = createFont(random_font, 128, true)
45-
@l = font.getShape(rand(0..9).to_s.to_java(:char))
46-
end
47-
end
19+
def initialize(c)
20+
@pos = Vec2D.new(rand(width), rand(height))
21+
list = Java::ProcessingCore::PFont.list.to_a
22+
@serif = list.select { |fon| fon =~ /Serif/i }
23+
random_font = list.sample
24+
font = createFont(random_font, 96, true)
25+
@l = font.get_shape(c.to_java(:char))
26+
@hue = rand
27+
@xn = rand(4096)
28+
@yn = rand(4096)
29+
end
4830

31+
def update
32+
@xn += 0.005
33+
@yn += 0.005
34+
pos.x = map1d(noise(xn), -1.0..1.0, 0..width)
35+
pos.y = map1d(noise(yn), -1.0..1.0, 0..height)
36+
@letter = PGS_Transformation.translate_to(l, 0, 0)
37+
@letter = PGS_Transformation.shear(letter,
38+
map1d(@pos.x, 0..width, -TWO_PI..TWO_PI),
39+
map1d(@pos.y, 0..height, -TWO_PI..TWO_PI)
40+
)
41+
@letter = PGS_Transformation.translate_to(letter, pos.x, pos.y)
42+
@letter = PGS_Morphology.simplify(letter, 1) # as some fonts have very dense vertices
43+
letter.setStroke(color(hue, 1, 1))
44+
end
4945

50-
attr_reader :l1, :l2
46+
def randomise
47+
@hue = rand
48+
list = Java::ProcessingCore::PFont.list.to_a
49+
random_font = serif.sample
50+
font = createFont(random_font, 128, true)
51+
@l = font.getShape(rand(0..9).to_s.to_java(:char))
52+
end
53+
end
5154

52-
def setup
53-
sketch_title 'Mink Shear'
54-
color_mode(HSB, 1.0)
55-
@l1 = Letter.new('M')
56-
@l2 = Letter.new('L')
57-
end
55+
def setup
56+
sketch_title 'Mink Shear'
57+
color_mode(HSB, 1.0)
58+
@l1 = Letter.new('M')
59+
@l2 = Letter.new('L')
60+
end
5861

59-
def draw
60-
fill(color(0.1, 0.2))
61-
rect(0, 0, width, height)
62-
begin
63-
l1.update
64-
l2.update
65-
mink = PGS_Morphology.mink_sum(l1.letter, l2.letter)
66-
mink = PGS_Transformation.translate_to(mink, (l1.pos.x + l2.pos.x) / 2, (l1.pos.y + l2.pos.y) / 2)
67-
shape(mink)
68-
shape(l1.letter)
69-
shape(l2.letter)
70-
shape(PGS_Contour.medialAxis(mink, 0.3, 0, 0.1))
71-
intersect = PGS_ShapeBoolean.intersect(l1.letter, mink)
72-
PGS_Conversion.setAllFillColor(intersect, color(0, 0.5))
73-
shape(intersect)
74-
intersect = PGS_ShapeBoolean.intersect(l2.letter, mink)
75-
PGS_Conversion.setAllFillColor(intersect, color(0, 0.5))
76-
shape(intersect)
77-
rescue Java::JavaLang::Exception => e
78-
# puts e.to_s
62+
def draw
63+
fill(color(0.1, 0.2))
64+
rect(0, 0, width, height)
65+
begin
66+
l1.update
67+
l2.update
68+
mink = PGS_Morphology.mink_sum(l1.letter, l2.letter)
69+
mink = PGS_Transformation.translate_to(mink, (l1.pos.x + l2.pos.x) / 2, (l1.pos.y + l2.pos.y) / 2)
70+
shape(mink)
71+
shape(l1.letter)
72+
shape(l2.letter)
73+
shape(PGS_Contour.medialAxis(mink, 0.3, 0, 0.1))
74+
intersect = PGS_ShapeBoolean.intersect(l1.letter, mink)
75+
PGS_Conversion.setAllFillColor(intersect, color(0, 0.5))
76+
shape(intersect)
77+
intersect = PGS_ShapeBoolean.intersect(l2.letter, mink)
78+
PGS_Conversion.setAllFillColor(intersect, color(0, 0.5))
79+
shape(intersect)
80+
rescue Java::JavaLang::Exception => e
81+
# puts e.to_s
82+
end
83+
if (frame_count % 120).zero?
84+
l1.randomise
85+
l2.randomise
86+
end
7987
end
80-
if (frame_count % 120).zero?
81-
l1.randomise
82-
l2.randomise
88+
89+
def settings
90+
size(800, 800)
8391
end
8492
end
8593

86-
def settings
87-
size(800, 800)
88-
end
94+
MinkShear.new

0 commit comments

Comments
 (0)