texplay 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ 11/9/09
2
+ version 0.2.3
3
+ * added Ruby 1.8.7 compatibility by modifying extconf.rb to define RUBY_19 macro
4
+ * and modified compat.h to get rid of feature test (fails on 1.8.7)
5
+
1
6
  8/9/09
2
7
  version 0.2.2
3
8
  * fixed color_control bug, action_struct->color was being overwritten (now using a temp).
data/README.markdown CHANGED
@@ -5,7 +5,7 @@
5
5
  INSTRUCTIONS
6
6
  ============
7
7
 
8
- **TexPlay version 0.2.2**
8
+ **TexPlay version 0.2.3**
9
9
 
10
10
  Gem installation:
11
11
 
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'rake/clean'
2
2
  require 'rake/gempackagetask'
3
3
 
4
+ TEXPLAY_VERSION = "0.2.3"
5
+
4
6
  $dlext = Config::CONFIG['DLEXT']
5
7
 
6
8
  CLEAN.include("src/*.#{$dlext}", "src/*.log", "src/*.o", "src/*~", "src/*#*", "src/*.obj", "src/*.def", "src/*.pdb")
@@ -38,7 +40,7 @@ end
38
40
  specification = Gem::Specification.new do |s|
39
41
  s.name = "texplay"
40
42
  s.summary = "TexPlay is a light-weight image manipulation framework for Ruby and Gosu"
41
- s.version = "0.2.2"
43
+ s.version = TEXPLAY_VERSION
42
44
  s.date = "2009-09-09"
43
45
  s.author = "John Mair (banisterfiend)"
44
46
  s.email = 'jrmair@gmail.com'
@@ -47,7 +49,7 @@ specification = Gem::Specification.new do |s|
47
49
  s.add_dependency("gosu",">=0.7.14")
48
50
  s.homepage = "http://banisterfiend.wordpress.com/2008/08/23/texplay-an-image-manipulation-tool-for-ruby-and-gosu/"
49
51
  s.has_rdoc = false
