gray_scott_gtk3 0.5.2 → 0.5.3
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.
- 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.
|