rubyonacid 0.1.2 → 0.2.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.
@@ -4,6 +4,7 @@ module RubyOnAcid
4
4
 
5
5
  class LoopFactory < Factory
6
6
 
7
+ #The amount to increment counters by.
7
8
  attr_accessor :interval
8
9
  def interval=(value)
9
10
  raise "assigned #{value} to interval, must be between -1 and 1" if value < -1 or value > 1
@@ -5,9 +5,11 @@ module RubyOnAcid
5
5
 
6
6
  class RindaFactory < Factory
7
7
 
8
- #Time in seconds to wait for a value before giving up and returning the last retrieved value for the given key.
8
+ #Time in seconds to wait for a value before giving up and returning a default value for the given key.
9
9
  #Default is 0, which will return immediately.
10
10
  attr_accessor :timeout
11
+ #A factory to pull requests from if retrieval of values via Rinda times out.
12
+ attr_accessor :default_factory
11
13
  #The URI to connect to. Default is "druby://127.0.0.1:7632" (7632 == RNDA).
12
14
  attr_accessor :uri
13
15
 
@@ -15,6 +17,7 @@ class RindaFactory < Factory
15
17
  super
16
18
  @uri = uri
17
19
  @timeout = timeout
20
+ @default_factory = nil
18
21
  @prior_values = {}
19
22
  end
20
23
 
@@ -30,7 +33,11 @@ class RindaFactory < Factory
30
33
  key, value = @space.take([key, Float], @timeout)
31
34
  @prior_values[key] = value
32
35
  rescue Rinda::RequestExpiredError => exception
33
- value = @prior_values[key]
36
+ if @default_factory
37
+ value = @default_factory.get_unit(key)
38
+ else
39
+ value = @prior_values[key]
40
+ end
34
41
  end
35
42
  value
36
43
  end
@@ -24,6 +24,15 @@ class Factory
24
24
  get_unit(key) >= 0.5
25
25
  end
26
26
 
27
+ #Calls get_unit with key to get value between 0.0 and 1.0, then converts that value to an index within the given list of choices.
28
+ #choices can be an array or an argument list of arbitrary size.
29
+ def choose(key, *choices)
30
+ all_choices = choices.flatten
31
+ index = (get_unit(key) * all_choices.length).floor
32
+ index = all_choices.length - 1 if index > all_choices.length - 1
33
+ all_choices[index]
34
+ end
35
+
27
36
  end
28
37
 
29
38
  end
