gray_scott_gtk3 0.4.0 → 0.5.0
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/README.md +8 -4
- data/exe/grayscott +8 -11
- data/gray_scott_gtk3.gemspec +3 -3
- data/lib/gray_scott.rb +26 -0
- data/lib/{gray_scott_gtk3 → gray_scott}/controller.rb +50 -8
- data/lib/{gray_scott_gtk3 → gray_scott}/controller/aboutdialog.rb +2 -2
- data/lib/gray_scott/laplacian.rb +29 -0
- data/lib/{gray_scott_gtk3 → gray_scott}/model.rb +9 -6
- data/lib/gray_scott/version.rb +3 -0
- data/resources/gray_scott.glade +167 -70
- metadata +11 -12
- data/lib/gray_scott_gtk3.rb +0 -21
- data/lib/gray_scott_gtk3/laplacian.rb +0 -27
- data/lib/gray_scott_gtk3/version.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 631ab3461313a23f12de24a7416a993a2522364ac3b50d36dabd65a2477e30a1
|
4
|
+
data.tar.gz: 9e43e401b1f7719a04ff320e29ef01a87450637087c95cc1f77f6dd6dfd7d2f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbbf57fdb426ef5c62b859a5df4decae30a090d2f08b031e997f13f8afa3148aa4a5ba20f6eeca372550ad82a6e18b96f99ee3e8bd9718f98a1ae77fdfe51057
|
7
|
+
data.tar.gz: 5e6e37d935c7d35dfe1c1644ddb665563a0ab3af3a5849badd8950180af66bf6d927666ebe3ef3e753857d9b9b3dbca7f9bf756ddeaf7c15d8694b9eaa72f7e1
|
data/README.md
CHANGED
@@ -5,7 +5,8 @@
|
|
5
5
|
## Requirements
|
6
6
|
|
7
7
|
* Ruby
|
8
|
-
* Numo/NArray
|
8
|
+
* Numo/NArray (CPU)
|
9
|
+
* Cumo/NArray (GPU)
|
9
10
|
* Ruby/Gtk3
|
10
11
|
|
11
12
|
## Installation
|
@@ -21,11 +22,12 @@ $ grayscott 40 -w 256 -h 256 # size of model. display is fixed to 512 x 512 pixe
|
|
21
22
|
## Usage with terminal(example)
|
22
23
|
|
23
24
|
$ bundle install
|
25
|
+
|
24
26
|
$ bundle exec bin/console
|
25
27
|
|
26
28
|
```ruby
|
27
|
-
|
28
|
-
c =
|
29
|
+
GrayScott::Controller::MSEC = 50
|
30
|
+
c = GrayScott::Controller.new 'resources/', width:1024, height:1024
|
29
31
|
|
30
32
|
# custom feed / kill ratio
|
31
33
|
na = Numo::SFloat.new(1024,1).seq + 10 # avoid zero
|
@@ -36,10 +38,12 @@ k = na.transpose * 0.06 + 0.01
|
|
36
38
|
c.model.f = f
|
37
39
|
c.model.k = k
|
38
40
|
c.model.v.rand(0.0, 0.15)
|
39
|
-
c.color = '
|
41
|
+
c.color = 'reverse_green' # colorful is slow.
|
40
42
|
Gtk.main
|
41
43
|
```
|
42
44
|
|
45
|
+