50
- s.files = ["Rakefile", "README.markdown", "CHANGELOG", "README1st",
52
+ s.files = ["Rakefile", "README.markdown", "CHANGELOG",
51
53
  "lib/texplay.rb", "lib/texplay-contrib.rb"] +
52
54
  FileList["src/*", "examples/*.rb", "examples/media/*"].to_a
53
55
 
@@ -6,7 +6,7 @@ require 'texplay'
6
6
  class W < Gosu::Window
7
7
  def initialize
8
8
  super(1024, 768, false, 20)
9
- @img = TexPlay::create_blank_image(self, 1022, 1022)
9
+ @img = TexPlay::create_blank_image(self, 1022, 800)
10
10
  @tp = Gosu::Image.new(self, "#{Common::MEDIA}/texplay.png")
11
11
  @gosu = Gosu::Image.new(self, "#{Common::MEDIA}/sand1.png")
12
12
 
@@ -25,7 +25,7 @@ class W < Gosu::Window
25
25
  @img.bezier points
26
26
 
27
27
  # NOTE: the :texture hash argument works on ALL drawing actions; not just fills
28
- @img.fill 300, 600, :texture => @gosu
28
+ @img.fill 300, 650, :texture => @gosu
29
29
 
30
30
  # let's demonstrate by drawing a circle using the gosu.png texture
31
31
  # NOTE: :texture even works on lines, boxes, polylines, beziers etc.
@@ -0,0 +1,51 @@
1
+ require 'common'
2
+ require 'texplay'
3
+
4
+ Dragon = TexPlay::LSystem.new do
5
+ rule "F" => "F"
6
+ rule "X" => "X+YF+"
7
+ rule "Y" => "-FX-Y"
8
+ angle 90
9
+
10
+ atom "FX"
11
+ end
12
+
13
+ Bush1 = TexPlay::LSystem.new do
14
+ rule "F" => "F[-F]F[+F][F]"
15
+
16
+ angle 20
17
+ atom "F"
18
+ end
19
+
20
+ Bush2 = TexPlay::LSystem.new do
21
+ rule "F" => "FF"
22
+ rule "X" => "F[+X]F[-X]+X"
23
+
24
+ angle 20
25
+ atom "X"
26
+ end
27
+
28
+ Bush3 = TexPlay::LSystem.new do
29
+ rule "F" => "FF"
30
+ rule "X" => "F-[[X]+X]+F[+FX]-X"
31
+
32
+ angle 22.5
33
+ atom "X"
34
+ end
35
+
36
+
37
+
38
+ class W < Gosu::Window
39
+ def initialize
40
+ super(1024, 768, false, 20)
41
+ @img = TexPlay::create_blank_image(self, 800, 500)
42
+ @img.lsystem(250, 250, Dragon, :order => 13, :line_length => 2)
43
+ end
44
+
45
+ def draw
46
+ @img.draw(100,0,1)
47
+ end
48
+ end
49
+
50
+ w = W.new
51
+ w.show
@@ -5,12 +5,22 @@ end
5
5
 
6
6
  require 'texplay'
7
7
 
8
+ # monkey-patches to core classes
9
+ class String
10
+ if !method_defined? :each_char
11
+ alias_method :_each_char, :each_byte
12
+ else
13
+ alias_method :_each_char, :each_char
14
+ end
15
+ end
16
+
8
17
  # setup will be executed straight after Gosu::Image instantiation
9
18
  TexPlay::on_setup do
10
19
  @turtle_pos = TexPlay::TPPoint.new(width / 2, height / 2 )
11
20
  @turtle_angle = 0
12
21
  end
13
22
 
23
+
14
24
  TexPlay::create_macro(:move_to) do |x, y|
15
25
  capture {
16
26
  @turtle_pos.x = x
@@ -73,5 +83,71 @@ TexPlay::create_macro(:forward) do |dist, *other|
73
83
  }
74
84
  end
75
85
 
86
+ ## L-System code
87
+
88
+ # monkeypatches to TexPlay class
89
+ module TexPlay
90
+ class LSystem
91
+ def initialize(&block)
92
+ @rules = {}
93
+
94
+ instance_eval(&block) if block
95
+ end
96
+
97
+ def rule(new_rule)
98
+ @rules.merge!(new_rule)
99
+ end
100
+
101
+ def atom(new_atom)
102
+ @atom = new_atom
103
+ end
104
+
105
+ def angle(new_angle=nil)
106
+ return @angle if !new_angle
107
+ @angle = new_angle
108
+ end
76
109
 
110
+ def produce_string(order)
111
+ order = order[:order]
112
+ string = @atom.dup
113
+
114
+ order.times do
115
+ i = 0
116
+ while(i < string.length)
117
+ sub = @rules[string[i, 1]]
118
+
119
+ string[i] = sub if sub
120
+
121
+ i += sub ? sub.length : 1
122
+ end
123
+ end
124
+
125
+ string
126
+ end
127
+ end
128
+ end
77
129
 
130
+ # L-System macro
131
+ TexPlay::create_macro(:lsystem) do |x, y, system, options|
132
+ capture {
133
+ theta = system.angle
134
+ turtle_stack = []
135
+ move_to(x, y)
136
+ line_length = options[:line_length] || 1
137
+
138
+ system.produce_string(options)._each_char do |v|
139
+ case v
140
+ when "F"
141
+ forward(line_length, true)
142
+ when "+"
143
+ turn(theta)
144
+ when "-"
145
+ turn(-theta)
146
+ when "["
147
+ turtle_stack.push([@turtle_pos.dup, @turtle_angle])
148
+ when "]"
149
+ @turtle_pos, @turtle_angle = turtle_stack.pop
150
+ end
151
+ end
152
+ }
153
+ end
data/lib/texplay.rb CHANGED
@@ -10,7 +10,7 @@ require 'rbconfig'
10
10
  require 'gosu'
11
11
 
12
12
  module TexPlay
13
- TEXPLAY_VERSION = "0.2.2"
13
+ TEXPLAY_VERSION = "0.2.3"
14
14
 
15
15
  def self::on_setup(&block)
16
16
  raise "need a block" if !block
data/src/Makefile CHANGED
@@ -58,7 +58,7 @@ warnflags = -Wall -Wno-parentheses
58
58
  CFLAGS = -fPIC $(cflags)
59
59
  INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
60
60
  DEFS = -D_FILE_OFFSET_BITS=64
61
- CPPFLAGS = $(DEFS) $(cppflags)
61
+ CPPFLAGS = $(DEFS) $(cppflags) -DRUBY_19
62
62
  CXXFLAGS = $(CFLAGS) $(cxxflags)
63
63
  ldflags = -L. -rdynamic -Wl,-export-dynamic
64
64
  dldflags =
data/src/compat.h CHANGED
@@ -6,9 +6,13 @@
6
6
  #include <ruby.h>
7
7
 
8
8
  /* this is the test we use to identify ruby 1.9.1 */
9
+
10
+ /* commenting out this test because it doesn't seem to work in 1.8.7 */
11
+ /*
9
12
  #ifdef RCLASS_M_TBL
10
13
  # define RUBY_19
11
14
  #endif
15
+ */
12
16
 
13
17
  /* macros for backwards compatibility with 1.8 */
14
18
  #ifndef RUBY_19
data/src/extconf.rb CHANGED
@@ -15,4 +15,7 @@ else
15
15
  exit unless have_library("glut32")
16
16
  end
17
17
 
18
+ # 1.9 compatibility
19
+ $CPPFLAGS += " -DRUBY_19" if RUBY_VERSION =~ /1.9/
20
+
18
21
  create_makefile('ctexplay')
data/src/utils.c CHANGED
@@ -946,10 +946,26 @@ fact(int n)
946
946
  }