@@ -0,0 +1,101 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+ require "rubyonacid/factories/combination"
3
+ require "shared_factory_specs"
4
+
5
+ include RubyOnAcid
6
+
7
+ describe CombinationFactory do
8
+
9
+ before :each do
10
+ @it = CombinationFactory.new
11
+ end
12
+
13
+ describe "general behavior" do
14
+
15
+ before :each do
16
+ @it.source_factories << mock('Factory', :get_unit => 0.2)
17
+ @it.source_factories << mock('Factory', :get_unit => 0.3)
18
+ end
19
+
20
+ it_should_behave_like "a factory"
21
+
22
+ end
23
+
24
+ describe "#get_unit" do
25
+
26
+ it "retrieves values from source factories and adds them together" do
27
+ @it.source_factories << mock('Factory', :get_unit => 0.2)
28
+ @it.source_factories << mock('Factory', :get_unit => 0.3)
29
+ @it.get_unit(:x).should be_close(0.5, MARGIN)
30
+ @it.source_factories << mock('Factory', :get_unit => 0.1)
31
+ @it.get_unit(:x).should be_close(0.6, MARGIN)
32
+ end
33
+
34
+ it "can constrain sum to 0.0 through 1.0" do
35
+ @it.constrain_mode = CombinationFactory::CONSTRAIN
36
+ @it.source_factories << mock('Factory', :get_unit => 0.2)
37
+ @it.source_factories << mock('Factory', :get_unit => 0.3)
38
+ @it.source_factories << mock('Factory', :get_unit => 0.7)
39
+ @it.get_unit(:x).should be_close(1.0, MARGIN)
40
+ end
41
+
42
+ it "uses wrap mode by default" do
43
+ @it.source_factories << mock('Factory', :get_unit => 0.4)
44
+ @it.source_factories << mock('Factory', :get_unit => 0.7)
45
+ @it.get_unit(:x).should be_close(0.1, MARGIN)
46
+ end
47
+
48
+ it "can wrap > 1.0 value around" do
49
+ @it.constrain_mode = CombinationFactory::WRAP
50
+ @it.source_factories << mock('Factory', :get_unit => 0.2)
51
+ @it.source_factories << mock('Factory', :get_unit => 0.3)
52
+ @it.source_factories << mock('Factory', :get_unit => 0.7)
53
+ @it.get_unit(:x).should be_close(0.2, MARGIN)
54
+ end
55
+
56
+ end
57
+
58
+ describe "subtraction" do
59
+
60
+ it "can subtract values from source factories" do
61
+ @it.operation = CombinationFactory::SUBTRACT
62
+ @it.source_factories << mock('Factory', :get_unit => 0.7)
63
+ @it.source_factories << mock('Factory', :get_unit => 0.3)
64
+ @it.get_unit(:x).should be_close(0.4, MARGIN)
65
+ @it.source_factories << mock('Factory', :get_unit => 0.1)
66
+ @it.get_unit(:x).should be_close(0.3, MARGIN)
67
+ end
68
+
69
+ it "can wrap < 0.0 value around" do
70
+ @it.operation = CombinationFactory::SUBTRACT
71
+ @it.constrain_mode = CombinationFactory::WRAP
72
+ @it.source_factories << mock('Factory', :get_unit => 0.5)
73
+ @it.source_factories << mock('Factory', :get_unit => 0.7)
74
+ @it.get_unit(:x).should be_close(0.8, MARGIN)
75
+ end
76
+
77
+ end
78
+
79
+ describe "multiplication" do
80
+ it "can get product of values from source factories" do
81
+ @it.operation = CombinationFactory::MULTIPLY
82
+ @it.source_factories << mock('Factory', :get_unit => 0.7)
83
+ @it.source_factories << mock('Factory', :get_unit => 0.5)
84
+ @it.get_unit(:x).should be_close(0.35, MARGIN)
85
+ @it.source_factories << mock('Factory', :get_unit => 0.1)
86
+ @it.get_unit(:x).should be_close(0.035, MARGIN)
87
+ end
88
+ end
89
+
90
+ describe "division" do
91
+ it "can divide values from source factories" do
92
+ @it.operation = CombinationFactory::DIVIDE
93
+ @it.source_factories << mock('Factory', :get_unit => 0.1)
94
+ @it.source_factories << mock('Factory', :get_unit => 0.2)
95
+ @it.get_unit(:x).should be_close(0.5, MARGIN) #0.1 / 0.2 = 0.5
96
+ @it.source_factories << mock('Factory', :get_unit => 0.9)
97
+ @it.get_unit(:x).should be_close(0.555, MARGIN) #0.5 / 0.9 = 0.5555...
98
+ end
99
+ end
100
+
101
+ end
@@ -6,7 +6,6 @@ include RubyOnAcid
6
6
 
7
7
  describe ConstantFactory do
8
8
 
9
- MARGIN = 0.01
10
9
 
11
10
  before :each do
12
11
  @it = ConstantFactory.new
File without changes
@@ -6,7 +6,6 @@ include RubyOnAcid
6
6
 
7
7
  describe IncrementFactory do
8
8
 
9
- MARGIN = 0.01
10
9
 
11
10
  before :each do
12
11
  @it = IncrementFactory.new
@@ -6,7 +6,6 @@ include RubyOnAcid
6
6
 
7
7
  describe LoopFactory do
8
8
 
