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 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.