947
947
 
948
948
  unsigned
949
- comb(int n, int k)
949
+ comb(int n, int r)
950
950
  {
951
- double temp = fact(n) / (fact(k) * fact(n - k));
951
+ double temp = fact(n) / (fact(r) * fact(n - r));
952
952
  return temp;
953
+ /* if(r > (n / 2))
954
+ r = n - r;
955
+
956
+ return perm(n, r) / fact(r);
957
+ */
958
+ }
959
+
960
+ unsigned
961
+ perm(int n, int r)
962
+ {
963
+ int val = n;
964
+ int i;
965
+ for(i = n - 1; i > (n - r); i--)
966
+ val *= i;
967
+
968
+ return val;
953
969
  }
954
970
 
955
971
  double
data/src/utils.h CHANGED
@@ -138,6 +138,8 @@ VALUE point_y(VALUE point);
138
138
  double power(float base, int exp);
139
139
  unsigned fact(int n);
140
140
  unsigned comb(int n, int k);
141
+ unsigned perm(int n, int r);
142
+
141
143
  double bernstein(int n, int k, float u);
142
144
 
143
145
  #endif
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: texplay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mair (banisterfiend)
@@ -34,7 +34,6 @@ files:
34
34
  - Rakefile
35
35
  - README.markdown
36
36
  - CHANGELOG
37
- - README1st
38
37
  - lib/texplay.rb
39
38
  - lib/texplay-contrib.rb
40
39
  - src/texplay.c
@@ -74,6 +73,7 @@ files:
74
73
  - examples/example_splice.rb
75
74
  - examples/example_alpha_blend.rb
76
75
  - examples/example_melt.rb
76
+ - examples/example_lsystem.rb
77
77
  - examples/media/sand1.png
78
78
  - examples/media/rose.bmp
79
79
  - examples/media/maria.png
data/README1st DELETED
@@ -1,9 +0,0 @@
1
- INSTRUCTIONS
2
-
3
- TexPlay version 0.2.2
4
-
5
- *Ensure that ctexplay.so and gosu.so, and texplay.rb and texplay-contrib.rb are in the working directory for your project
6
- *require 'texplay' in your ruby program to access the TexPlay module
7
- *see example programs, for illustration of use
8
-
9
-