9
- MARGIN = 0.01
10
9
 
11
10
  before :each do
12
11
  @it = LoopFactory.new
File without changes
File without changes
File without changes
@@ -6,7 +6,6 @@ include RubyOnAcid
6
6
 
7
7
  describe RindaFactory do
8
8
 
9
- MARGIN = 0.01
10
9
 
11
10
  before :each do
12
11
  @it = RindaFactory.new
@@ -29,4 +28,12 @@ describe RindaFactory do
29
28
  @it.get_unit(:x).should == 0.6
30
29
  end
31
30
 
31
+ it "gets keys from a backup factory when it cannot retrieve values via Rinda" do
32
+ @it.start_service
33
+ default_factory = mock('Factory')
34
+ default_factory.stub!(:get_unit).and_return(0.74)
35
+ @it.default_factory = default_factory
36
+ @it.get_unit(:a).should == 0.74
37
+ end
38
+
32
39
  end
@@ -6,7 +6,6 @@ include RubyOnAcid
6
6
 
7
7
  describe SineFactory do
8
8
 
9
- MARGIN = 0.01
10
9
 
11
10
  before :each do
12
11
  @it = SineFactory.new
@@ -6,7 +6,6 @@ include RubyOnAcid
6
6
 
7
7
  describe SkipFactory do
8
8
 
9
- MARGIN = 0.01
10
9
 
11
10
  before :each do
12
11
  @it = SkipFactory.new
@@ -0,0 +1,59 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+ require "shared_factory_specs"
3
+ require 'rubyonacid/factories/constant'
4
+
5
+ include RubyOnAcid
6
+
7
+ describe Factory do
8
+
9
+ before :each do
10
+ @it = ConstantFactory.new
11
+ end
12
+
13
+ describe "#choose" do
14
+
15
+ it "chooses an item from a list" do
16
+ @it.stub!(:get_unit).and_return(0.0)
17
+ @it.choose(:color, :red, :green, :blue).should == :red
18
+ @it.stub!(:get_unit).and_return(1.0)
19
+ @it.choose(:color, :red, :green, :blue).should == :blue
20
+ @it.stub!(:get_unit).and_return(0.5)
21
+ @it.choose(:color, :red, :green, :blue).should == :green
22
+ end
23
+
24
+ it "matches a range of values for each list item" do
25
+ @it.stub!(:get_unit).and_return(0.0)
26
+ @it.choose(:foo, :a, :b, :c, :d).should == :a
27
+ @it.stub!(:get_unit).and_return(0.24)
28
+ @it.choose(:foo, :a, :b, :c, :d).should == :a
29
+ @it.stub!(:get_unit).and_return(0.25)
30
+ @it.choose(:foo, :a, :b, :c, :d).should == :b
31
+ @it.stub!(:get_unit).and_return(0.49)
32
+ @it.choose(:foo, :a, :b, :c, :d).should == :b
33
+ @it.stub!(:get_unit).and_return(0.5)
34
+ @it.choose(:foo, :a, :b, :c, :d).should == :c
35
+ @it.stub!(:get_unit).and_return(0.74)
36
+ @it.choose(:foo, :a, :b, :c, :d).should == :c
37
+ @it.stub!(:get_unit).and_return(0.75)
38
+ @it.choose(:foo, :a, :b, :c, :d).should == :d
39
+ @it.stub!(:get_unit).and_return(1.0)
40
+ @it.choose(:foo, :a, :b, :c, :d).should == :d
41
+ end
42
+
43
+ it "accepts multiple arguments" do
44
+ @it.stub!(:get_unit).and_return(1.0)
45
+ @it.choose(:color, :red, :green, :blue).should == :blue
46
+ end
47
+
48
+ it "accepts arrays" do
49
+ @it.stub!(:get_unit).and_return(1.0)
50
+ @it.choose(:color, [:red, :green, :blue]).should == :blue
51
+ @it.stub!(:get_unit).and_return(1.0)
52
+ @it.choose(:color, [:red, :green, :blue], [:yellow, :orange]).should == :orange
53
+ @it.stub!(:get_unit).and_return(0.0)
54
+ @it.choose(:color, [:red, :green, :blue], [:yellow, :orange]).should == :red
55
+ end
56
+
57
+ end
58
+
59
+ end
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,9 @@ require 'rubygems'
4
4
  require 'spec'
