gray_scott_gtk3 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/gray_scott.rb +2 -2
- data/lib/gray_scott/color.rb +85 -0
- data/lib/gray_scott/controller.rb +5 -51
- data/lib/gray_scott/model.rb +11 -0
- data/lib/gray_scott/{laplacian.rb → utils/math.rb} +0 -0
- data/lib/gray_scott/version.rb +1 -1
- data/resources/gray_scott.glade +43 -42
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef4f58211b0ab0cd8b0bbc3fdab15dadc240f4f2fb9cb4b22d6d49d85e696d7a
|
4
|
+
data.tar.gz: d0d8fc77fae048d5fd9250805cf202c4e35a9d5799c26a3ae5ad65f8e87c90c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57eb46e7262c6fa35cd4937bb849731c685bdb312f0c5066ee71c51a87bced2709fbae0428aa2040ae1c492f8f663596989dcbff82612df93fb430bde934356d
|
7
|
+
data.tar.gz: 56fe55ecdf81df295cae9c1e02f48839c403abb2586d82cfefcb918a5308eada89625b788dc0dec772f0b6bce1924015aff720f5c423997dc2881657660cab61
|
data/lib/gray_scott.rb
CHANGED
@@ -16,11 +16,11 @@ module XumoShortHand
|
|
16
16
|
end
|
17
17
|
|
18
18
|
require 'gray_scott/model'
|
19
|
+
require 'gray_scott/color'
|
19
20
|
require 'gray_scott/controller'
|
20
|
-
require 'gray_scott/
|
21
|
+
require 'gray_scott/utils/math'
|
21
22
|
require 'gray_scott/version'
|
22
23
|
|
23
24
|
module GrayScott
|
24
25
|
class Error < StandardError; end
|
25
|
-
# Your code goes here...
|
26
26
|
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module GrayScott
|
2
|
+
module Color
|
3
|
+
include XumoShortHand
|
4
|
+
|
5
|
+
def colorize(ar, color_type)
|
6
|
+
case color_type
|
7
|
+
when 'colorful'
|
8
|
+
hsv2rgb(ar)
|
9
|
+
when 'reverse-colorful'
|
10
|
+
hsv2rgb(1.0 - ar)
|
11
|
+
when 'red'
|
12
|
+
red(ar)
|
13
|
+
when 'green'
|
14
|
+
green(ar)
|
15
|
+
when 'blue'
|
16
|
+
blue(ar)
|
17
|
+
when 'reverse-red'
|
18
|
+
reverse_red(ar)
|
19
|
+
when 'reverse-green'
|
20
|
+
reverse_green(ar)
|
21
|
+
when 'reverse-blue'
|
22
|
+
reverse_blue(ar)
|
23
|
+
when 'grayscale'
|
24
|
+
grayscale(ar)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def hsv2rgb(h)
|
29
|
+
height, width = h.shape
|
30
|
+
i = UInt8.cast(h * 6)
|
31
|
+
f = (h * 6.0) - i
|
32
|
+
p = UInt8.zeros height, width, 1
|
33
|
+
v = UInt8.new(height, width, 1).fill 255
|
34
|
+
q = (1.0 - f) * 256
|
35
|
+
t = f * 256
|
36
|
+
rgb = UInt8.zeros height, width, 3
|
37
|
+
t = UInt8.cast(t).expand_dims(2)
|
38
|
+
i = UInt8.dstack([i, i, i])
|
39
|
+
rgb[i.eq 0] = UInt8.dstack([v, t, p])[i.eq 0]
|
40
|
+
rgb[i.eq 1] = UInt8.dstack([q, v, p])[i.eq 1]
|
41
|
+
rgb[i.eq 2] = UInt8.dstack([p, v, t])[i.eq 2]
|
42
|
+
rgb[i.eq 3] = UInt8.dstack([p, q, v])[i.eq 3]
|
43
|
+
rgb[i.eq 4] = UInt8.dstack([t, p, v])[i.eq 4]
|
44
|
+
rgb[i.eq 5] = UInt8.dstack([v, p, q])[i.eq 5]
|
45
|
+
rgb
|
46
|
+
end
|
47
|
+
|
48
|
+
def red(ar)
|
49
|
+
uint8_zeros_256(0, ar)
|
50
|
+
end
|
51
|
+
|
52
|
+
def green(ar)
|
53
|
+
uint8_zeros_256(1, ar)
|
54
|
+
end
|
55
|
+
|
56
|
+
def blue(ar)
|
57
|
+
uint8_zeros_256(2, ar)
|
58
|
+
end
|
59
|
+
|
60
|
+
def reverse_red(ar)
|
61
|
+
uint8_zeros_256(0, (1.0 - ar))
|
62
|
+
end
|
63
|
+
|
64
|
+
def reverse_green(ar)
|
65
|
+
uint8_zeros_256(1, (1.0 - ar))
|
66
|
+
end
|
67
|
+
|
68
|
+
def reverse_blue(ar)
|
69
|
+
uint8_zeros_256(2, (1.0 - ar))
|
70
|
+
end
|
71
|
+
|
72
|
+
def grayscale(ar)
|
73
|
+
d = ar * 255
|
74
|
+
UInt8.dstack([d,d,d])
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def uint8_zeros_256(ch, ar)
|
80
|
+
d = UInt8.zeros(*ar.shape, 3)
|
81
|
+
d[true, true, ch] = UInt8.cast(ar * 256)
|
82
|
+
d
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -2,6 +2,7 @@ require_relative 'controller/aboutdialog'
|
|
2
2
|
|
3
3
|
module GrayScott
|
4
4
|
class Controller
|
5
|
+
include Color
|
5
6
|
include XumoShortHand
|
6
7
|
attr_accessor :resource_dir, :height, :width, :model, :color
|
7
8
|
|
@@ -49,11 +50,11 @@ module GrayScott
|
|
49
50
|
end
|
50
51
|
|
51
52
|
def display
|
52
|
-
@gimage.pixbuf =
|
53
|
+
@gimage.pixbuf = create_pixbuf(colorize((@show_u ? model.u : model.v), @color))
|
53
54
|
end
|
54
55
|
|
55
56
|
def display_legend
|
56
|
-
legend = (SFloat.new(1, 512).seq * SFloat.ones(16, 1)) / 512
|
57
|
+
legend = (SFloat.new(1, 512).seq * SFloat.ones(16, 1)) / 512.0
|
57
58
|
data = colorize(legend, @color)
|
58
59
|
string = data.to_string
|
59
60
|
pixbuf = GdkPixbuf::Pixbuf.new data: string, width: 512, height: 16
|
@@ -157,60 +158,13 @@ module GrayScott
|
|
157
158
|
display unless doing_now?
|
158
159
|
end
|
159
160
|
|
160
|
-
def
|
161
|
-
|
162
|
-
when 'colorful'
|
163
|
-
hsv2rgb(ar)
|
164
|
-
when 'reverse-colorful'
|
165
|
-
hsv2rgb(1.0 - ar)
|
166
|
-
when 'red'
|
167
|
-
uint8_zeros_256(0, ar)
|
168
|
-
when 'green'
|
169
|
-
uint8_zeros_256(1, ar)
|
170
|
-
when 'blue'
|
171
|
-
uint8_zeros_256(2, ar)
|
172
|
-
when 'reverse-red'
|
173
|
-
uint8_zeros_256(0, (1.0 - ar))
|
174
|
-
when 'reverse-green'
|
175
|
-
uint8_zeros_256(1, (1.0 - ar))
|
176
|
-
when 'reverse-blue'
|
177
|
-
uint8_zeros_256(2, (1.0 - ar))
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
def uint8_zeros_256(ch, ar)
|
182
|
-
d = UInt8.zeros(*ar.shape, 3)
|
183
|
-
d[true, true, ch] = UInt8.cast(ar * 256)
|
184
|
-
d
|
185
|
-
end
|
186
|
-
|
187
|
-
def to_pixbuf(ar, color_type = @color)
|
188
|
-
data = colorize(ar, color_type).to_string
|
161
|
+
def create_pixbuf(ar)
|
162
|
+
data = ar.to_string
|
189
163
|
height, width = ar.shape
|
190
164
|
pixbuf = GdkPixbuf::Pixbuf.new data: data, width: width, height: height
|
191
165
|
pixbuf.scale_simple 512, 512, :bilinear
|
192
166
|
end
|
193
167
|
|
194
|
-
def hsv2rgb(h)
|
195
|
-
height, width = h.shape
|
196
|
-
i = UInt8.cast(h * 6)
|
197
|
-
f = (h * 6.0) - i
|
198
|
-
p = UInt8.zeros height, width, 1
|
199
|
-
v = UInt8.new(height, width, 1).fill 255
|
200
|
-
q = (1.0 - f) * 256
|
201
|
-
t = f * 256
|
202
|
-
rgb = UInt8.zeros height, width, 3
|
203
|
-
t = UInt8.cast(t).expand_dims(2)
|
204
|
-
i = UInt8.dstack([i, i, i])
|
205
|
-
rgb[i.eq 0] = UInt8.dstack([v, t, p])[i.eq 0]
|
206
|
-
rgb[i.eq 1] = UInt8.dstack([q, v, p])[i.eq 1]
|
207
|
-
rgb[i.eq 2] = UInt8.dstack([p, v, t])[i.eq 2]
|
208
|
-
rgb[i.eq 3] = UInt8.dstack([p, q, v])[i.eq 3]
|
209
|
-
rgb[i.eq 4] = UInt8.dstack([t, p, v])[i.eq 4]
|
210
|
-
rgb[i.eq 5] = UInt8.dstack([v, p, q])[i.eq 5]
|
211
|
-
rgb
|
212
|
-
end
|
213
|
-
|
214
168
|
def doing_now?
|
215
169
|
@doing_now
|
216
170
|
end
|
data/lib/gray_scott/model.rb
CHANGED
@@ -1,11 +1,18 @@
|
|
1
1
|
module GrayScott
|
2
|
+
|
3
|
+
# Gray-Scott model
|
2
4
|
class Model
|
3
5
|
include XumoShortHand
|
4
6
|
|
5
7
|
Dx = 0.01
|
8
|
+
|
9
|
+
# Delta t is the change in time for each iteration
|
6
10
|
Dt = 1
|
7
11
|
|
12
|
+
# diffusion rate for U
|
8
13
|
Du = 2e-5
|
14
|
+
|
15
|
+
# diffusion rate for V
|
9
16
|
Dv = 1e-5
|
10
17
|
|
11
18
|
attr_accessor :f, :k, :u, :v
|
@@ -13,10 +20,14 @@ module GrayScott
|
|
13
20
|
def initialize(width: 256, height: 256)
|
14
21
|
# Feed rate
|
15
22
|
@f = 0.04
|
23
|
+
|
16
24
|
# Kill rate
|
17
25
|
@k = 0.06
|
18
26
|
|
27
|
+
# concentration of U
|
19
28
|
@u = SFloat.ones height, width
|
29
|
+
|
30
|
+
# concentration of V
|
20
31
|
@v = SFloat.zeros height, width
|
21
32
|
end
|
22
33
|
|
File without changes
|
data/lib/gray_scott/version.rb
CHANGED
data/resources/gray_scott.glade
CHANGED
@@ -408,15 +408,52 @@
|
|
408
408
|
<property name="visible">True</property>
|
409
409
|
<property name="can_focus">False</property>
|
410
410
|
<child>
|
411
|
-
<object class="
|
411
|
+
<object class="GtkComboBoxText">
|
412
|
+
<property name="visible">True</property>
|
413
|
+
<property name="can_focus">False</property>
|
414
|
+
<property name="active">0</property>
|
415
|
+
<items>
|
416
|
+
<item translatable="yes">colorful</item>
|
417
|
+
<item translatable="yes">reverse-colorful</item>
|
418
|
+
<item translatable="yes">red</item>
|
419
|
+
<item translatable="yes">green</item>
|
420
|
+
<item translatable="yes">blue</item>
|
421
|
+
<item translatable="yes">reverse-red</item>
|
422
|
+
<item translatable="yes">reverse-green</item>
|
423
|
+
<item translatable="yes">reverse-blue</item>
|
424
|
+
<item translatable="yes">grayscale</item>
|
425
|
+
</items>
|
426
|
+
<signal name="changed" handler="on_color_combobox_changed" swapped="no"/>
|
427
|
+
</object>
|
428
|
+
<packing>
|
429
|
+
<property name="position">0</property>
|
430
|
+
</packing>
|
431
|
+
</child>
|
432
|
+
<child>
|
433
|
+
<object class="GtkComboBoxText" id="uv_combobox">
|
434
|
+
<property name="visible">True</property>
|
435
|
+
<property name="can_focus">False</property>
|
436
|
+
<property name="active">1</property>
|
437
|
+
<items>
|
438
|
+
<item translatable="yes">U</item>
|
439
|
+
<item translatable="yes">V</item>
|
440
|
+
</items>
|
441
|
+
<signal name="changed" handler="on_uv_combobox_changed" swapped="no"/>
|
442
|
+
</object>
|
443
|
+
<packing>
|
444
|
+
<property name="position">0</property>
|
445
|
+
</packing>
|
446
|
+
</child>
|
447
|
+
<child>
|
448
|
+
<object class="GtkScaleButton" id="pen_radius_scale">
|
412
449
|
<property name="visible">True</property>
|
413
450
|
<property name="can_focus">True</property>
|
414
451
|
<property name="focus_on_click">False</property>
|
415
452
|
<property name="receives_default">True</property>
|
416
|
-
<property name="tooltip_text" translatable="yes">pen
|
453
|
+
<property name="tooltip_text" translatable="yes">pen radius</property>
|
417
454
|
<property name="relief">none</property>
|
418
455
|
<property name="orientation">vertical</property>
|
419
|
-
<property name="adjustment">
|
456
|
+
<property name="adjustment">pen_radius</property>
|
420
457
|
<property name="icons">applications-graphics
|
421
458
|
applications-graphics
|
422
459
|
applications-graphics</property>
|
@@ -444,15 +481,15 @@ applications-graphics</property>
|
|
444
481
|
</packing>
|
445
482
|
</child>
|
446
483
|
<child>
|
447
|
-
<object class="GtkScaleButton" id="
|
484
|
+
<object class="GtkScaleButton" id="pen_density_scale">
|
448
485
|
<property name="visible">True</property>
|
449
486
|
<property name="can_focus">True</property>
|
450
487
|
<property name="focus_on_click">False</property>
|
451
488
|
<property name="receives_default">True</property>
|
452
|
-
<property name="tooltip_text" translatable="yes">pen
|
489
|
+
<property name="tooltip_text" translatable="yes">pen density</property>
|
453
490
|
<property name="relief">none</property>
|
454
491
|
<property name="orientation">vertical</property>
|
455
|
-
<property name="adjustment">
|
492
|
+
<property name="adjustment">pen_density</property>
|
456
493
|
<property name="icons">applications-graphics
|
457
494
|
applications-graphics
|
458
495
|
applications-graphics</property>
|
@@ -479,42 +516,6 @@ applications-graphics</property>
|
|
479
516
|
<property name="position">0</property>
|
480
517
|
</packing>
|
481
518
|
</child>
|
482
|
-
<child>
|
483
|
-
<object class="GtkComboBoxText">
|
484
|
-
<property name="visible">True</property>
|
485
|
-
<property name="can_focus">False</property>
|
486
|
-
<property name="active">0</property>
|
487
|
-
<items>
|
488
|
-
<item translatable="yes">colorful</item>
|
489
|
-
<item translatable="yes">reverse-colorful</item>
|
490
|
-
<item translatable="yes">red</item>
|
491
|
-
<item translatable="yes">green</item>
|
492
|
-
<item translatable="yes">blue</item>
|
493
|
-
<item translatable="yes">reverse-red</item>
|
494
|
-
<item translatable="yes">reverse-green</item>
|
495
|
-
<item translatable="yes">reverse-blue</item>
|
496
|
-
</items>
|
497
|
-
<signal name="changed" handler="on_color_combobox_changed" swapped="no"/>
|
498
|
-
</object>
|
499
|
-
<packing>
|
500
|
-
<property name="position">0</property>
|
501
|
-
</packing>
|
502
|
-
</child>
|
503
|
-
<child>
|
504
|
-
<object class="GtkComboBoxText" id="uv_combobox">
|
505
|
-
<property name="visible">True</property>
|
506
|
-
<property name="can_focus">False</property>
|
507
|
-
<property name="active">1</property>
|
508
|
-
<items>
|
509
|
-
<item translatable="yes">U</item>
|
510
|
-
<item translatable="yes">V</item>
|
511
|
-
</items>
|
512
|
-
<signal name="changed" handler="on_uv_combobox_changed" swapped="no"/>
|
513
|
-
</object>
|
514
|
-
<packing>
|
515
|
-
<property name="position">0</property>
|
516
|
-
</packing>
|
517
|
-
</child>
|
518
519
|
<child>
|
519
520
|
<object class="GtkSpinButton">
|
520
521
|
<property name="visible">True</property>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gray_scott_gtk3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gtk3
|
@@ -98,10 +98,11 @@ files:
|
|
98
98
|
- exe/grayscott
|
99
99
|
- gray_scott_gtk3.gemspec
|
100
100
|
- lib/gray_scott.rb
|
101
|
+
- lib/gray_scott/color.rb
|
101
102
|
- lib/gray_scott/controller.rb
|
102
103
|
- lib/gray_scott/controller/aboutdialog.rb
|
103
|
-
- lib/gray_scott/laplacian.rb
|
104
104
|
- lib/gray_scott/model.rb
|
105
|
+
- lib/gray_scott/utils/math.rb
|
105
106
|
- lib/gray_scott/version.rb
|
106
107
|
- resources/about_icon.png
|
107
108
|
- resources/gray_scott.glade
|
@@ -123,8 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
124
|
- !ruby/object:Gem::Version
|
124
125
|
version: '0'
|
125
126
|
requirements: []
|
126
|
-
|
127
|
-
rubygems_version: 2.7.6
|
127
|
+
rubygems_version: 3.0.1
|
128
128
|
signing_key:
|
129
129
|
specification_version: 4
|
130
130
|
summary: Gray-Scott model.
|