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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 619dd20951e2057e5362709441c9b1718cfa111994e2345981e0f8b2be43a7a2
4
- data.tar.gz: 6be4ff2a3fa5bf46e4dab1ac73640dd5e70a3686dbddbf2385a1f426160c3b6a
3
+ metadata.gz: ef4f58211b0ab0cd8b0bbc3fdab15dadc240f4f2fb9cb4b22d6d49d85e696d7a
4
+ data.tar.gz: d0d8fc77fae048d5fd9250805cf202c4e35a9d5799c26a3ae5ad65f8e87c90c3
5
5
  SHA512:
6
- metadata.gz: eefb5c874d361b87314d9cf197e3f574c1d0afe9dde3b2b5c25235ca682a33211b2943e958ea0b5f122824721aa14b4a40575472a7ff577f16e79e36fc7e7a8c
7
- data.tar.gz: 7b306142375e6221e52b969f9718f6e0e7415226b60f1d1d7c530066cb303ba0b25d2e445dabd6bc49a6c80fa77bc39d96fb4d1536d097cadf4f903f1c5dc759
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/laplacian'
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 = to_pixbuf(@show_u ? model.u : model.v)
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 colorize(ar, color_type)
161
- case color_type
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module GrayScott
2
- VERSION = '0.5.2'.freeze
2
+ VERSION = '0.5.3'.freeze
3
3
  end
@@ -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="GtkScaleButton" id="pen_density_scale">
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 density</property>
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">pen_density</property>
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="pen_radius_scale">
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 radius</property>
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">pen_radius</property>
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.2
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: 2018-12-27 00:00:00.000000000 Z
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
- rubyforge_project:
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.