5
5
  require 'spec/autorun'
6
6
 
7
+ #Allowed margin of error for be_close.
8
+ MARGIN = 0.01
9
+
7
10
  Spec::Runner.configure do |config|
8
11
 
9
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyonacid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jay McGavren
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-30 00:00:00 -07:00
12
+ date: 2009-12-03 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -37,37 +37,40 @@ files:
37
37
  - README.textile
38
38
  - Rakefile
39
39
  - VERSION
40
+ - examples/ascii.rb
40
41
  - examples/midi.rb
41
42
  - examples/raw_audio.rb
42
- - examples/rmagick.rb
43
- - examples/test.rb
43
+ - examples/rinda_agent.rb
44
+ - examples/wxruby.rb
44
45
  - features/rubyonacid.feature
45
46
  - features/step_definitions/rubyonacid_steps.rb
46
47
  - features/support/env.rb
48
+ - generators.png
47
49
  - lib/rubyonacid.rb
50
+ - lib/rubyonacid/factories/combination.rb
48
51
  - lib/rubyonacid/factories/constant.rb
49
52
  - lib/rubyonacid/factories/flash.rb
50
53
  - lib/rubyonacid/factories/increment.rb
51
54
  - lib/rubyonacid/factories/loop.rb
52
55
  - lib/rubyonacid/factories/meta.rb
53
- - lib/rubyonacid/factories/modulo.rb
54
56
  - lib/rubyonacid/factories/random.rb
55
57
  - lib/rubyonacid/factories/repeat.rb
56
58
  - lib/rubyonacid/factories/rinda.rb
57
59
  - lib/rubyonacid/factories/sine.rb
58
60
  - lib/rubyonacid/factories/skip.rb
59
61
  - lib/rubyonacid/factory.rb
60
- - spec/generators/constant_spec.rb
61
- - spec/generators/flash_spec.rb
62
- - spec/generators/increment_spec.rb
63
- - spec/generators/loop_spec.rb
64
- - spec/generators/meta_spec.rb
65
- - spec/generators/modulo_spec.rb
66
- - spec/generators/random_spec.rb
67
- - spec/generators/repeat_spec.rb
68
- - spec/generators/rinda_spec.rb
69
- - spec/generators/sine_spec.rb
70
- - spec/generators/skip_spec.rb
62
+ - spec/factories/combination_spec.rb
63
+ - spec/factories/constant_spec.rb
64
+ - spec/factories/flash_spec.rb
65
+ - spec/factories/increment_spec.rb
66
+ - spec/factories/loop_spec.rb
67
+ - spec/factories/meta_spec.rb
68
+ - spec/factories/random_spec.rb
69
+ - spec/factories/repeat_spec.rb
70
+ - spec/factories/rinda_spec.rb
71
+ - spec/factories/sine_spec.rb
72
+ - spec/factories/skip_spec.rb
73
+ - spec/factory_spec.rb
71
74
  - spec/shared_factory_specs.rb
72
75
  - spec/spec_helper.rb
73
76
  has_rdoc: true
@@ -99,24 +102,25 @@ signing_key:
99
102
  specification_version: 3
100
103
  summary: A framework for creating trippy visuals
101
104
  test_files:
102
- - spec/generators/constant_spec.rb
103
- - spec/generators/flash_spec.rb
104
- - spec/generators/increment_spec.rb
105
- - spec/generators/loop_spec.rb
106
- - spec/generators/meta_spec.rb
107
- - spec/generators/modulo_spec.rb
108
- - spec/generators/random_spec.rb
109
- - spec/generators/repeat_spec.rb
110
- - spec/generators/rinda_spec.rb
111
- - spec/generators/sine_spec.rb
112
- - spec/generators/skip_spec.rb
105
+ - spec/factories/combination_spec.rb
106
+ - spec/factories/constant_spec.rb
107
+ - spec/factories/flash_spec.rb
108
+ - spec/factories/increment_spec.rb
109
+ - spec/factories/loop_spec.rb
110
+ - spec/factories/meta_spec.rb
111
+ - spec/factories/random_spec.rb
112
+ - spec/factories/repeat_spec.rb
113
+ - spec/factories/rinda_spec.rb
114
+ - spec/factories/sine_spec.rb
115
+ - spec/factories/skip_spec.rb
116
+ - spec/factory_spec.rb
113
117
  - spec/shared_factory_specs.rb
114
118
  - spec/spec_helper.rb
119
+ - examples/ascii.rb
115
120
  - examples/midi.rb
116
121
  - examples/permutations.rb
122
+ - examples/quality_render.rb
123
+ - examples/random_yaml.rb
117
124
  - examples/raw_audio.rb
118
125
  - examples/rinda_agent.rb