|
46
|
+
|
43
47
|
## Known issue
|
44
48
|
|
45
49
|
Glib::Timeout.add(number_of_seconds)
|
data/exe/grayscott
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'gray_scott_gtk3'
|
4
3
|
require 'optparse'
|
5
4
|
|
6
5
|
opt = {}
|
@@ -8,20 +7,18 @@ OptionParser.new do |op|
|
|
8
7
|
op.banner += ' msec'
|
9
8
|
op.on('-h val', '--height', 'height of the model') { |v| opt[:height] = v.to_i }
|
10
9
|
op.on('-w val', '--width', 'width of the model') { |v| opt[:width] = v.to_i }
|
11
|
-
op.
|
10
|
+
op.on('-g', '--gpu', 'use GPU(Cumo)'){ |v| opt[:gpu] = v }
|
12
11
|
op.parse!(ARGV)
|
13
12
|
end
|
14
13
|
|
15
|
-
if
|
16
|
-
|
17
|
-
MSEC = ARGV[0].to_i
|
18
|
-
end
|
19
|
-
else
|
20
|
-
puts 'please specify command-line argument. For example `grayscott 40`'
|
21
|
-
exit
|
14
|
+
if opt[:gpu]
|
15
|
+
require 'cumo/narray'
|
22
16
|
end
|
17
|
+
opt.delete(:gpu)
|
18
|
+
|
19
|
+
require 'gray_scott'
|
23
20
|
|
24
|
-
module
|
21
|
+
module GrayScott
|
25
22
|
class << self
|
26
23
|
def run(opt)
|
27
24
|
xml_path = File.expand_path('../resources/', __dir__)
|
@@ -31,4 +28,4 @@ module GrayScottGtk3
|
|
31
28
|
end
|
32
29
|
end
|
33
30
|
|
34
|
-
|
31
|
+
GrayScott.run(opt)
|
data/gray_scott_gtk3.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
lib = File.expand_path('lib', __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require '
|
3
|
+
require 'gray_scott/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'gray_scott_gtk3'
|
7
|
-
spec.version =
|
7
|
+
spec.version = GrayScott::VERSION
|
8
8
|
spec.authors = ['kojix2']
|
9
9
|
spec.email = ['2xijok@gmail.com']
|
10
10
|
|
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ['lib']
|
23
23
|
|
24
|
-
spec.add_dependency 'numo-narray'
|
25
24
|
spec.add_dependency 'gtk3'
|
25
|
+
spec.add_dependency 'numo-narray'
|
26
26
|
|
27
27
|
spec.add_development_dependency 'bundler', '~> 1.17'
|
28
28
|
spec.add_development_dependency 'rake', '~> 10.0'
|
data/lib/gray_scott.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'gtk3'
|
2
|
+
|
3
|
+
unless Object.const_defined? :Cumo
|
4
|
+
require 'numo/narray'
|
5
|
+
Xumo = Numo
|
6
|
+
else
|
7
|
+
Xumo = Cumo
|
8
|
+
end
|
9
|
+
|
10
|
+
module XumoShortHand
|
11
|
+
class Xumo::SFloat
|
12
|
+
alias _ inplace
|
13
|
+
end
|
14
|
+
SFloat = Xumo::SFloat
|
15
|
+
UInt8 = Xumo::UInt8
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'gray_scott/model'
|
19
|
+
require 'gray_scott/controller'
|
20
|
+
require 'gray_scott/laplacian'
|
21
|
+
require 'gray_scott/version'
|
22
|
+
|
23
|
+
module GrayScott
|
24
|
+
class Error < StandardError; end
|
25
|
+
# Your code goes here...
|
26
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require_relative 'controller/aboutdialog'
|
2
2
|
|
3
|
-
module
|
3
|
+
module GrayScott
|
4
4
|
class Controller
|
5
|
-
include
|
5
|
+
include XumoShortHand
|
6
6
|
attr_accessor :resource_dir, :height, :width, :model, :color
|
7
7
|
|
8
8
|
def initialize(dir, height: 256, width: 256)
|
@@ -12,6 +12,8 @@ module GrayScottGtk3
|
|
12
12
|
@model = Model.new(height: height, width: width)
|
13
13
|
@show_u = false
|
14
14
|
@color = 'colorful'
|
15
|
+
@frames = 1
|
16
|
+
@msec = 40
|
15
17
|
|
16
18
|
builder = Gtk::Builder.new
|
17
19
|
builder.add_from_file File.join(resource_dir, 'gray_scott.glade')
|
@@ -23,7 +25,7 @@ module GrayScottGtk3
|
|
23
25
|
builder.connect_signals { |handler| method(handler) }
|
24
26
|
|
25
27
|
@win.show_all # window
|
26
|
-
|
28
|
+
on_clear_clicked
|
27
29
|
end
|
28
30
|
|
29
31
|
def show_about
|
@@ -38,6 +40,15 @@ module GrayScottGtk3
|
|
38
40
|
model.k = k.value
|
39
41
|
end
|
40
42
|
|
43
|
+
def on_frames_changed(frames)
|
44
|
+
@frames = frames.value.to_i
|
45
|
+
end
|
46
|
+
|
47
|
+
def on_msec_changed(msec)
|
48
|
+
@msec = msec.value.to_i
|
49
|
+
end
|
50
|
+
|
51
|
+
|
41
52
|
def display
|
42
53
|
@gimage.pixbuf = to_pixbuf(@show_u ? model.u : model.v)
|
43
54
|
end
|
@@ -60,8 +71,10 @@ module GrayScottGtk3
|
|
60
71
|
|
61
72
|
def execute
|
62
73
|
@doing_now = true
|
63
|
-
GLib::Timeout.add
|
64
|
-
|
74
|
+
GLib::Timeout.add @msec do
|
75
|
+
@frames.times do
|
76
|
+
model.update
|
77
|
+
end
|
65
78
|
display
|
66
79
|
@doing_now
|
67
80
|
end
|
@@ -72,9 +85,38 @@ module GrayScottGtk3
|
|
72
85
|
@execute_button.active = false
|
73
86
|
end
|
74
87
|
|
88
|
+
def on_open_clicked
|
89
|
+
stop if doing_now?
|
90
|
+
dialog = Gtk::FileChooserDialog.new(title: 'Open Gray-Scott Model',
|
91
|
+
action: :open,
|
92
|
+
buttons: [%i[open accept], %i[cancel cancel]])
|
93
|
+
if dialog.run == :accept
|
94
|
+
filename = dialog.filename
|
95
|
+
str = File.read(filename)
|
96
|
+
# todo: check model
|
97
|
+
@model = Marshal.load(str)
|
98
|
+
display
|
99
|
+
end
|
100
|
+
dialog.destroy
|
101
|
+
end
|
102
|
+
|
75
103
|
def on_save_clicked
|
76
104
|
stop if doing_now?
|
77
|
-
dialog = Gtk::FileChooserDialog.new(title: '
|
105
|
+
dialog = Gtk::FileChooserDialog.new(title: 'Save Gray-Scott Model',
|
106
|
+
action: :save,
|
107
|
+
buttons: [%i[save accept], %i[cancel cancel]])
|
108
|
+
dialog.do_overwrite_confirmation = true
|
109
|
+
if dialog.run == :accept
|
110
|
+
filename = dialog.filename
|
111
|
+
str = Marshal.dump(model)
|
112
|
+
File.write(filename, str)
|
113
|
+
end
|
114
|
+
dialog.destroy
|
115
|
+
end
|
116
|
+
|
117
|
+
def on_convert_clicked
|
118
|
+
stop if doing_now?
|
119
|
+
dialog = Gtk::FileChooserDialog.new(title: 'Save PNG image',
|
78
120
|
action: :save,
|
79
121
|
buttons: [%i[save accept], %i[cancel cancel]])
|
80
122
|
dialog.do_overwrite_confirmation = true
|
@@ -89,7 +131,7 @@ module GrayScottGtk3
|
|
89
131
|
Gtk.main_quit
|
90
132
|
end
|
91
133
|
|
92
|
-
def
|
134
|
+
def on_clear_clicked
|
93
135
|
model.clear
|
94
136
|
display_legend
|
95
137
|
display
|
@@ -175,6 +217,7 @@ module GrayScottGtk3
|
|
175
217
|
end
|
176
218
|
|
177
219
|
private
|
220
|
+
|
178
221
|
def debug_p_u
|
179
222
|
p model.u
|
180
223
|
end
|
@@ -190,6 +233,5 @@ module GrayScottGtk3
|
|
190
233
|
def debug_p_k
|
191
234
|
p model.k
|
192
235
|
end
|
193
|
-
|
194
236
|
end
|
195
237
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module GrayScott
|
2
2
|
class Controller
|
3
3
|
class AboutDialog
|
4
4
|
def initialize(resource_dir)
|
@@ -6,7 +6,7 @@ module GrayScottGtk3
|
|
6
6
|
@a.program_name = 'Gray-Scott'
|
7
7
|
@a.logo = GdkPixbuf::Pixbuf.new(file: File.join(resource_dir, 'about_icon.png'))
|
8
8
|
@a.authors = ['kojix2']
|
9
|
-
@a.version =
|
9
|
+
@a.version = GrayScott::VERSION
|
10
10
|
@a.run
|
11
11
|
@a.destroy
|
12
12
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module GrayScott
|
2
|
+
module Utils
|
3
|
+
module Math
|
4
|
+
# To avoid mistakes
|
5
|
+
A = (1..-1).freeze
|
6
|
+
B = (0..-2).freeze
|
7
|
+
T = true
|
8
|
+
|
9
|
+
def self._laplacian2d(uv, dx)
|
10
|
+
l_uv = uv.new_zeros
|
11
|
+
l_uv[A, T]._ + uv[B, T]
|
12
|
+
l_uv[T, A]._ + uv[T, B]
|
13
|
+
|
14
|
+
l_uv[0, T]._ + uv[-1, T]
|
15
|
+
l_uv[T, 0]._ + uv[T, -1]
|
16
|
+
|
17
|
+
l_uv[B, T]._ + uv[A, T]
|
18
|
+
l_uv[T, B]._ + uv[T, A]
|
19
|
+
|
20
|
+
l_uv[-1, T]._ + uv[0, T]
|
21
|
+
l_uv[T, -1]._ + uv[T, 0]
|
22
|
+
|
23
|
+
l_uv._ - (uv * 4)
|
24
|
+
l_uv._ / (dx * dx)
|
25
|
+
l_uv
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
module
|
1
|
+
module GrayScott
|
2
2
|
class Model
|
3
|
-
include
|
3
|
+
include XumoShortHand
|
4
4
|
|
5
5
|
Dx = 0.01
|
6
6
|
Dt = 1
|
@@ -26,8 +26,8 @@ module GrayScottGtk3
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def update
|
29
|
-
l_u =
|
30
|
-
l_v =
|
29
|
+
l_u = Utils::Math._laplacian2d u, Dx
|
30
|
+
l_v = Utils::Math._laplacian2d v, Dx
|
31
31
|
|
32
32
|
uvv = u * v * v
|
33
33
|
dudt = Du * l_u - uvv + f * (1.0 - u)
|
@@ -38,8 +38,11 @@ module GrayScottGtk3
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def immune_surveillance
|
41
|
-
|
42
|
-
@
|
41
|
+
# clip is better.
|
42
|
+
@u[@u.lt 0.00001] = 0.00001
|
43
|
+
@u[@u.gt 1] = 1
|
44
|
+
@v[@v.lt 0.00001] = 0.00001
|
45
|
+
@v[@v.gt 1] = 1
|
43
46
|
end
|
44
47
|
end
|
45
48
|
end
|
data/resources/gray_scott.glade
CHANGED
@@ -9,6 +9,13 @@
|
|
9
9
|
<property name="page_increment">0.01</property>
|
10
10
|
<signal name="value-changed" handler="on_f_changed" swapped="no"/>
|
11
11
|
</object>
|
12
|
+
<object class="GtkAdjustment" id="frames">
|
13
|
+
<property name="upper">1000</property>
|
14
|
+
<property name="value">1</property>
|
15
|
+
<property name="step_increment">1</property>
|
16
|
+
<property name="page_increment">10</property>
|
17
|
+
<signal name="value-changed" handler="on_frames_changed" swapped="no"/>
|
18
|
+
</object>
|
12
19
|
<object class="GtkAdjustment" id="k">
|
13
20
|
<property name="upper">0.10000000000000001</property>
|
14
21
|
<property name="value">0.059999999999999998</property>
|
@@ -16,6 +23,13 @@
|
|
16
23
|
<property name="page_increment">0.01</property>
|
17
24
|
<signal name="value-changed" handler="on_k_changed" swapped="no"/>
|
18
25
|
</object>
|
26
|
+
<object class="GtkAdjustment" id="msec">
|
27
|
+
<property name="upper">10000</property>
|
28
|
+
<property name="value">40</property>
|
29
|
+
<property name="step_increment">1</property>
|
30
|
+
<property name="page_increment">10</property>
|
31
|
+
<signal name="value-changed" handler="on_msec_changed" swapped="no"/>
|
32
|
+
</object>
|
19
33
|
<object class="GtkAdjustment" id="pen_density">
|
20
34
|
<property name="upper">1</property>
|
21
35
|
<property name="value">0.5</property>
|
@@ -64,7 +78,17 @@
|
|
64
78
|
<property name="can_focus">False</property>
|
65
79
|
<property name="use_underline">True</property>
|
66
80
|
<property name="use_stock">True</property>
|
67
|
-
<signal name="activate" handler="
|
81
|
+
<signal name="activate" handler="on_clear_clicked" swapped="no"/>
|
82
|
+
</object>
|
83
|
+
</child>
|
84
|
+
<child>
|
85
|
+
<object class="GtkImageMenuItem">
|
86
|
+
<property name="label">gtk-open</property>
|
87
|
+
<property name="visible">True</property>
|
88
|
+
<property name="can_focus">False</property>
|
89
|
+
<property name="use_underline">True</property>
|
90
|
+
<property name="use_stock">True</property>
|
91
|
+
<signal name="activate" handler="on_open_clicked" swapped="no"/>
|
68
92
|
</object>
|
69
93
|
</child>
|
70
94
|
<child>
|
@@ -77,6 +101,16 @@
|
|
77
101
|
<signal name="activate" handler="on_save_clicked" swapped="no"/>
|
78
102
|
</object>
|
79
103
|
</child>
|
104
|
+
<child>
|
105
|
+
<object class="GtkImageMenuItem">
|
106
|
+
<property name="label">gtk-convert</property>
|
107
|
+
<property name="visible">True</property>
|
108
|
+
<property name="can_focus">False</property>
|
109
|
+
<property name="use_underline">True</property>
|
110
|
+
<property name="use_stock">True</property>
|
111
|
+
<signal name="activate" handler="on_convert_clicked" swapped="no"/>
|
112
|
+
</object>
|
113
|
+
</child>
|
80
114
|
<child>
|
81
115
|
<object class="GtkSeparatorMenuItem">
|
82
116
|
<property name="visible">True</property>
|
@@ -179,51 +213,103 @@
|
|
179
213
|
</packing>
|
180
214
|
</child>
|
181
215
|
<child>
|
182
|
-
<object class="
|
216
|
+
<object class="GtkToolbar">
|
183
217
|
<property name="visible">True</property>
|
184
218
|
<property name="can_focus">False</property>
|
185
|
-
<property name="margin_left">5</property>
|
186
|
-
<property name="margin_right">5</property>
|
187
|
-
<property name="spacing">5</property>
|
188
219
|
<child>
|
189
|
-
<object class="
|
190
|
-
<property name="label">gtk-new</property>
|
220
|
+
<object class="GtkToolButton">
|
191
221
|
<property name="visible">True</property>
|
192
|
-
<property name="can_focus">
|
193
|
-
<property name="
|
194
|
-
<property name="
|
195
|
-
<property name="
|
196
|
-
<property name="
|
197
|
-
<signal name="clicked" handler="
|
222
|
+
<property name="can_focus">False</property>
|
223
|
+
<property name="tooltip_text" translatable="yes">clear</property>
|
224
|
+
<property name="label" translatable="yes">clear</property>
|
225
|
+
<property name="use_underline">True</property>
|
226
|
+
<property name="stock_id">gtk-clear</property>
|
227
|
+
<signal name="clicked" handler="on_clear_clicked" swapped="no"/>
|
198
228
|
</object>
|
199
229
|
<packing>
|
200
230
|
<property name="expand">False</property>
|
201
|
-
<property name="
|
202
|
-
|
231
|
+
<property name="homogeneous">True</property>
|
232
|
+
</packing>
|
233
|
+
</child>
|
234
|
+
<child>
|
235
|
+
<object class="GtkToolButton">
|
236
|
+
<property name="visible">True</property>
|
237
|
+
<property name="can_focus">False</property>
|
238
|
+
<property name="tooltip_text" translatable="yes">open</property>
|
239
|
+
<property name="label" translatable="yes">open</property>
|
240
|
+
<property name="use_underline">True</property>
|
241
|
+
<property name="stock_id">gtk-open</property>
|
242
|
+
<signal name="clicked" handler="on_open_clicked" swapped="no"/>
|
243
|
+
</object>
|
244
|
+
<packing>
|
245
|
+
<property name="expand">False</property>
|
246
|
+
<property name="homogeneous">True</property>
|
247
|
+
</packing>
|
248
|
+
</child>
|
249
|
+
<child>
|
250
|
+
<object class="GtkToolButton">
|
251
|
+
<property name="visible">True</property>
|
252
|
+
<property name="can_focus">False</property>
|
253
|
+
<property name="tooltip_text" translatable="yes">save model</property>
|
254
|
+
<property name="label" translatable="yes">save</property>
|
255
|
+
<property name="use_underline">True</property>
|
256
|
+
<property name="stock_id">gtk-save</property>
|
257
|
+
</object>
|
258
|
+
<packing>
|
259
|
+
<property name="expand">False</property>
|
260
|
+
<property name="homogeneous">True</property>
|
203
261
|
</packing>
|
204
262
|
</child>
|
263
|
+
<child>
|
264
|
+
<object class="GtkToolButton">
|
265
|
+
<property name="visible">True</property>
|
266
|
+
<property name="can_focus">False</property>
|
267
|
+
<property name="tooltip_text" translatable="yes">save png image</property>
|
268
|
+
<property name="label" translatable="yes">save_png</property>
|
269
|
+
<property name="use_underline">True</property>
|
270
|
+
<property name="stock_id">gtk-convert</property>
|
271
|
+
<signal name="clicked" handler="on_convert_clicked" swapped="no"/>
|
272
|
+
</object>
|
273
|
+
<packing>
|
274
|
+
<property name="expand">False</property>
|
275
|
+
<property name="homogeneous">True</property>
|
276
|
+
</packing>
|
277
|
+
</child>
|
278
|
+
<child>
|
279
|
+
<object class="GtkToggleToolButton">
|
280
|
+
<property name="visible">True</property>
|
281
|
+
<property name="can_focus">False</property>
|
282
|
+
<property name="tooltip_text" translatable="yes">execute</property>
|
283
|
+
<property name="label" translatable="yes">__glade_unnamed_42</property>
|
284
|
+
<property name="use_underline">True</property>
|
285
|
+
<property name="stock_id">gtk-media-play</property>
|
286
|
+
<signal name="toggled" handler="on_execute_toggled" swapped="no"/>
|
287
|
+
</object>
|
288
|
+
<packing>
|
289
|
+
<property name="expand">False</property>
|
290
|
+
<property name="homogeneous">True</property>
|
291
|
+
</packing>
|
292
|
+
</child>
|
293
|
+
</object>
|
294
|
+
<packing>
|
295
|
+
<property name="expand">False</property>
|
296
|
+
<property name="fill">True</property>
|
297
|
+
<property name="position">1</property>
|
298
|
+
</packing>
|
299
|
+
</child>
|
300
|
+
<child>
|
301
|
+
<object class="GtkBox">
|
302
|
+
<property name="visible">True</property>
|
303
|
+
<property name="can_focus">False</property>
|
304
|
+
<property name="margin_left">5</property>
|
305
|
+
<property name="margin_right">5</property>
|
306
|
+
<property name="spacing">3</property>
|
205
307
|
<child>
|
206
308
|
<object class="GtkGrid">
|
207
309
|
<property name="visible">True</property>
|
208
310
|
<property name="can_focus">False</property>
|
209
311
|
<property name="margin_top">1</property>
|
210
312
|
<property name="border_width">0</property>
|
211
|
-
<child>
|
212
|
-
<object class="GtkLabel" id="klabel">
|
213
|
-
<property name="visible">True</property>
|
214
|
-
<property name="can_focus">False</property>
|
215
|
-
<property name="tooltip_text" translatable="yes">Kill is the removal/kill rate of U</property>
|
216
|
-
<property name="margin_left">5</property>
|
217
|
-
<property name="margin_right">5</property>
|
218
|
-
<property name="margin_top">5</property>
|
219
|
-
<property name="margin_bottom">5</property>
|
220
|
-
<property name="label" translatable="yes">Kill</property>
|
221
|
-
</object>
|
222
|
-
<packing>
|
223
|
-
<property name="left_attach">0</property>
|
224
|
-
<property name="top_attach">1</property>
|
225
|
-
</packing>
|
226
|
-
</child>
|
227
313
|
<child>
|
228
314
|
<object class="GtkLabel" id="flabel">
|
229
315
|
<property name="visible">True</property>
|
@@ -260,6 +346,22 @@
|
|
260
346
|
<property name="top_attach">0</property>
|
261
347
|
</packing>
|
262
348
|
</child>
|
349
|
+
<child>
|
350
|
+
<object class="GtkLabel" id="klabel">
|
351
|
+
<property name="visible">True</property>
|
352
|
+
<property name="can_focus">False</property>
|
353
|
+
<property name="tooltip_text" translatable="yes">Kill is the removal/kill rate of U</property>
|
354
|
+
<property name="margin_left">5</property>
|
355
|
+
<property name="margin_right">5</property>
|
356
|
+
<property name="margin_top">5</property>
|
357
|
+
<property name="margin_bottom">5</property>
|
358
|
+
<property name="label" translatable="yes">Kill</property>
|
359
|
+
</object>
|
360
|
+
<packing>
|
361
|
+
<property name="left_attach">0</property>
|
362
|
+
<property name="top_attach">1</property>
|
363
|
+
</packing>
|
364
|
+
</child>
|
263
365
|
<child>
|
264
366
|
<object class="GtkScale" id="kscale">
|
265
367
|
<property name="visible">True</property>
|
@@ -284,50 +386,15 @@
|
|
284
386
|
<packing>
|
285
387
|
<property name="expand">True</property>
|
286
388
|
<property name="fill">True</property>
|
287
|
-
<property name="position">1</property>
|
288
|
-
</packing>
|
289
|
-
</child>
|
290
|
-
<child>
|
291
|
-
<object class="GtkButton" id="save_button">
|
292
|
-
<property name="label">gtk-save</property>
|
293
|
-
<property name="visible">True</property>
|
294
|
-
<property name="can_focus">True</property>
|
295
|
-
<property name="receives_default">True</property>
|
296
|
-
<property name="tooltip_text" translatable="yes">Save as PNG image</property>
|
297
|
-
<property name="use_stock">True</property>
|
298
|
-
<property name="image_position">top</property>
|
299
|
-
<property name="always_show_image">True</property>
|
300
|
-
<signal name="clicked" handler="on_save_clicked" swapped="no"/>
|
301
|
-
</object>
|
302
|
-
<packing>
|
303
|
-
<property name="expand">False</property>
|
304
|
-
<property name="fill">True</property>
|
305
389
|
<property name="position">2</property>
|
306
390
|
</packing>
|
307
391
|
</child>
|
308
|
-
<child>
|
309
|
-
<object class="GtkToggleButton" id="execute_button">
|
310
|
-
<property name="label">gtk-execute</property>
|
311
|
-
<property name="visible">True</property>
|
312
|
-
<property name="can_focus">True</property>
|
313
|
-
<property name="receives_default">True</property>
|
314
|
-
<property name="use_stock">True</property>
|
315
|
-
<property name="image_position">top</property>
|
316
|
-
<property name="always_show_image">True</property>
|
317
|
-
<signal name="toggled" handler="on_execute_toggled" swapped="no"/>
|
318
|
-
</object>
|
319
|
-
<packing>
|
320
|
-
<property name="expand">False</property>
|
321
|
-
<property name="fill">True</property>
|
322
|
-
<property name="position">3</property>
|
323
|
-
</packing>
|
324
|
-
</child>
|
325
392
|
</object>
|
326
393
|
<packing>
|
327
394
|
<property name="expand">True</property>
|
328
395
|
<property name="fill">True</property>
|
329
396
|
<property name="padding">5</property>
|
330
|
-
<property name="position">
|
397
|
+
<property name="position">2</property>
|
331
398
|
</packing>
|
332
399
|
</child>
|
333
400
|
<child>
|
@@ -408,7 +475,7 @@ applications-graphics</property>
|
|
408
475
|
</child>
|
409
476
|
</object>
|
410
477
|
<packing>
|
411
|
-
<property name="position">
|
478
|
+
<property name="position">0</property>
|
412
479
|
</packing>
|
413
480
|
</child>
|
414
481
|
<child>
|
@@ -444,7 +511,37 @@ applications-graphics</property>
|
|
444
511
|
</child>
|
445
512
|
</object>
|
446
513
|
<packing>
|
447
|
-
<property name="position">
|
514
|
+
<property name="position">0</property>
|
515
|
+
</packing>
|
516
|
+
</child>
|
517
|
+
<child>
|
518
|
+
<object class="GtkSpinButton">
|
519
|
+
<property name="visible">True</property>
|
520
|
+
<property name="can_focus">True</property>
|
521
|
+
<property name="tooltip_text" translatable="yes">frames</property>
|
522
|
+
<property name="input_purpose">digits</property>
|
523
|
+
<property name="adjustment">frames</property>
|
524
|
+
<property name="climb_rate">1</property>
|
525
|
+
<property name="numeric">True</property>
|
526
|
+
</object>
|
527
|
+
<packing>
|
528
|
+
<property name="pack_type">end</property>
|
529
|
+
<property name="position">0</property>
|
530
|
+
</packing>
|
531
|
+
</child>
|
532
|
+
<child>
|
533
|
+
<object class="GtkSpinButton">
|
534
|
+
<property name="visible">True</property>
|
535
|
+
<property name="can_focus">True</property>
|
536
|
+
<property name="tooltip_text" translatable="yes">msec</property>
|
537
|
+
<property name="input_purpose">digits</property>
|
538
|
+
<property name="adjustment">msec</property>
|
539
|
+
<property name="climb_rate">1</property>
|
540
|
+
<property name="numeric">True</property>
|
541
|
+
</object>
|
542
|
+
<packing>
|
543
|
+
<property name="pack_type">end</property>
|
544
|
+
<property name="position">0</property>
|
448
545
|
</packing>
|
449
546
|
</child>
|
450
547
|
</object>
|
@@ -469,7 +566,7 @@ applications-graphics</property>
|
|
469
566
|
<packing>
|
470
567
|
<property name="expand">False</property>
|
471
568
|
<property name="fill">True</property>
|
472
|
-
<property name="position">
|
569
|
+
<property name="position">3</property>
|
473
570
|
</packing>
|
474
571
|
</child>
|
475
572
|
<child>
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gray_scott_gtk3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
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-
|
11
|
+
date: 2018-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: gtk3
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: numo-narray
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -97,12 +97,12 @@ files:
|
|
97
97
|
- bin/setup
|
98
98
|
- exe/grayscott
|
99
99
|
- gray_scott_gtk3.gemspec
|
100
|
-
- lib/
|
101
|
-
- lib/
|
102
|
-
- lib/
|
103
|
-
- lib/
|
104
|
-
- lib/
|
105
|
-
- lib/
|
100
|
+
- lib/gray_scott.rb
|
101
|
+
- lib/gray_scott/controller.rb
|
102
|
+
- lib/gray_scott/controller/aboutdialog.rb
|
103
|
+
- lib/gray_scott/laplacian.rb
|
104
|
+
- lib/gray_scott/model.rb
|
105
|
+
- lib/gray_scott/version.rb
|
106
106
|
- resources/about_icon.png
|
107
107
|
- resources/gray_scott.glade
|
108
108
|
homepage: https://github.com/kojix2/Gray-Scott
|
@@ -123,8 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
requirements: []
|
126
|
-
|
127
|
-
rubygems_version: 2.7.6
|
126
|
+
rubygems_version: 3.0.1
|
128
127
|
signing_key:
|
129
128
|
specification_version: 4
|
130
129
|
summary: Gray-Scott model.
|
data/lib/gray_scott_gtk3.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'numo/narray'
|
2
|
-
require 'gtk3'
|
3
|
-
|
4
|
-
module ShortNumo
|
5
|
-
N = Numo
|
6
|
-
class Numo::SFloat
|
7
|
-
alias _ inplace
|
8
|
-
end
|
9
|
-
SFloat = Numo::SFloat
|
10
|
-
UInt8 = Numo::UInt8
|
11
|
-
end
|
12
|
-
|
13
|
-
require 'gray_scott_gtk3/model'
|
14
|
-
require 'gray_scott_gtk3/controller'
|
15
|
-
require 'gray_scott_gtk3/laplacian'
|
16
|
-
require 'gray_scott_gtk3/version'
|
17
|
-
|
18
|
-
module GrayScottGtk3
|
19
|
-
class Error < StandardError; end
|
20
|
-
# Your code goes here...
|
21
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Numo
|
2
|
-
class SFloat
|
3
|
-
# To avoid mistakes
|
4
|
-
A = (1..-1).freeze
|
5
|
-
B = (0..-2).freeze
|
6
|
-
T = true
|
7
|
-
|
8
|
-
def self._laplacian2d(uv, dx)
|
9
|
-
l_uv = uv.new_zeros
|
10
|
-
l_uv[A, T]._ + uv[B, T]
|
11
|
-
l_uv[T, A]._ + uv[T, B]
|
12
|
-
|
13
|
-
l_uv[0, T]._ + uv[-1, T]
|
14
|
-
l_uv[T, 0]._ + uv[T, -1]
|
15
|
-
|
16
|
-
l_uv[B, T]._ + uv[A, T]
|
17
|
-
l_uv[T, B]._ + uv[T, A]
|
18
|
-
|
19
|
-
l_uv[-1, T]._ + uv[0, T]
|
20
|
-
l_uv[T, -1]._ + uv[T, 0]
|
21
|
-
|
22
|
-
l_uv._ - (uv * 4)
|
23
|
-
l_uv._ / (dx * dx)
|
24
|
-
l_uv
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|