xrvg 0.0.5 → 0.0.6

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.
Files changed (51) hide show
  1. data/CHANGES +8 -0
  2. data/README +1 -1
  3. data/Rakefile +36 -6
  4. data/examples/arciterate1.rb +13 -0
  5. data/examples/arcrecurse1.rb +30 -0
  6. data/examples/arcrecurse2.rb +37 -0
  7. data/examples/circleiterate1.rb +9 -0
  8. data/examples/circleiterate2.rb +11 -0
  9. data/examples/circleiterate3.rb +13 -0
  10. data/examples/circlerecurse1.rb +27 -0
  11. data/examples/circlerecurse2.rb +27 -0
  12. data/examples/circlerecurseall.rb +29 -0
  13. data/examples/euclideangeo.rb +11 -0
  14. data/examples/evolution1.rb +8 -0
  15. data/examples/evolution2.rb +9 -0
  16. data/examples/evolution3.rb +10 -0
  17. data/examples/fuseaugeo.rb +16 -0
  18. data/examples/gradientgeo.rb +21 -0
  19. data/examples/interbeziergeo1.rb +14 -0
  20. data/examples/interbeziergeo2.rb +17 -0
  21. data/examples/interbeziergeo3.rb +17 -0
  22. data/examples/offsetgeo.rb +16 -0
  23. data/lib/bezier.rb +37 -3
  24. data/lib/bezierbuilders.rb +17 -1
  25. data/lib/beziermotifs.rb +11 -4
  26. data/lib/bezierspline.rb +23 -1
  27. data/lib/beziertools.rb +48 -14
  28. data/lib/color.rb +55 -8
  29. data/lib/fitting.rb +2 -2
  30. data/lib/geometry2D.rb +10 -3
  31. data/lib/geovariety.rb +128 -0
  32. data/lib/interbezier.rb +4 -4
  33. data/lib/interpolation.rb +30 -17
  34. data/lib/parametriclength.rb +3 -2
  35. data/lib/render.rb +1 -2
  36. data/lib/samplation.rb +121 -19
  37. data/lib/shape.rb +2 -2
  38. data/lib/spiral.rb +72 -0
  39. data/lib/utils.rb +97 -76
  40. data/lib/xrvg.rb +3 -3
  41. data/test/test_bezier.rb +17 -2
  42. data/test/test_bezierbuilders.rb +1 -1
  43. data/test/test_beziertools.rb +7 -0
  44. data/test/test_color.rb +12 -0
  45. data/test/test_geovariety.rb +105 -0
  46. data/test/test_interpolation.rb +2 -1
  47. data/test/test_render.rb +0 -4
  48. data/test/test_sample.rb +28 -0
  49. data/test/test_spiral.rb +22 -0
  50. data/test/test_utils.rb +65 -40
  51. metadata +26 -2