119
- - examples/rmagick.rb
120
- - examples/test.rb
121
- - examples/test2.rb
122
- - examples/test3.rb
126
+ - examples/wxruby.rb
data/examples/rmagick.rb DELETED
@@ -1,59 +0,0 @@
1
- #!/usr/bin/ruby
2
-
3
- require 'rubygems'
4
- require 'RMagick'
5
-
6
- require 'rubyonacid/factories/meta'
7
- require 'rubyonacid/factories/flash'
8
- require 'rubyonacid/factories/increment'
9
- require 'rubyonacid/factories/loop'
10
- require 'rubyonacid/factories/random'
11
- require 'rubyonacid/factories/sine'
12
- require 'rubyonacid/factories/skip'
13
-
14
- @f = RubyOnAcid::MetaFactory.new
15
- @f.factories << RubyOnAcid::LoopFactory.new
16
- @f.factories << RubyOnAcid::FlashFactory.new
17
- # @f.factories << RubyOnAcid::RandomFactory.new
18
- @f.factories << RubyOnAcid::SineFactory.new
19
- @f.factories << RubyOnAcid::SkipFactory.new
20
-
21
- def get(key)
22
- @f.within(key, 1, key.to_i)
23
- end
24
-
25
- canvas = Magick::Image.new(240, 300,
26
- Magick::HatchFill.new('white','lightcyan2'))
27
- gc = Magick::Draw.new
28
-
29
- while RubyOnAcid::SkipFactory.new(0.001).boolean(:continue_loop)
30
-
31
- # Draw ellipse
32
- gc.stroke('red')
33
- gc.stroke_width(get(10))
34
- gc.fill_opacity(0)
35
- gc.ellipse(get(120), get(150), get(80), get(120), 0, get(270))
36
-
37
- # Draw endpoints
38
- gc.stroke('gray50')
39
- gc.stroke_width(get(1))
40
- gc.circle(120, 150, 124, 150)
41
- gc.circle(200, 150, 204, 150)
42
- gc.circle(120, 30, 124, 30)
43
-
44
- # Draw lines
45
- gc.line(get(120), get(150), get(200), get(150))
46
- gc.line(get(120), get(150), get(120), get(30))
47
-
48
- # Annotate
49
- gc.stroke('transparent')
50
- gc.fill('black')
51
- gc.text(130, 35, "End")
52
- gc.text(188, 135, "Start")
53
- gc.text(130, 95, "'Height=#{get(120)}'")
54
- gc.text(55, 155, "'Width=#{get(80)}'")
55
-
56
- end
57
-
58
- gc.draw(canvas)
59
- canvas.write('shapes2.gif')
data/examples/test.rb DELETED
@@ -1,95 +0,0 @@
1
- require 'rubygems'
2
- require 'wx'
3
- require 'rubyonacid/factories/meta'
4
- require 'rubyonacid/factories/constant'
5
- require 'rubyonacid/factories/flash'
6
- require 'rubyonacid/factories/loop'
7
- require 'rubyonacid/factories/modulo'
8
- require 'rubyonacid/factories/random'
9
- require 'rubyonacid/factories/repeat'
10
- require 'rubyonacid/factories/sine'
11
- require 'rubyonacid/factories/skip'
12
-
13
-
14
-
15
- class MyApp < Wx::App
16
-
17
- WIDTH = 480
18
- HEIGHT = 480
19
-
20
- def on_init
21
-
22
- random_factory = RubyOnAcid::RandomFactory.new
23
-
24
- #The MetaFactory assigns factories to requested value types.
25
- @f = RubyOnAcid::MetaFactory.new
26
- #Loop factories loop from 0.0 to 1.0 (or 1.0 to 0.0 if the increment value is negative).
27
- @f.factory_pool << RubyOnAcid::LoopFactory.new(0.01)
28
- @f.factory_pool << RubyOnAcid::LoopFactory.new(-0.01)
29
- @f.factory_pool << RubyOnAcid::LoopFactory.new(0.001)
30
- @f.factory_pool << RubyOnAcid::LoopFactory.new(-0.001)
31
- #Constant factories always return the same value,
32
- @f.factory_pool << RubyOnAcid::ConstantFactory.new(rand)
33
- @f.factory_pool << RubyOnAcid::ConstantFactory.new(rand)
34
- @f.factory_pool << RubyOnAcid::FlashFactory.new(rand(100))
35
- #Sine factories produce a "wave" pattern.
36
- @f.factory_pool << RubyOnAcid::SineFactory.new(0.1)
37
- @f.factory_pool << RubyOnAcid::SineFactory.new(-0.1)
38
- @f.factory_pool << RubyOnAcid::SineFactory.new(0.01)
39
- @f.factory_pool << RubyOnAcid::SineFactory.new(-0.01)
40
- @f.factory_pool << RubyOnAcid::RepeatFactory.new(
41
- RubyOnAcid::LoopFactory.new(random_factory.within(:increment, -0.1, 0.1)),
42
- random_factory.within(:interval, 2, 100)
43
- )
44
- # @f.factory_pool << RubyOnAcid::RepeatFactory.new(
45
- # RubyOnAcid::RandomFactory.new,
46
- # random_factory.within(:interval, 2, 1000)
47
- # )
48
- @f.factory_pool << RubyOnAcid::RepeatFactory.new(
49
- RubyOnAcid::SineFactory.new(random_factory.within(:increment, -0.1, 0.1)),
50
- random_factory.within(:interval, 2, 100)
51
- )
52
- @f.factory_pool << RubyOnAcid::ModuloFactory.new(RubyOnAcid::LoopFactory.new(0.00001))
53
-
54
- #A skip factory, in charge of randomly resetting the meta factory.
55
- @resetter = RubyOnAcid::SkipFactory.new(0.9999)
56
-
57
- #Containing frame.
58
- frame = Wx::Frame.new(nil, :size => [WIDTH, HEIGHT])
59
- frame.show
60
-
61
- #Displays drawing.
62
- window = Wx::Window.new(frame, :size => [WIDTH, HEIGHT])
63
-
64
- #Animate periodically.
65
- t = Wx::Timer.new(self, 55)
66
- evt_timer(55) {animate(window)}
67
- t.start(33)
68
-
69
- end
70
-
71
- def animate(window)
72
- window.paint do |surface|
73
- surface.pen = Wx::Pen.new(
74
- Wx::Colour.new(
75
- @f.within(:red, 0, 255).to_i,
76
- @f.within(:green, 0, 255).to_i,
77
- @f.within(:blue, 0, 255).to_i,
78
- @f.within(:alpha, 50, 255).to_i
79
- ),
80
- @f.within(:width, 1, 5).to_i
81
- )
82
- surface.draw_line(
83
- @f.get(:x, :max => WIDTH).to_i,
84
- @f.get(:y, :max => HEIGHT).to_i,
85
- @f.get(:x2, :max => WIDTH).to_i,
86
- @f.get(:y2, :max => HEIGHT).to_i
87
- )
88
- end
89
- @f.reset_assignments if @resetter.boolean(:reset)
90
- end
91
-
92
- end
93
-
94
- app = MyApp.new
95
- app.main_loop
data/examples/test2.rb DELETED
@@ -1,85 +0,0 @@
1
- require 'rubygems'
2
- require 'wx'
3
- require 'rubyonacid/factories/meta'
4
- require 'rubyonacid/factories/constant'
5
- require 'rubyonacid/factories/flash'
6
- require 'rubyonacid/factories/increment'
7
- require 'rubyonacid/factories/loop'
8
- require 'rubyonacid/factories/modulo'
9
- require 'rubyonacid/factories/random'
10
- require 'rubyonacid/factories/repeat'
11
- require 'rubyonacid/factories/sine'
12
- require 'rubyonacid/factories/skip'
13
-
14
-
15
-
16
- class MyApp < Wx::App
17
-
18
- WIDTH = 1920
19
- HEIGHT = 1080
20
-
21
- def on_init
22
-
23
- ARGV.each do |file_name|
24
-
25
- puts "Processing #{file_name}"
26
-
27
- @f = YAML.load_file(file_name)
28
-
29
- frame = Wx::Frame.new(nil, :size => [WIDTH, HEIGHT])
30
-
31
-
32
- #Displays drawing.
33
- bitmap = Wx::Bitmap.new(WIDTH, HEIGHT)
34
- bitmap.draw do |surface|
35
- # surface.pen = black_pen
36
- surface.brush = Wx::BLACK_BRUSH
37
- surface.draw_rectangle(0, 0, WIDTH, HEIGHT)
38
- end
39
- 1000.times do
40
- bitmap.draw {|surface| render(surface)}
41
- end
42
- # bitmap.draw do |surface|
43
- # surface.text_foreground = Wx::Colour.new(255, 255, 255, 255)
44
- # # surface.text_background = Wx::Colour.new(0, 0, 0)
45
- # y = 0
46
- # @f.to_yaml.split("\n").each do |line|
47
- # surface.draw_text(line, 0, y)
48
- # y += 10
49
- # end
50
- # end
51
- bitmap.draw do |surface|
52
- surface.text_foreground = Wx::Colour.new(255, 255, 255, 255)
53
- surface.draw_text("©2009 Jay McGavren. Licensed under a Creative Commons Attribution-Share Alike 3.0 United States License: http://creativecommons.org/licenses/by-sa/3.0/us/", 10, HEIGHT - 20)
54
- end
55
-
56
- bitmap.save_file(file_name + ".png", Wx::BITMAP_TYPE_PNG)
57
-
58
- end
59
-
60
- exit
61
-
62
- end
63
-
64
- def render(surface)
65
- surface.pen = Wx::Pen.new(
66
- Wx::Colour.new(
67
- @f.within(:red, 0, 255).to_i,
68
- @f.within(:green, 0, 255).to_i,
69
- @f.within(:blue, 0, 255).to_i,
70
- @f.within(:alpha, 50, 100).to_i
71
- ),
72
- @f.within(:width, 1, 5).to_i
73
- )
74
- surface.draw_line(
75
- @f.within(:x, 0, WIDTH).to_i,
76
- @f.within(:y, 0, HEIGHT).to_i,
77
- @f.within(:x2, 0, WIDTH).to_i,
78
- @f.within(:y2, 0, HEIGHT).to_i
79
- )
80
- end
81
-
82
- end
83
-
84
- app = MyApp.new
85
- app.main_loop