xrvg 0.0.3 → 0.0.4
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.
- data/CHANGES +21 -0
- data/README +3 -3
- data/Rakefile +4 -4
- data/examples/bezierbasic.rb +1 -0
- data/examples/bezierbasicvector.rb +1 -0
- data/examples/foreach.rb +1 -0
- data/examples/geodash.rb +1 -0
- data/examples/geodash2.rb +1 -0
- data/examples/hellocrown.rb +1 -0
- data/examples/hellocrown2.rb +1 -0
- data/examples/hellocrownrecurse.rb +1 -0
- data/examples/helloworldcompact.rb +1 -0
- data/examples/helloworldexpanded.rb +1 -0
- data/examples/multibezierbasic.rb +1 -0
- data/examples/palette_circle.rb +1 -0
- data/examples/randomdash.rb +1 -0
- data/examples/range_examples.rb +1 -0
- data/examples/range_examples2.rb +1 -0
- data/examples/sample.rb +1 -0
- data/examples/simpledash.rb +1 -0
- data/examples/uplets.rb +1 -0
- data/lib/bezier.rb +21 -55
- data/lib/bezierbuilders.rb +194 -0
- data/lib/beziermotifs.rb +114 -0
- data/lib/bezierspline.rb +20 -75
- data/lib/beziertools.rb +211 -0
- data/lib/color.rb +26 -7
- data/lib/fitting.rb +203 -0
- data/lib/frame.rb +2 -1
- data/lib/geometry2D.rb +6 -5
- data/lib/interbezier.rb +87 -0
- data/lib/interpolation.rb +6 -5
- data/lib/parametriclength.rb +87 -0
- data/lib/render.rb +4 -9
- data/lib/samplation.rb +71 -82
- data/lib/shape.rb +47 -25
- data/lib/style.rb +2 -1
- data/lib/trace.rb +2 -0
- data/lib/utils.rb +111 -17
- data/lib/xrvg.rb +16 -6
- data/test/test_attributable.rb +34 -2
- data/test/test_bezier.rb +93 -2
- data/test/test_bezierbuilders.rb +92 -0
- data/test/test_beziertools.rb +97 -0
- data/test/test_color.rb +65 -24
- data/test/test_fitting.rb +47 -0
- data/test/test_frame.rb +7 -2
- data/test/test_geometry2D.rb +26 -7
- data/test/test_interbezier.rb +29 -0
- data/test/test_interpolation.rb +16 -1
- data/test/test_parametric_length.rb +15 -0
- data/test/test_render.rb +54 -6
- data/test/test_shape.rb +103 -10
- data/test/test_trace.rb +13 -0
- data/test/test_utils.rb +114 -12
- data/test/test_xrvg.rb +3 -0
- metadata +16 -5
- data/lib/assertion.rb +0 -14
- data/lib/attributable.rb +0 -152
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'bezierbuilders'
|
3
|
+
|
4
|
+
|
5
|
+
class BezierBuilderTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_abstract
|
8
|
+
assert_raise(NotImplementedError){BezierBuilder.new.compute}
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_lissage
|
12
|
+
bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X], [:vector, V2D::X, V2D::X, V2D::X * 2.0, V2D::X]] )
|
13
|
+
assert_equal( bezier.pointlist, BezierBuilder.lissage( bezier, 0.0 ).pointlist )
|
14
|
+
assert_equal( [V2D::O, V2D::X, V2D::X, V2D::O, V2D::X, V2D::O, V2D::X * 2.0, V2D::X], BezierBuilder.lissage( bezier, 1.0 ).pointlist(:vector) )
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
class SimilarMotifIteratorTest < Test::Unit::TestCase
|
20
|
+
|
21
|
+
def test_all
|
22
|
+
bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X]] )
|
23
|
+
simibezier = SimilarMotifIterator[ :curvesampler, bezier, :motif, bezier, :nmotifs, 2 ]
|
24
|
+
assert( V2D.vequal?( bezier.firstpoint, simibezier.firstpoint ))
|
25
|
+
assert( V2D.vequal?(bezier.lastpoint, simibezier.lastpoint ))
|
26
|
+
assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.bezier(0).lastpoint ))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class AttributeMotifIteratorTest < Test::Unit::TestCase
|
31
|
+
|
32
|
+
def test_all
|
33
|
+
require 'beziermotifs'
|
34
|
+
bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X]] )
|
35
|
+
simibezier = AttributeMotifIterator[ :curvesampler, bezier, :motifclass, LinearBezier, :nmotifs, 2, :closed, false ]
|
36
|
+
assert( V2D.vequal?( bezier.firstpoint, simibezier.firstpoint ))
|
37
|
+
assert( V2D.vequal?(bezier.lastpoint, simibezier.lastpoint ))
|
38
|
+
assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.bezier(0).lastpoint ))
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_all2
|
42
|
+
require 'beziermotifs'
|
43
|
+
bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X]] )
|
44
|
+
simibezier = AttributeMotifIterator[ :curvesampler, bezier, :motifclass, LinearBezier, :nmotifs, 2, :closed, true ]
|
45
|
+
assert( V2D.vequal?( bezier.firstpoint, simibezier.firstpoint ))
|
46
|
+
assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.lastpoint ))
|
47
|
+
assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.bezier(0).lastpoint ))
|
48
|
+
assert_equal( 4, simibezier.piecenumber )
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_all3
|
52
|
+
require 'beziermotifs'
|
53
|
+
bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X]] )
|
54
|
+
simibezier = AttributeMotifIterator[ :curvesampler, bezier, :motifclass, PicBezier, :attributes, [:height, (0.0..1.0)], :nmotifs, 2, :closed, true ]
|
55
|
+
assert( V2D.vequal?( bezier.firstpoint, simibezier.firstpoint ))
|
56
|
+
assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.lastpoint ))
|
57
|
+
assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.bezier(1).lastpoint ))
|
58
|
+
assert_equal( 6, simibezier.piecenumber )
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_all4
|
62
|
+
require 'beziermotifs'
|
63
|
+
bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X]] )
|
64
|
+
simibezier = AttributeMotifIterator[ :curvesampler, bezier, :motifclass, ArcBezier, :attributes, [:height, 1.0], :nmotifs, 2, :closed, true ]
|
65
|
+
assert( V2D.vequal?( bezier.firstpoint, simibezier.firstpoint ))
|
66
|
+
assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.lastpoint ))
|
67
|
+
assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.bezier(2).firstpoint ))
|
68
|
+
assert_equal( 4, simibezier.piecenumber )
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_complete
|
72
|
+
assert_equal( V2D::O, LinearBezier.buildwithangle( 0.0 ).firstpoint )
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
class FitBezierBuilderTest < Test::Unit::TestCase
|
78
|
+
|
79
|
+
def test_all
|
80
|
+
bezier = Bezier.raw( V2D[0.0, 0.0], V2D[100.0, 0.0], V2D[0.0, 100.0], V2D[100.0, 100.0] )
|
81
|
+
points = bezier.samples( 15 )
|
82
|
+
fit = FitBezierBuilder[ :points, points, :maxerror, 0.001 ]
|
83
|
+
assert_equal( 3, fit.piecenumber )
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
class CircleTest < Test::Unit::TestCase
|
88
|
+
|
89
|
+
def test_bezier
|
90
|
+
assert_equal( 2, Circle[].bezier.piecenumber )
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'beziertools'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class SimpleBezierTest < Test::Unit::TestCase
|
5
|
+
def test_all
|
6
|
+
bezier = SimpleBezier[ :support, [V2D::O,V2D::X, V2D::X+V2D::Y] ]
|
7
|
+
assert_equal( V2D::O, bezier.firstpoint )
|
8
|
+
assert_equal( 2, bezier.piecenumber )
|
9
|
+
assert_raise(RuntimeError){SimpleBezier[ :support, [V2D::O] ]}
|
10
|
+
assert_equal( SimpleBezier[ :support, [V2D::O,V2D::X] ].point( 0.3 ), LinearBezier[ :support, [V2D::O,V2D::X] ].point( 0.3 ) )
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class ClosureTest < Test::Unit::TestCase
|
15
|
+
|
16
|
+
def test_all
|
17
|
+
bezier = SimpleBezier[ :support, [V2D::O, V2D::X, V2D::X+V2D::Y] ]
|
18
|
+
closure = ClosureBezier[ :bezierlist, [bezier, LinearBezier[ :support, [V2D::X, -V2D::X] ]]]
|
19
|
+
assert_equal( V2D::O, closure.lastpoint )
|
20
|
+
assert_equal( 5, closure.piecenumber )
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
class OffestTest < Test::Unit::TestCase
|
26
|
+
|
27
|
+
def test_all
|
28
|
+
bezier = LinearBezier.buildwithangle( 0.0 )
|
29
|
+
offset = Offset[ :support, bezier, :ampl, 1.0, :nsamples, 10 ]
|
30
|
+
assert( V2D.vequal?( V2D::O + V2D::Y, offset.firstpoint ) )
|
31
|
+
assert( V2D.vequal?( V2D::O + V2D::X + V2D::Y, offset.lastpoint ) )
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_roller
|
35
|
+
bezier = LinearBezier.buildwithangle( 0.0 )
|
36
|
+
offset = Offset[ :support, bezier, :ampl, (0.0..1.0).samples(10), :nsamples, 10 ]
|
37
|
+
assert( V2D.vequal?( V2D::O, offset.firstpoint ) )
|
38
|
+
assert( V2D.vequal?( V2D::O + V2D::X + V2D::Y, offset.lastpoint ) )
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_sampler
|
42
|
+
bezier = LinearBezier.buildwithangle( 0.0 )
|
43
|
+
offset = Offset[ :support, bezier, :ampl, (0.0..1.0), :nsamples, 10 ]
|
44
|
+
assert( V2D.vequal?( V2D::O, offset.firstpoint ) )
|
45
|
+
assert( V2D.vequal?( V2D::O + V2D::X + V2D::Y, offset.lastpoint ) )
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
class FuseauTest < Test::Unit::TestCase
|
51
|
+
|
52
|
+
def test_all
|
53
|
+
bezier = LinearBezier.buildwithangle( 0.0 )
|
54
|
+
offset = Fuseau[ :support, bezier, :maxwidth, 1.0, :nsamples, 10 ]
|
55
|
+
assert( V2D.vequal?( V2D::O + V2D::X, offset.lastpoint ) )
|
56
|
+
assert( V2D.vequal?( V2D::O + V2D::Y, offset.firstpoint ) )
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
class BezierLevelTest < Test::Unit::TestCase
|
62
|
+
|
63
|
+
def test_all
|
64
|
+
offset = BezierLevel[ :samplelist, [0.0,0.0, 1.0,1.0]]
|
65
|
+
assert( V2D.vequal?( V2D::O, offset.firstpoint ) )
|
66
|
+
assert( V2D.vequal?( V2D::O + V2D::Y + V2D::X, offset.lastpoint ) )
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
class OndulationTest < Test::Unit::TestCase
|
72
|
+
|
73
|
+
def test_all
|
74
|
+
bezier = LinearBezier.buildwithangle( 0.0 )
|
75
|
+
ondulation = Ondulation[ :support, bezier, :ampl, 1.0, :freq, 2 ]
|
76
|
+
assert( V2D.vequal?( V2D::O, ondulation.firstpoint ) )
|
77
|
+
assert_equal( 4, ondulation.piecenumber )
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_roller
|
81
|
+
bezier = LinearBezier.buildwithangle( 0.0 )
|
82
|
+
ondulation = Ondulation[ :support, bezier, :ampl, (0.0..1.0).samples(2), :freq, 2 ]
|
83
|
+
assert( V2D.vequal?( V2D::O, ondulation.firstpoint ) )
|
84
|
+
assert_equal( 4, ondulation.piecenumber )
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_sampler
|
88
|
+
bezier = LinearBezier.buildwithangle( 0.0 )
|
89
|
+
ondulation = Ondulation[ :support, bezier, :ampl, (0.0..1.0), :freq, 2 ]
|
90
|
+
assert( V2D.vequal?( V2D::O, ondulation.firstpoint ) )
|
91
|
+
assert_equal( 4, ondulation.piecenumber )
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
|
data/test/test_color.rb
CHANGED
@@ -13,10 +13,20 @@ class ColorTest < Test::Unit::TestCase
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_colors
|
16
|
-
black
|
17
|
-
white
|
16
|
+
black = Color[0.0, 0.0, 0.0, 1.0]
|
17
|
+
white = Color[1.0, 1.0, 1.0, 1.0]
|
18
|
+
blue = Color[0.0, 0.0, 1.0, 1.0]
|
19
|
+
red = Color[1.0, 0.0, 0.0, 1.0]
|
20
|
+
green = Color[0.0, 1.0, 0.0, 1.0]
|
21
|
+
yellow = Color[1.0, 1.0, 0.0, 1.0]
|
22
|
+
orange = Color[1.0, 0.5, 0.0, 1.0]
|
18
23
|
assert_equal( black, Color.black )
|
19
24
|
assert_equal( white, Color.white )
|
25
|
+
assert_equal( red, Color.red )
|
26
|
+
assert_equal( blue, Color.blue )
|
27
|
+
assert_equal( green, Color.green )
|
28
|
+
assert_equal( yellow, Color.yellow )
|
29
|
+
assert_equal( orange, Color.orange )
|
20
30
|
end
|
21
31
|
|
22
32
|
def test_svg
|
@@ -30,6 +40,43 @@ class ColorTest < Test::Unit::TestCase
|
|
30
40
|
assert_equal( black, Color.hsv( 0.0, 0.0, 0.0, 1.0 ) )
|
31
41
|
assert_equal( white, Color.hsv( 0.0, 0.0, 1.0, 1.0 ) )
|
32
42
|
assert_equal( red, Color.hsv( 0.0, 1.0, 1.0, 1.0 ) )
|
43
|
+
assert_equal( black, Color.hsv( 0.2, 1.0, 0.0, 1.0 ) )
|
44
|
+
assert_equal( black, Color.hsv( 0.4, 1.0, 0.0, 1.0 ) )
|
45
|
+
assert_equal( black, Color.hsv( 0.6, 1.0, 0.0, 1.0 ) )
|
46
|
+
assert_equal( black, Color.hsv( 0.8, 1.0, 0.0, 1.0 ) )
|
47
|
+
assert_equal( black, Color.hsv( 1.0, 1.0, 0.0, 1.0 ) )
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_hsl
|
51
|
+
black = Color[0.0, 0.0, 0.0, 1.0]
|
52
|
+
white = Color[1.0, 1.0, 1.0, 1.0]
|
53
|
+
red = Color[1.0, 0.0, 0.0, 1.0]
|
54
|
+
assert_equal( black, Color.hsl( 0.0, 0.0, 0.0, 1.0 ) )
|
55
|
+
assert_equal( white, Color.hsl( 0.0, 0.0, 1.0, 1.0 ) )
|
56
|
+
assert_equal( white, Color.hsl( 0.0, 1.0, 1.0, 1.0 ) )
|
57
|
+
assert_equal( white, Color.hsl( 2.0, 1.0, 1.0, 1.0 ) )
|
58
|
+
assert_equal( white, Color.hsl( 0.6, 1.0, 1.0, 1.0 ) )
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
def test_accessors
|
63
|
+
black = Color[0.0, 0.0, 0.0, 1.0]
|
64
|
+
assert_equal( 0.0, black.r )
|
65
|
+
assert_equal( 0.0, black.g )
|
66
|
+
assert_equal( 0.0, black.b )
|
67
|
+
assert_equal( 1.0, black.a )
|
68
|
+
black.r = 1.0
|
69
|
+
assert_equal( 1.0, black.r )
|
70
|
+
black.g = 1.0
|
71
|
+
assert_equal( 1.0, black.g )
|
72
|
+
black.b = 1.0
|
73
|
+
assert_equal( 1.0, black.b )
|
74
|
+
black.a = 0.0
|
75
|
+
assert_equal( 0.0, black.a )
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_format255
|
79
|
+
assert_equal( [255,255,255,255], Color.white.format255 )
|
33
80
|
end
|
34
81
|
|
35
82
|
end
|
@@ -40,40 +87,34 @@ class PaletteTest < Test::Unit::TestCase
|
|
40
87
|
def test_palette
|
41
88
|
palette = Palette.new( :colorlist, [ 0.0, Color.black, 1.0, Color.white ] )
|
42
89
|
assert_equal( Color[0.5, 0.5, 0.5, 1.0], palette.color( 0.5 ) )
|
90
|
+
assert_equal( Color[0.5, 0.5, 0.5, 1.0], palette.sample( 0.5 ) )
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_reverse
|
94
|
+
palette = Palette.new( :colorlist, [ 0.0, Color.black, 0.3, Color.red, 1.0, Color.white ] ).reverse
|
95
|
+
assert_equal( Color.red, palette.color( 0.7 ) )
|
43
96
|
end
|
97
|
+
|
44
98
|
end
|
45
99
|
|
46
100
|
class GradientTest < Test::Unit::TestCase
|
47
101
|
|
48
102
|
def test_gradient
|
103
|
+
assert_raise(NotImplementedError) {Gradient[ :colorlist, [0.0, Color.black, 1.0, Color.white]].defsvg}
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_lineargradient
|
49
107
|
gradient = LinearGradient.new( :colorlist, [0.0, Color.black, 1.0, Color.white] )
|
50
108
|
assert_equal( gradient.svgdef,
|
51
109
|
"<linearGradient id=\"%ID%\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n<stop offset=\"0.0\" stop-color=\"rgb(0,0,0)\" stop-opacity=\"1.0\"/>\n<stop offset=\"1.0\" stop-color=\"rgb(255,255,255)\" stop-opacity=\"1.0\"/>\n</linearGradient>")
|
52
110
|
|
53
111
|
end
|
54
112
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
render.add( Circle.new, Style.new( :stroke, "none", :fill, LinearGradient.new( :colorlist, [0.0, Color.black, 1.0, Color.white] ) ) )
|
61
|
-
render.end
|
62
|
-
assert( File.exist?( "gradient1.png" ) )
|
63
|
-
end
|
64
|
-
end
|
113
|
+
def test_circulargradient
|
114
|
+
circle = Circle.new
|
115
|
+
gradient = CircularGradient.new( :colorlist, [0.0, Color.black(1.0), 1.0, Color.black(0.0)], :circle, circle )
|
116
|
+
assert_equal( gradient.svgdef,
|
117
|
+
"<radialGradient id=\"%ID%\" gradientUnits=\"userSpaceOnUse\" cx=\"0.0\" cy=\"0.0\" r=\"1.0\">\n<stop offset=\"0.0\" stop-color=\"rgb(0,0,0)\" stop-opacity=\"1.0\"/>\n<stop offset=\"1.0\" stop-color=\"rgb(0,0,0)\" stop-opacity=\"0.0\"/>\n</radialGradient>")
|
65
118
|
|
66
|
-
if nil
|
67
|
-
def test_gradient2
|
68
|
-
require 'render'
|
69
|
-
require 'shape'
|
70
|
-
render = SVGRender.new( :filename, "gradient2.svg" )
|
71
|
-
circle = Circle.new
|
72
|
-
style = Style.new( :stroke, "none", :fill, CircularGradient.new( :colorlist, [0.0, Color.black(1.0), 1.0, Color.black(0.0)], :circle, circle ) )
|
73
|
-
render.add( circle, style )
|
74
|
-
render.end
|
75
|
-
assert( File.exist?( "gradient2.png" ) )
|
76
119
|
end
|
77
|
-
end
|
78
|
-
|
79
120
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'fitting'
|
3
|
+
|
4
|
+
class FittingTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_base
|
7
|
+
bezier = Bezier.raw( V2D[0.0, 0.0], V2D[100.0, 0.0], V2D[0.0, 100.0], V2D[100.0, 100.0] )
|
8
|
+
points = bezier.samples( 30 )
|
9
|
+
fit = Fitting.compute( points, 0.000001, 500 )
|
10
|
+
assert( V2D.vequal?( bezier.pointlist[1], fit.pointlist[1], 0.01) )
|
11
|
+
assert( V2D.vequal?( bezier.pointlist[2], fit.pointlist[2], 0.01) )
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_base2
|
15
|
+
bezier = Bezier.raw( V2D[0.0, 0.0], V2D[100.0, 0.0], V2D[0.0, 100.0], V2D[100.0, 100.0] )
|
16
|
+
points = bezier.samples( 15 )
|
17
|
+
fit, error = Fitting.adaptative_compute( points, 0.01 )
|
18
|
+
assert_equal( 1, fit.piecenumber )
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_base3
|
22
|
+
bezier = Bezier.raw( V2D[0.0, 0.0], V2D[100.0, 0.0], V2D[0.0, 100.0], V2D[100.0, 100.0] )
|
23
|
+
points = bezier.samples( 15 )
|
24
|
+
fit, error = Fitting.adaptative_compute( points, 0.001 )
|
25
|
+
assert_equal( 3, fit.piecenumber )
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def test_limit
|
30
|
+
points = [V2D[0.0, 0.0]] * 10
|
31
|
+
fit, error = Fitting.adaptative_compute( points, 0.01 )
|
32
|
+
assert_equal( 1, fit.piecenumber )
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def test_limit2
|
37
|
+
bezier = Bezier.raw( V2D[0.0, 0.0], V2D[100.0, 0.0], V2D[0.0, 100.0], V2D[100.0, 100.0] )
|
38
|
+
points = bezier.samples( 30 )
|
39
|
+
points = [points[0]] + points
|
40
|
+
fit = Fitting.compute( points, 0.000001, 500 )
|
41
|
+
assert( V2D.vequal?( bezier.pointlist[1], fit.pointlist[1], 0.01) )
|
42
|
+
assert( V2D.vequal?( bezier.pointlist[2], fit.pointlist[2], 0.01) )
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
end
|
data/test/test_frame.rb
CHANGED
@@ -5,8 +5,13 @@ require 'geometry2D'
|
|
5
5
|
class FrameTest < Test::Unit::TestCase
|
6
6
|
|
7
7
|
def test_frame1
|
8
|
-
|
9
|
-
|
8
|
+
frame1 = Frame[ :center, V2D[0.0,0.0], :vector, V2D[1.0,0.0], :rotation, 0.0, :scale, 1.0 ]
|
9
|
+
frame2 = Frame[ :center, V2D[0.0,0.0], :vector, V2D[1.0,0.0], :rotation, 0.0, :scale, 1.0 ]
|
10
|
+
frame3 = Frame[ :center, V2D[0.0,0.0], :vector, V2D[1.0,0.0], :rotation, 1.0, :scale, 1.0 ]
|
11
|
+
|
12
|
+
assert_equal( 0.0, frame1.center.x )
|
13
|
+
assert( frame1 == frame2 )
|
14
|
+
assert( !(frame1 == frame3) )
|
10
15
|
end
|
11
16
|
|
12
17
|
end
|
data/test/test_geometry2D.rb
CHANGED
@@ -15,11 +15,7 @@ class V2DTest < Test::Unit::TestCase
|
|
15
15
|
t = V2D[2,3]
|
16
16
|
assert_equal(V2D[2,4], s + t)
|
17
17
|
end
|
18
|
-
|
19
|
-
def test_norm
|
20
|
-
assert_equal(V2D[0,1], V2D[0,2].norm)
|
21
|
-
end
|
22
|
-
|
18
|
+
|
23
19
|
def test_angle
|
24
20
|
assert_equal(0.0, V2D[0,0].angle)
|
25
21
|
assert_equal(0.0, V2D[1,0].angle)
|
@@ -61,8 +57,8 @@ class V2DTest < Test::Unit::TestCase
|
|
61
57
|
end
|
62
58
|
|
63
59
|
def test_viewbox
|
64
|
-
assert_equal( [1.0, 1.0, 2.0, 2.0],
|
65
|
-
|
60
|
+
assert_equal( [1.0, 1.0, 2.0, 2.0], V2D.viewbox( [V2D[1.0, 2.0], V2D[2.0, 1.0]] ))
|
61
|
+
assert_equal( [0.0, 0.0, 0.0, 0.0], V2D.viewbox( [] ))
|
66
62
|
end
|
67
63
|
|
68
64
|
def test_size
|
@@ -91,4 +87,27 @@ class V2DTest < Test::Unit::TestCase
|
|
91
87
|
a.x = 3.0
|
92
88
|
assert_equal( 3.0, v.x )
|
93
89
|
end
|
90
|
+
|
91
|
+
def test_succ
|
92
|
+
assert_equal( V2D[1.0,1.0], V2D[].succ )
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_scale
|
96
|
+
assert_equal( V2D[2.0,6.0], V2D[1.0,2.0].scale( V2D[2.0,3.0]) )
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_sym
|
100
|
+
assert_equal( V2D[2.0,4.0], V2D[1.0,2.0].sym( V2D[0.0,0.0] ) )
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_coords
|
104
|
+
assert_equal( [0.0,1.0], V2D[0.0,1.0].coords )
|
105
|
+
assert_equal( [1.0,Math::PI/2.0], V2D[0.0,1.0].coords(:polar) )
|
106
|
+
assert_raise(RuntimeError) {V2D[0.0,1.0].coords(:toto)}
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_polar
|
110
|
+
assert( V2D.vequal?( V2D[0.0,1.0], V2D.polar( 1.0, Math::PI/2.0 ) ) )
|
111
|
+
end
|
112
|
+
|
94
113
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'interbezier.rb'
|
3
|
+
|
4
|
+
# Test class
|
5
|
+
class InterBezierTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_base
|
8
|
+
bezier1 = Bezier.raw( V2D::O, V2D::X, V2D::O, V2D::X )
|
9
|
+
center = V2D::O + V2D::Y
|
10
|
+
bezier2 = Bezier.raw( center, center, center, center )
|
11
|
+
interbezier = InterBezier.new( :bezierlist, [0.0, bezier1, 1.0, bezier2] )
|
12
|
+
v = V2D::Y * 0.5
|
13
|
+
assert_equal( [V2D::O + v, V2D::X * 0.5 + v, V2D::O + v, V2D::X * 0.5 + v], interbezier.sample( 0.5 ).pointlist )
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
# Test class
|
19
|
+
class GradientBezierTest < Test::Unit::TestCase
|
20
|
+
|
21
|
+
def test_base
|
22
|
+
bezier1 = Bezier.raw( V2D::O, V2D::X, V2D::O, V2D::X )
|
23
|
+
center = V2D::O + V2D::Y
|
24
|
+
bezier2 = Bezier.raw( center, center, center, center )
|
25
|
+
interbezier = GradientBezier.new( :bezierlist, [0.0, bezier1, 1.0, bezier2] )
|
26
|
+
v = V2D::Y * 0.5
|
27
|
+
assert_equal( [V2D::O + v, V2D::X * 0.5 + v, V2D::O + v, V2D::X * 0.5 + v], interbezier.samples( 10 )[5].bezier(0).pointlist )
|
28
|
+
end
|
29
|
+
end
|