@@ -0,0 +1,105 @@
1
+ require 'test/unit'
2
+ require 'geovariety'
3
+
4
+
5
+ class GeoVarietor
6
+ include GeoVariety
7
+ end
8
+
9
+ class GeoVarietyTest < Test::Unit::TestCase
10
+
11
+ def test_abstract
12
+ assert_raise(NotImplementedError){GeoVarietor[].point(V2D::O)}
13
+ assert_raise(NotImplementedError){GeoVarietor[].line(0.0,1.0,0.5)}
14
+ end
15
+ end
16
+
17
+ class InterBezierTest2 < Test::Unit::TestCase
18
+
19
+ def test_point
20
+ bezier1 = Bezier.raw( V2D::O, V2D::X, V2D::O, V2D::X )
21
+ center = V2D::O
22
+ bezier2 = Bezier.raw( center, center, center, center )
23
+ interbezier = InterBezier.new( :bezierlist, [0.0, bezier1, 1.0, bezier2] )
24
+ assert( V2D.vequal?( interbezier.sample( 0.5 ).point( 0.5 ), interbezier.point( V2D[0.5,0.5] ) ) )
25
+ end
26
+
27
+ def test_line
28
+ bezier1 = Bezier.raw( V2D::O, V2D::X, V2D::O, V2D::X )
29
+ center = V2D::O
30
+ bezier2 = Bezier.raw( center, center, center, center )
31
+ interbezier = InterBezier.new( :bezierlist, [0.0, bezier1, 1.0, bezier2] )
32
+ raw = interbezier.sample( 0.5 ).subbezier( 0.3, 0.7 )
33
+ geo = interbezier.line( 0.3, 0.7, 0.5 )
34
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
35
+ assert( V2D.vequal?( p1, p2 ) )
36
+ end
37
+ end
38
+
39
+ def test_bezier
40
+ bezier1 = Bezier.raw( V2D::O, V2D::X, V2D::O, V2D::X )
41
+ center = V2D::O
42
+ bezier2 = Bezier.raw( center, center, center, center )
43
+ interbezier = InterBezier.new( :bezierlist, [0.0, bezier1, 1.0, bezier2] )
44
+
45
+ geo = interbezier.bezier( (V2D[0.0,0.5]..V2D[1.0,0.5]), bezier1 )
46
+ raw = LinearBezier[ :support, [V2D::O, V2D::X * 0.5] ]
47
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
48
+ assert( V2D.vequal?( p1, p2 ) )
49
+ end
50
+ end
51
+ end
52
+
53
+
54
+ class OffsetVarietyTest < Test::Unit::TestCase
55
+
56
+ def test_point
57
+ offsetvariety = OffsetVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
58
+ assert( V2D.vequal?( V2D[0.5,0.0], offsetvariety.point( V2D[0.5,0.5] ) ) )
59
+ end
60
+
61
+ def test_line
62
+ offsetvariety = OffsetVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
63
+ geo = offsetvariety.line( 0.25, 0.75, 0.75 )
64
+ raw = LinearBezier[ :support, [V2D[0.25,0.5], V2D[0.75,0.5]] ]
65
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
66
+ assert( V2D.vequal?( p1, p2 ) )
67
+ end
68
+ end
69
+
70
+ def test_bezier
71
+ offsetvariety = OffsetVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
72
+ geo = offsetvariety.bezier( (V2D[0.25,0.75]..V2D[0.75,0.75]), LinearBezier.buildwithangle( 0.0 ) )
73
+ raw = LinearBezier[ :support, [V2D[0.25,0.5], V2D[0.75,0.5]] ]
74
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
75
+ assert( V2D.vequal?( p1, p2 ) )
76
+ end
77
+ end
78
+ end
79
+
80
+ class FuseauVarietyTest < Test::Unit::TestCase
81
+
82
+ def test_point
83
+ offsetvariety = FuseauVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
84
+ assert( V2D.vequal?( V2D[0.5,0.0], offsetvariety.point( V2D[0.5,0.5] ) ) )
85
+ end
86
+
87
+ def test_line
88
+ offsetvariety = FuseauVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
89
+ geo = offsetvariety.line( 0.25, 0.75, 0.5 )
90
+ raw = LinearBezier[ :support, [V2D[0.0,0.0], V2D[1.0,0.0]] ].subbezier( 0.25, 0.75 )
91
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
92
+ assert( V2D.vequal?( p1, p2 ) )
93
+ end
94
+ end
95
+
96
+ def test_bezier
97
+ offsetvariety = FuseauVariety[ :support, LinearBezier.buildwithangle( 0.0 ), :ampl, 1.0 ]
98
+ geo = offsetvariety.bezier( (V2D[0.25,0.5]..V2D[0.75,0.5]), LinearBezier.buildwithangle( 0.0 ) )
99
+ raw = LinearBezier[ :support, [V2D[0.25,0.0], V2D[0.75,0.0]] ]
100
+ [raw.pointlist, geo.pointlist].forzip do |p1,p2|
101
+ assert( V2D.vequal?( p1, p2 ) )
102
+ end
103
+ end
104
+ end
105
+
@@ -4,7 +4,7 @@ require 'interpolation'
4
4
  class InterpolatorTest < Test::Unit::TestCase
