xrvg 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +34 -0
- data/README +2 -2
- data/Rakefile +111 -29
- data/examples/bezierbasic.rb +7 -0
- data/examples/bezierbasicvector.rb +7 -0
- data/examples/foreach.rb +1 -1
- data/examples/geodash.rb +8 -0
- data/examples/geodash2.rb +8 -0
- data/examples/hellocrown.rb +1 -1
- data/examples/hellocrown2.rb +1 -1
- data/examples/hellocrownrecurse.rb +1 -1
- data/examples/multibezierbasic.rb +8 -0
- data/examples/randomdash.rb +8 -0
- data/examples/range_examples.rb +16 -0
- data/examples/range_examples2.rb +10 -0
- data/examples/sample.rb +4 -2
- data/examples/simpledash.rb +8 -0
- data/examples/uplets.rb +1 -1
- data/lib/bezier.rb +461 -0
- data/lib/bezierspline.rb +266 -0
- data/lib/color.rb +44 -5
- data/lib/geometry2D.rb +116 -90
- data/lib/interpolation.rb +4 -2
- data/lib/samplation.rb +16 -10
- data/lib/shape.rb +101 -53
- data/lib/style.rb +13 -12
- data/lib/utils.rb +4 -3
- data/lib/xrvg.rb +2 -3
- data/test/test_bezier.rb +151 -0
- data/test/test_geometry2D.rb +38 -25
- data/test/test_shape.rb +67 -0
- data/test/test_utils.rb +45 -0
- metadata +28 -14
- data/examples/helloworld.rb +0 -5
data/test/test_geometry2D.rb
CHANGED
@@ -2,75 +2,88 @@ require 'test/unit'
|
|
2
2
|
require 'geometry2D.rb'
|
3
3
|
|
4
4
|
# Test class
|
5
|
-
class
|
5
|
+
class V2DTest < Test::Unit::TestCase
|
6
6
|
|
7
7
|
def test_indice
|
8
|
-
s =
|
9
|
-
assert_equal(1, s
|
10
|
-
assert_equal(0, s
|
8
|
+
s = V2D[0,1]
|
9
|
+
assert_equal(1, s.y)
|
10
|
+
assert_equal(0, s.x)
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_add
|
14
|
-
s =
|
15
|
-
t =
|
16
|
-
assert_equal(
|
14
|
+
s = V2D[0,1]
|
15
|
+
t = V2D[2,3]
|
16
|
+
assert_equal(V2D[2,4], s + t)
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_norm
|
20
|
-
assert_equal(
|
20
|
+
assert_equal(V2D[0,1], V2D[0,2].norm)
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_angle
|
24
|
-
assert_equal(0.0,
|
25
|
-
assert_equal(0.0,
|
26
|
-
assert_equal(Math::PI * 0.5,
|
27
|
-
assert_equal(-Math::PI * 0.5,
|
24
|
+
assert_equal(0.0, V2D[0,0].angle)
|
25
|
+
assert_equal(0.0, V2D[1,0].angle)
|
26
|
+
assert_equal(Math::PI * 0.5, V2D[0,1].angle)
|
27
|
+
assert_equal(-Math::PI * 0.5, V2D[0,-1].angle)
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_mean
|
31
|
-
assert_equal(
|
31
|
+
assert_equal(V2D[0,1], (V2D[0,0]..V2D[0,2]).middle)
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_length
|
35
|
-
assert_equal(1,
|
35
|
+
assert_equal(1,V2D[0,1].length)
|
36
36
|
end
|
37
37
|
|
38
38
|
def test_interpol
|
39
|
-
assert_equal(
|
39
|
+
assert_equal(V2D[0.2,1.4], (V2D[0.0, 1.0]..V2D[1.0, 3.0]).sample( 0.2 ))
|
40
40
|
end
|
41
41
|
|
42
42
|
def test_createwithpoints
|
43
43
|
|
44
|
-
assert_equal(
|
44
|
+
assert_equal(V2D[1,1], V2D[1,1] - V2D[0,0])
|
45
45
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def test_ortho
|
49
|
-
assert_equal(
|
50
|
-
|
49
|
+
assert_equal(V2D[-0.6,0.5],
|
50
|
+
V2D[0.5,0.6].ortho)
|
51
51
|
end
|
52
52
|
|
53
53
|
def test_reverse
|
54
|
-
assert_equal(
|
55
|
-
|
54
|
+
assert_equal(V2D[-0.6,-0.5],
|
55
|
+
V2D[0.6,0.5].reverse)
|
56
56
|
end
|
57
57
|
|
58
58
|
def test_viewbox
|
59
59
|
assert_equal( [1.0, 1.0, 2.0, 2.0],
|
60
|
-
|
60
|
+
V2D.viewbox( [V2D[1.0, 2.0], V2D[2.0, 1.0]] ))
|
61
61
|
end
|
62
62
|
|
63
63
|
def test_size
|
64
64
|
assert_equal( [1.0, 1.0],
|
65
|
-
|
65
|
+
V2D.size( [V2D[1.0, 2.0], V2D[2.0, 1.0]] ))
|
66
66
|
end
|
67
67
|
|
68
68
|
def test_operation_sequences
|
69
|
-
assert_equal(
|
70
|
-
|
69
|
+
assert_equal(V2D[0.0,1.0],
|
70
|
+
V2D[1.0,0.0].norm.ortho)
|
71
71
|
end
|
72
72
|
|
73
73
|
def test_inner_product
|
74
|
-
assert_equal( 1.0,
|
74
|
+
assert_equal( 1.0, V2D[1.0, 0.0].inner_product( V2D[1.0,1.0] ) )
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_vequal
|
78
|
+
assert( V2D.vequal?( V2D::O, V2D::X * 0.0 ) )
|
79
|
+
assert( V2D.vequal?( V2D::O, V2D::O + V2D::X * 0.01, 0.1 ) )
|
80
|
+
assert_equal( false, V2D.vequal?( V2D::O, V2D::O + V2D::X * 0.01, 0.001 ) )
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_pointer
|
84
|
+
v = V2D[1.0,2.0]
|
85
|
+
a = v
|
86
|
+
a.x = 3.0
|
87
|
+
assert_equal( 3.0, v.x )
|
75
88
|
end
|
76
89
|
end
|
data/test/test_shape.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'shape'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class ShapeTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_abstract
|
7
|
+
# Shape.new.svg
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
class LineTest < Test::Unit::TestCase
|
14
|
+
|
15
|
+
def test_point
|
16
|
+
line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0] ] ]
|
17
|
+
# puts Line.instance_methods(false)
|
18
|
+
assert_equal( V2D[0.0, 0.3], line.point( 0.3 ) )
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_tangent
|
22
|
+
line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 2.0] ] ]
|
23
|
+
assert_equal( V2D[0.0, 1.0], line.tangent( 0.3 ) )
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_frame
|
27
|
+
line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0] ] ]
|
28
|
+
result = Frame[ :center, V2D[0.0,0.5], :vector, V2D[0.0,0.0], :rotation, 0.0, :scale, 1.0 ]
|
29
|
+
assert_equal( result, line.frame( 0.5 ) )
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
def test_svg
|
34
|
+
line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0], V2D[ 0.0, 2.0] ] ]
|
35
|
+
assert_equal( '<path d="M 0.0 0.0 L 0.0 1.0L 0.0 2.0"/>', line.svg )
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_samples
|
39
|
+
[Line[].samples(3), [V2D[0.0,0.0], V2D[0.5,0.5], V2D[1.0,1.0]] ].forzip do |v1, v2|
|
40
|
+
assert( V2D.vequal?( v1, v2 ) )
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class CircleTest < Test::Unit::TestCase
|
46
|
+
|
47
|
+
def test_default
|
48
|
+
circle = Circle[]
|
49
|
+
assert_equal( '<circle cx="0.0" cy="0.0" r="1.0"/>', circle.svg )
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_svg
|
53
|
+
circle = Circle[ :center, V2D[ 0.0, 0.0 ], :radius, 1.0 ]
|
54
|
+
assert_equal( '<circle cx="0.0" cy="0.0" r="1.0"/>', circle.svg )
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_viewbox
|
58
|
+
circle = Circle[ :center, V2D[ 0.0, 0.0 ], :radius, 1.0 ]
|
59
|
+
assert_equal( [-1.0, -1.0, 1.0, 1.0], circle.viewbox )
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_samples
|
63
|
+
[Circle[].samples(3), [V2D[1.0,0.0], V2D[-1.0,0.0], V2D[1.0,0.0]] ].forzip do |v1, v2|
|
64
|
+
assert( V2D.vequal?( v1, v2 ) )
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/test/test_utils.rb
CHANGED
@@ -58,6 +58,17 @@ end
|
|
58
58
|
|
59
59
|
class ArrayTest < Test::Unit::TestCase
|
60
60
|
|
61
|
+
def test_samples
|
62
|
+
assert_equal( [0.0, 1.0, 0.5, 0.5, 1.0, 0.0], [(0.0..1.0), (1.0..0.0)].samples(3))
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_samples2
|
66
|
+
result = []
|
67
|
+
[(0.0..1.0), (1.0..0.0)].samples(3) {|v1,v2| result += [v1,v2] }
|
68
|
+
assert_equal( [0.0, 1.0, 0.5, 0.5, 1.0, 0.0], result )
|
69
|
+
end
|
70
|
+
|
71
|
+
|
61
72
|
def test_pairs
|
62
73
|
a = [ 1, 2, 3]
|
63
74
|
b = Array.new
|
@@ -81,6 +92,12 @@ class ArrayTest < Test::Unit::TestCase
|
|
81
92
|
assert_equal( [1, 2, 3], [0, 1, 2, 3].[](1..-1) )
|
82
93
|
end
|
83
94
|
|
95
|
+
def test_slice2
|
96
|
+
a = [0, 1, 2, 3]
|
97
|
+
assert_equal( [1, 2, 3], a[1..-1] )
|
98
|
+
end
|
99
|
+
|
100
|
+
|
84
101
|
def test_uplets
|
85
102
|
assert_equal( [[1, 2], [2, 3]], [1, 2, 3].uplets(2) )
|
86
103
|
result = []; [1, 2, 3].uplets {|i,j| result.push( [i,j] )}
|
@@ -170,6 +187,34 @@ class RangeTest < Test::Unit::TestCase
|
|
170
187
|
# assert_equal( [0.0, 0.5, 1.0], (0.0..1.0).bisamples([0.5, 0.5]) )
|
171
188
|
# assert_equal( [0.0, 0.4, 0.5, 0.9, 1.0], (0.0..1.0).bisamples([0.4, 0.1]) )
|
172
189
|
end
|
190
|
+
|
191
|
+
def test_ranges
|
192
|
+
# Samplable module
|
193
|
+
assert_equal( 1.5, (1.0..2.0).sample(0.5) )
|
194
|
+
assert_equal( [1.0, 1.5, 2.0], (1.0..2.0).samples( 3 ) )
|
195
|
+
assert_equal( 1.5, (1.0..2.0).mean )
|
196
|
+
assert_equal( 1.5, (1.0..2.0).middle )
|
197
|
+
assert( (1.0..2.0).rand >= 1.0 )
|
198
|
+
assert( (1.0..2.0).rand <= 2.0 )
|
199
|
+
assert_equal( 2, (1.0..2.0).rand( 2 ).length )
|
200
|
+
assert_equal( 1.8, (1.0..2.0).complement(1.2) )
|
201
|
+
assert_equal( 0.5, (1.0..2.0).abscissa(1.5) )
|
202
|
+
|
203
|
+
# Splittable module
|
204
|
+
assert_equal( (1.2..1.3), (1.0..2.0).split(0.2,0.3) )
|
205
|
+
assert_equal( [(1.0..1.5),(1.5..2.0)], (1.0..2.0).splits( 2 ) )
|
206
|
+
end
|
207
|
+
|
208
|
+
def test_ranges2
|
209
|
+
assert_equal( (0.0..1.0), Range.O )
|
210
|
+
assert_equal( (0.0..2.0*Math::PI), Range.Angle )
|
211
|
+
assert_equal( (2.0..1.0), (1.0..2.0).reverse )
|
212
|
+
assert_equal( (0.0..2.0), (1.0..2.0).sym )
|
213
|
+
assert_equal( (1.0..3.0), (1.0..2.0).symend )
|
214
|
+
assert_equal( 1.0, (1.0..2.0).size )
|
215
|
+
assert_equal( (1.3..2.3), (1.0..2.0).translate(0.3) )
|
216
|
+
end
|
217
|
+
|
173
218
|
end
|
174
219
|
|
175
220
|
class SampleClass
|
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.
|
7
|
-
date: 2008-02-
|
6
|
+
version: 0.0.2
|
7
|
+
date: 2008-02-10 00:00:00 +01:00
|
8
8
|
summary: Ruby vector graphics library
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -29,18 +29,12 @@ post_install_message:
|
|
29
29
|
authors:
|
30
30
|
- "Julien L\xE9onard"
|
31
31
|
files:
|
32
|
-
-
|
33
|
-
-
|
34
|
-
- ./examples/hellocrown2.rb
|
35
|
-
- ./examples/hellocrownrecurse.rb
|
36
|
-
- ./examples/helloworld.rb
|
37
|
-
- ./examples/helloworldcompact.rb
|
38
|
-
- ./examples/helloworldexpanded.rb
|
39
|
-
- ./examples/palette_circle.rb
|
40
|
-
- ./examples/sample.rb
|
41
|
-
- ./examples/uplets.rb
|
32
|
+
- Rakefile
|
33
|
+
- LICENCE
|
42
34
|
- lib/assertion.rb
|
43
35
|
- lib/attributable.rb
|
36
|
+
- lib/bezier.rb
|
37
|
+
- lib/bezierspline.rb
|
44
38
|
- lib/color.rb
|
45
39
|
- lib/frame.rb
|
46
40
|
- lib/geometry2D.rb
|
@@ -52,15 +46,34 @@ files:
|
|
52
46
|
- lib/trace.rb
|
53
47
|
- lib/utils.rb
|
54
48
|
- lib/xrvg.rb
|
55
|
-
-
|
56
|
-
-
|
49
|
+
- examples/bezierbasic.rb
|
50
|
+
- examples/bezierbasicvector.rb
|
51
|
+
- examples/foreach.rb
|
52
|
+
- examples/geodash.rb
|
53
|
+
- examples/geodash2.rb
|
54
|
+
- examples/hellocrown.rb
|
55
|
+
- examples/hellocrown2.rb
|
56
|
+
- examples/hellocrownrecurse.rb
|
57
|
+
- examples/helloworldcompact.rb
|
58
|
+
- examples/helloworldexpanded.rb
|
59
|
+
- examples/multibezierbasic.rb
|
60
|
+
- examples/palette_circle.rb
|
61
|
+
- examples/randomdash.rb
|
62
|
+
- examples/range_examples.rb
|
63
|
+
- examples/range_examples2.rb
|
64
|
+
- examples/sample.rb
|
65
|
+
- examples/simpledash.rb
|
66
|
+
- examples/uplets.rb
|
57
67
|
- README
|
68
|
+
- CHANGES
|
58
69
|
test_files:
|
59
70
|
- test/test_attributable.rb
|
71
|
+
- test/test_bezier.rb
|
60
72
|
- test/test_color.rb
|
61
73
|
- test/test_frame.rb
|
62
74
|
- test/test_geometry2D.rb
|
63
75
|
- test/test_render.rb
|
76
|
+
- test/test_shape.rb
|
64
77
|
- test/test_style.rb
|
65
78
|
- test/test_utils.rb
|
66
79
|
rdoc_options:
|
@@ -70,6 +83,7 @@ rdoc_options:
|
|
70
83
|
- README
|
71
84
|
extra_rdoc_files:
|
72
85
|
- README
|
86
|
+
- CHANGES
|
73
87
|
executables: []
|
74
88
|
|
75
89
|
extensions: []
|