5
5
 
6
6
  def test_quadtree
7
- quad = QuadTree.new( [0.0,1.0, 0.2,0.0, 0.6,1.0, 0.8,0.0, 1.0,1.0] )
7
+ quad = BinaryTree.new( [0.0,1.0, 0.2,0.0, 0.6,1.0, 0.8,0.0, 1.0,1.0] )
8
8
  assert_equal( [0.2,0.0, 0.6,1.0], quad.range( 0.5 ) )
9
9
  assert_equal( [0.0,1.0, 0.2,0.0], quad.range( 0.0 ) )
10
10
  assert_equal( [0.8,0.0, 1.0,1.0], quad.range( 1.0 ) )
@@ -22,6 +22,7 @@ class InterpolatorTest < Test::Unit::TestCase
22
22
  end
23
23
  def test_interpolation
24
24
  assert_raise(NotImplementedError) {A[].samplelist}
25
+ assert_equal( :linear, A[].interpoltype )
25
26
  end
26
27
 
27
28
  end
data/test/test_render.rb CHANGED
@@ -4,7 +4,6 @@ require 'render'
4
4
  class SVGRenderTest < Test::Unit::TestCase
5
5
 
6
6
  def test_render
7
- require 'shape'
8
7
  if File.exist?( "svgrender.svg" )
9
8
  File.delete( "svgrender.svg" )
10
9
  end
@@ -15,7 +14,6 @@ class SVGRenderTest < Test::Unit::TestCase
15
14
  end
16
15
 
17
16
  def test_render2
18
- require 'shape'
19
17
  if File.exist?( "svgrender.svg" )
20
18
  File.delete( "svgrender.svg" )
21
19
  end
@@ -29,7 +27,6 @@ class SVGRenderTest < Test::Unit::TestCase
29
27
  end
30
28
 
31
29
  def test_render3
32
- require 'shape'
33
30
  if File.exist?( "svgrender.svg" )
34
31
  File.delete( "svgrender.svg" )
35
32
  end
@@ -40,7 +37,6 @@ class SVGRenderTest < Test::Unit::TestCase
40
37
  end
41
38
 
42
39
  def test_render4
43
- require 'shape'
44
40
  if File.exist?( "svgrender.svg" )
45
41
  File.delete( "svgrender.svg" )
46
42
  end
@@ -0,0 +1,28 @@
1
+ require 'test/unit'
2
+ require 'xrvg'
3
+ include XRVG
4
+
5
+ class STest < Test::Unit::TestCase
6
+
7
+ def test_sample
8
+ # assert_equal( [0.0, 0.571428571428571, 0.857142857142857, 1.0], (0.0..1.0).geofull(2.0).samples( 4 ) )
9
+ assert_equal( [0.0, 0.5, 0.75], [(0.0..0.75)].geofull(2.0).samples( 3 ) )
10
+ end
11
+
12
+ def test_sin
13
+ [[0.0,0.0], (0.0..1.0).sin().samples( 2 )].forzip do |exp, real|
14
+ assert( exp.fequal?( real ) )
15
+ end
16
+ end
17
+
18
+ def test_random
19
+ result = (0.0..1.0).random.samples( 10 )
20
+ assert_not_equal( result, result.sort )
21
+ result = (0.0..1.0).random(:sort,true).samples( 10 )
22
+ assert_equal( result, result.sort )
23
+ result = (0.0..1.0).random(:mindiff, 0.01).samples( 10 )
24
+ assert_not_equal( result, result.sort )
25
+ end
26
+ end
27
+
28
+
@@ -0,0 +1,22 @@
1
+ require 'test/unit'
2
+ # require 'XRVG'
3
+ # include XRVG
4
+
5
+ class SpiralTest < Test::Unit::TestCase
6
+
7
+ def test_abstract
8
+ assert_raise(NotImplementedError) {GSpiral.new.compute_radius( 0.0,0.0,0.0,0.0)}
9
+ end
10
+
11
+ def test_all
12
+ spiral = SpiralLog[]
13
+ # assert_equal( V2D::O, spiral.point( 1.0 ) )
14
+ assert_equal( V2D::X, spiral.point( 0.0 ) )
15
+ spiral = SpiralLinear[]
16
+ assert_equal( V2D::X, spiral.point( 0.0 ) )
17
+
18
+ assert_raise(NotImplementedError) {GSpiral.new.maxangle( 0.0,0.0,0.0)}
19
+ end
20
+
21
+ end
22
+
data/test/test_utils.rb CHANGED
@@ -1,39 +1,7 @@
1
1
  require 'test/unit'
2
- require 'utils'
2
+ require 'xrvg'
3
+ include XRVG
3
4
 
4
- class IntegerTest < Test::Unit::TestCase
5
-
6
- def test_denum!
7
- assert_equal( [10.0, 20.0, 30.0], (10.0..30.0).samples( 3 ) )
8
- end
9
-
10
- def test_numsplit!
11
- assert_equal( [0.0, 5.0, 10.0], (0.0..10.0).samples( 3 ) )
12
- end
13
-
14
- def test_itergeo!
15
- # assert_equal( [1.0, 0.246596963941606, 0.0608100626252179], (1.0..0.0).geo(2.8).samples(3) )
16
- end
17
-
18
- def test_randsplit1!
19
- result = 3.randsplit!
20
- assert_equal( 1.0, result[0] + result[1] + result[2] )
21
- assert_equal( [], 3.randsplit!( 4.0 ) )
22
- end
23
-
24
- def test_randsplitsum!
25
- result = 3.randsplitsum!
26
- puts "test_randsplitsum! result #{result.join(" ")}"
27
- result.each_cons(2) {|min, max| assert( min <= max )}
28
- end
29
-
30
- def test_randsplitsum2!
31
- result = 3.randsplitsum!(0.3)
32
- puts "test_randsplitsum! minsize result #{result.join(" ")}"
33
- result.each_cons(2) {|min, max| assert( min <= max )}
34
- end
35
-
36
- end
37
5
 
38
6
  class StringTest < Test::Unit::TestCase
39
7
 
@@ -151,9 +119,20 @@ class ArrayTest < Test::Unit::TestCase
151
119
 
152
120
  def test_range
153
121
  assert_equal( (1.0..5.0), [5.0,3.0,1.0].range )
122
+ assert_equal( (1.0..2.0), [V2D[2.0,1.0], V2D[1.0,2.0]].range( :x ) )
123
+ end
124
+
125
+ def test_sample
126
+ assert_equal( [0.0, 0.5, 0.75], [(0.0..0.75)].geofull(2.0).samples( 3 ) )
154
127
  end
155
128
 
129
+ def test_choice
130
+ assert_equal( 0.0, [0.0,0.0,0.0].choice )
131
+ end
156
132
 
133
+ def test_shuffle
134
+ assert_not_equal( [0.0, 0.1, 0.2, 0.5, 1.0], [0.0,0.1, 0.2, 0.5,1.0].shuffle )
135
+ end
157
136
  end
158
137
 
159
138
  class FloatTest < Test::Unit::TestCase
@@ -163,14 +142,17 @@ class FloatTest < Test::Unit::TestCase
163
142
  end
164
143
 
165
144
  def test_complement
166
- assert_equal( 0.75, 0.25.complement )
145
+ assert_equal( 0.75, (0.0..1.0).complement( 0.25 ) )
146
+ end
147
+
148
+ def test_fequal
149
+ assert( 0.25.fequal?( 0.26,0.02) )
150
+ assert_equal( false, 0.25.fequal?( 0.26,0.01) )
167
151
  end
168
152
 
169
- def test_randsplit
170
- assert_equal( 2, 0.25.randsplit.length )
171
- puts "randsplit 0.25 #{0.25.randsplit}"
172
- r = 0.25.randsplit
173
- assert_equal( 0.25, r[0] + r[1] )
153
+ def test_sort_float_list
154
+ assert_equal( [0.25], Float.sort_float_list([0.26,0.25], 0.02 ) )
155
+ assert_equal( [0.25,0.26], Float.sort_float_list([0.26,0.25], 0.01 ) )
174
156
  end
175
157
 
176
158
  def test_float_include
@@ -195,6 +177,20 @@ class RangeTest < Test::Unit::TestCase
195
177
  assert_not_equal( [0.0, 1.0], (0.0..1.0).ssort.random.samples(2))
196
178
  end
197
179
 
180
+ def test_random
181
+ result = Range.O.random(:mindiff,0.0).samples( 3 )
182
+ # what kinf of test ?
183
+ assert_raise(RuntimeError) {Range.O.random(:mindiff,6.0).samples( 3 )}
184
+ assert_equal( [0.0,1.0,2.0], (0.0..2.0).random(:mindiff,0.5,:sort,true).samples( 3 ) )
185
+ assert_not_equal( [0.0, 1.0], (0.0..1.0).random.samples(2))
186
+ assert_equal( [0.0, 0.5, 1.0], (0.0..1.0).random(:mindiff,0.5,:sort,true).samples(3))
187
+ assert_raise(RuntimeError) {(0.0..1.0).random(:mindiff,0.6).samples(3)}
188
+ end
189
+
190
+ def test_shuffle
191
+ assert_not_equal( [0.0, 0.25, 0.5, 0.75, 1.0], (0.0..1.0).shuffle.samples(5))
192
+ assert_equal( [0.0, 0.25, 0.5, 0.75, 1.0], (0.0..1.0).ssort.shuffle.samples(5))
193
+ end
198
194
 
199
195
  def test_samplesblock
200
196
  result = []
@@ -209,6 +205,31 @@ class RangeTest < Test::Unit::TestCase
209
205
  assert_equal( [(0.0..0.5), (0.5..1.0)], (0.0..1.0).splits(2) )
210
206
  end
211
207
 
208
+ def test_modulo
209
+ assert_equal( -0.5, (-1.0..1.5).modulo( 2.0 ) )
210
+ end
211
+
212
+ def test_modulos
213
+ assert_equal( [(0.2..0.3)], (0.0..1.0).modulos( (0.2..0.3) ) )
214
+ assert_equal( [(0.3..0.2)], (0.0..1.0).modulos( (0.3..0.2) ) )
215
+ [(0.0..1.0).modulos( (1.1..0.2) ), [(0.1..0.0), (1.0..0.2)]].forzip do |res, exp|
216
+ assert( res.begin.fequal?( exp.begin ) )
217
+ assert( res.end.fequal?( exp.end ) )
218
+ end
219
+ [(0.0..1.0).modulos( (0.2..1.1) ), [(0.2..1.0), (0.0..0.1)]].forzip do |res, exp|
220
+ assert( res.begin.fequal?( exp.begin ) )
221
+ assert( res.end.fequal?( exp.end ) )
222
+ end
223
+ [(0.0..1.0).modulos( (0.2..2.1) ), [(0.2..1.0), (0.0..1.0), (0.0..0.1)]].forzip do |res, exp|
224
+ assert( res.begin.fequal?( exp.begin ) )
225
+ assert( res.end.fequal?( exp.end ) )
226
+ end
227
+ end
228
+
229
+ def test_size
230
+ assert_equal( 1.2, (2.0..0.8).size )
231
+ end
232
+
212
233
  def test_splitblock
213
234
  result = []
214
235
  (0.0..1.0).splits(2) do |subrange|
@@ -331,6 +352,10 @@ class SampleTest < Test::Unit::TestCase
331
352
  assert_equal( 1.0, (0.0..1.0).geo(100.0).sample( 1.0 ) )
332
353
  end
333
354
 
355
+ def test_geofull
356
+ assert_equal( [0.0,2.0/3.0,1.0], (0.0..1.0).geofull(2.0).samples( 3 ))
357
+ end
358
+
334
359
  def test_alternate
335
360
  assert_equal( [1.0,1.5], (1.0..0.0).alternate.samples( [0.0,0.5] ) )
336
361
  assert_equal( [0.0,-0.5], AlternateFilter[(0.0..1.0)].samples( [0.0,0.5] ) )
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: xrvg
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.5
7
- date: 2008-03-22 00:00:00 +01:00
6
+ version: 0.0.6
7
+ date: 2008-08-06 00:00:00 +02:00
8
8
  summary: Ruby vector graphics library
9
9
  require_paths:
10
10
  - lib
@@ -40,27 +40,48 @@ files:
40
40
  - lib/fitting.rb
41
41
  - lib/frame.rb
42
42
  - lib/geometry2D.rb
43
+ - lib/geovariety.rb
43
44
  - lib/interbezier.rb
44
45
  - lib/interpolation.rb
45
46
  - lib/parametriclength.rb
46
47
  - lib/render.rb
47
48
  - lib/samplation.rb
48
49
  - lib/shape.rb
50
+ - lib/spiral.rb
49
51
  - lib/style.rb
50
52
  - lib/trace.rb
51
53
  - lib/utils.rb
52
54
  - lib/xrvg.rb
55
+ - examples/arciterate1.rb
56
+ - examples/arcrecurse1.rb
57
+ - examples/arcrecurse2.rb
53
58
  - examples/bezierbasic.rb
54
59
  - examples/bezierbasicvector.rb
60
+ - examples/circleiterate1.rb
61
+ - examples/circleiterate2.rb
62
+ - examples/circleiterate3.rb
63
+ - examples/circlerecurse1.rb
64
+ - examples/circlerecurse2.rb
65
+ - examples/circlerecurseall.rb
66
+ - examples/euclideangeo.rb
67
+ - examples/evolution1.rb
68
+ - examples/evolution2.rb
69
+ - examples/evolution3.rb
55
70
  - examples/foreach.rb
71
+ - examples/fuseaugeo.rb
56
72
  - examples/geodash.rb
57
73
  - examples/geodash2.rb
74
+ - examples/gradientgeo.rb
58
75
  - examples/hellocrown.rb
59
76
  - examples/hellocrown2.rb
60
77
  - examples/hellocrownrecurse.rb
61
78
  - examples/helloworldcompact.rb
62
79
  - examples/helloworldexpanded.rb
80
+ - examples/interbeziergeo1.rb
81
+ - examples/interbeziergeo2.rb
82
+ - examples/interbeziergeo3.rb
63
83
  - examples/multibezierbasic.rb
84
+ - examples/offsetgeo.rb
64
85
  - examples/palette_circle.rb
65
86
  - examples/randomdash.rb
66
87
  - examples/range_examples.rb
@@ -79,11 +100,14 @@ test_files:
79
100
  - test/test_fitting.rb
80
101
  - test/test_frame.rb
81
102
  - test/test_geometry2D.rb
103
+ - test/test_geovariety.rb
82
104
  - test/test_interbezier.rb
83
105
  - test/test_interpolation.rb
84
106
  - test/test_parametric_length.rb
85
107
  - test/test_render.rb
108
+ - test/test_sample.rb
86
109
  - test/test_shape.rb
110
+ - test/test_spiral.rb
87
111
  - test/test_style.rb
88
112
  - test/test_trace.rb
89
113
  - test/test_utils.rb