xrvg 0.0.6 → 0.0.7
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 +12 -1
- data/Rakefile +30 -8
- data/lib/samplation.rb +10 -2
- data/lib/trace.rb +1 -0
- data/lib/utils.rb +24 -1
- data/test/test_color.rb +19 -13
- data/test/test_utils.rb +10 -0
- metadata +2 -17
- data/lib/bezier.rb +0 -536
- data/lib/bezierbuilders.rb +0 -210
- data/lib/beziermotifs.rb +0 -121
- data/lib/bezierspline.rb +0 -235
- data/lib/beziertools.rb +0 -245
- data/lib/color.rb +0 -401
- data/lib/fitting.rb +0 -203
- data/lib/frame.rb +0 -33
- data/lib/geovariety.rb +0 -128
- data/lib/interbezier.rb +0 -87
- data/lib/render.rb +0 -266
- data/lib/shape.rb +0 -421
- data/lib/spiral.rb +0 -72
- data/lib/style.rb +0 -76
- data/lib/xrvg.rb +0 -46
data/CHANGES
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
= CHANGES
|
2
2
|
|
3
|
+
== 0.0.8 (2008.08.26) (Future)
|
4
|
+
- INCOMPATIBLE modifs:
|
5
|
+
- Array is no longer SAMPLABLE => you must remplace "[].geo(5.0).samples" by "SyncS[].geo( 5.0 )"
|
6
|
+
this has been done to avoid conflicts between Array and Samplation interface, namely .rand method,
|
7
|
+
but also to clean semantic of the operation
|
8
|
+
and to be able to upgrade SyncS operations (with .split operator,...)
|
9
|
+
== 0.0.7 (2008.08.24) (New)
|
10
|
+
=== Content
|
11
|
+
- Add color services (hsv, hsl, ...)
|
12
|
+
- Add intersection services (Beta for the moment, must be consolidated)
|
13
|
+
- .random has again its "notsorted" behavior: if you want random to sort its results, you can use .random(:sort, true)
|
14
|
+
|
3
15
|
== 0.0.6 (2008.03.24)
|
4
16
|
=== Content
|
5
17
|
- Add Spiral classes
|
@@ -7,7 +19,6 @@
|
|
7
19
|
- refactor Ondulation bezier builder
|
8
20
|
- WARNING: random() filter now always sort its result => Shuffle filter is created. Moreover, .rand method is now only on Random, and not in Samplable interface (due to overloading Array method when using sort_by {rand, which is no good)
|
9
21
|
|
10
|
-
|
11
22
|
== 0.0.5 (2008.03.22)
|
12
23
|
=== Content
|
13
24
|
- Add GeoVariety classes
|
data/Rakefile
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# To publish project:
|
2
|
+
# - without doc: prepare-release
|
3
|
+
# - with doc : publish
|
4
|
+
# It is better to do first operation alone, to check if everything is OK, then to do publish
|
5
|
+
|
1
6
|
# Rakefile
|
2
7
|
require "rake/testtask"
|
3
8
|
require "rake/clean"
|
@@ -63,7 +68,7 @@ RDOC_FILES = FileList["README", "CHANGES"]
|
|
63
68
|
|
64
69
|
# Ruby library code.
|
65
70
|
LIB_DIR = "lib"
|
66
|
-
PRE_LIB_FILES = FileList["trace.rb", "samplation.rb", "interpolation.rb", "parametriclength.rb", "utils.rb", "geometry2D.rb", "color.rb", "frame.rb", "shape.rb", "render.rb", "shape.rb", "style.rb", "bezier.rb", "bezierspline.rb", "fitting.rb", "bezierbuilders.rb", "beziermotifs.rb", "beziertools.rb", "interbezier.rb", "geovariety.rb", "spiral.rb", "xrvg.rb"]
|
71
|
+
PRE_LIB_FILES = FileList["trace.rb", "samplation.rb", "interpolation.rb", "parametriclength.rb", "utils.rb", "geometry2D.rb", "intersection.rb", "color.rb", "frame.rb", "shape.rb", "render.rb", "shape.rb", "style.rb", "bezier.rb", "bezierspline.rb", "fitting.rb", "bezierbuilders.rb", "beziermotifs.rb", "beziertools.rb", "interbezier.rb", "geovariety.rb", "spiral.rb", "xrvg.rb"]
|
67
72
|
LIB_FILES = FileList["#{LIB_DIR}/*.rb"]
|
68
73
|
|
69
74
|
# Example code.
|
@@ -204,8 +209,8 @@ end
|
|
204
209
|
desc "Regenerate website"
|
205
210
|
task "gen-website" do
|
206
211
|
Rake::Task["clobber"].invoke
|
207
|
-
|
208
|
-
|
212
|
+
Rake::Task["muse"].invoke
|
213
|
+
Rake::Task["examples"].invoke
|
209
214
|
Rake::Task["rdoc"].invoke
|
210
215
|
Rake::Task["finish"].invoke
|
211
216
|
end
|
@@ -217,7 +222,7 @@ task "publish-website" do
|
|
217
222
|
# sh "scp -r #{WEBSITE_DIR}/* " +
|
218
223
|
# "#{RUBYFORGE_USER}@rubyforge.org:#{rubyforge_path}",
|
219
224
|
# :verbose => true
|
220
|
-
|
225
|
+
Rake::Task["gen-website"].invoke
|
221
226
|
Rake::Task["upload-website"].invoke
|
222
227
|
end
|
223
228
|
|
@@ -306,6 +311,9 @@ desc "Copy example source files to create ./examples directory"
|
|
306
311
|
task "examples" => ["muse"] do
|
307
312
|
remove_dir EXAMPLE_DIR
|
308
313
|
mkdir EXAMPLE_DIR
|
314
|
+
if File.exist?("#{WEBSITE_DIR}/images")
|
315
|
+
remove_dir "#{WEBSITE_DIR}/images"
|
316
|
+
end
|
309
317
|
mkdir "#{WEBSITE_DIR}/images"
|
310
318
|
require 'www/example_list'
|
311
319
|
example_list.each do |fn|
|
@@ -316,10 +324,24 @@ task "examples" => ["muse"] do
|
|
316
324
|
png = String.new(fn)
|
317
325
|
png["\.rb"] = ".png"
|
318
326
|
cp( fn, EXAMPLE_DIR )
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
327
|
+
|
328
|
+
togenerate = true
|
329
|
+
if File.exist?(png)
|
330
|
+
if File.mtime(png) > File.mtime(source)
|
331
|
+
puts "no need to generate #{fn} ..."
|
332
|
+
togenerate = false
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
if togenerate
|
337
|
+
sh "ruby #{fn}"
|
338
|
+
if File.exist?(svg)
|
339
|
+
sh "ruby svg2png.rb #{svg} 2.0"
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
if File.exist?(png)
|
344
|
+
cp( png, WEBSITE_DIR_IMAGES )
|
323
345
|
end
|
324
346
|
end
|
325
347
|
end
|
data/lib/samplation.rb
CHANGED
@@ -348,6 +348,7 @@ class RandomFilter < Filter
|
|
348
348
|
include Attributable
|
349
349
|
attribute :mindiff, 0.0
|
350
350
|
attribute :sort, false
|
351
|
+
attribute :withboundaries, false
|
351
352
|
|
352
353
|
# make sampling by trying to check :mindiff constraint
|
353
354
|
#
|
@@ -413,6 +414,10 @@ class RandomFilter < Filter
|
|
413
414
|
result = result.shuffle
|
414
415
|
end
|
415
416
|
end
|
417
|
+
if self.withboundaries
|
418
|
+
result[0] = inputs[0]
|
419
|
+
result[-1] = inputs[-1]
|
420
|
+
end
|
416
421
|
return result
|
417
422
|
end
|
418
423
|
end
|
@@ -503,8 +508,11 @@ class Roller
|
|
503
508
|
|
504
509
|
# TODO : must be generalized
|
505
510
|
def rand() #:nodoc:
|
506
|
-
|
507
|
-
|
511
|
+
return @items.choice
|
512
|
+
end
|
513
|
+
|
514
|
+
def next()
|
515
|
+
return transform( 0.0 )
|
508
516
|
end
|
509
517
|
end
|
510
518
|
|
data/lib/trace.rb
CHANGED
data/lib/utils.rb
CHANGED
@@ -59,7 +59,8 @@ class Range
|
|
59
59
|
# (1.0..2.0).complement( 1.3 ) => 1.7
|
60
60
|
def complement( value )
|
61
61
|
diff = value - self.begin
|
62
|
-
|
62
|
+
result = (self.end - diff)
|
63
|
+
return result
|
63
64
|
end
|
64
65
|
|
65
66
|
# utilitary method to force value to be in range
|
@@ -320,6 +321,28 @@ class Array
|
|
320
321
|
return self[Kernel::rand(self.size)]
|
321
322
|
end
|
322
323
|
|
324
|
+
# return an array with same elements as self, but rotated
|
325
|
+
def rotate(sens=:right)
|
326
|
+
result = []
|
327
|
+
if sens == :right
|
328
|
+
result = [self[-1]] + self[0..-2]
|
329
|
+
else
|
330
|
+
result = self[1..-1] + [self[0]]
|
331
|
+
end
|
332
|
+
return result
|
333
|
+
end
|
334
|
+
|
335
|
+
# generate every rotation for the array, with as first element self
|
336
|
+
def rotations(sens=:right)
|
337
|
+
result = [self]
|
338
|
+
current = self
|
339
|
+
(self.size-1).times do
|
340
|
+
result << current.rotate(sens)
|
341
|
+
current = result[-1]
|
342
|
+
end
|
343
|
+
return result
|
344
|
+
end
|
345
|
+
|
323
346
|
# compute range of an array by returning (min..max)
|
324
347
|
# [1.0, 3.0, 2.0].range => (1.0..3.0)
|
325
348
|
# if proc supplied, use it to return range of subvalues
|
data/test/test_color.rb
CHANGED
@@ -43,25 +43,27 @@ class ColorTest < Test::Unit::TestCase
|
|
43
43
|
black = Color[0.0, 0.0, 0.0, 1.0]
|
44
44
|
white = Color[1.0, 1.0, 1.0, 1.0]
|
45
45
|
red = Color[1.0, 0.0, 0.0, 1.0]
|
46
|
-
assert_equal( black, Color.
|
47
|
-
assert_equal( white, Color.
|
48
|
-
assert_equal( red, Color.
|
49
|
-
assert_equal( black, Color.
|
50
|
-
assert_equal( black, Color.
|
51
|
-
assert_equal( black, Color.
|
52
|
-
assert_equal( black, Color.
|
53
|
-
assert_equal( black, Color.
|
46
|
+
assert_equal( black, Color.hsva( 0.0, 0.0, 0.0, 1.0 ) )
|
47
|
+
assert_equal( white, Color.hsva( 0.0, 0.0, 1.0, 1.0 ) )
|
48
|
+
assert_equal( red, Color.hsva( 0.0, 1.0, 1.0, 1.0 ) )
|
49
|
+
assert_equal( black, Color.hsva( 0.2, 1.0, 0.0, 1.0 ) )
|
50
|
+
assert_equal( black, Color.hsva( 0.4, 1.0, 0.0, 1.0 ) )
|
51
|
+
assert_equal( black, Color.hsva( 0.6, 1.0, 0.0, 1.0 ) )
|
52
|
+
assert_equal( black, Color.hsva( 0.8, 1.0, 0.0, 1.0 ) )
|
53
|
+
assert_equal( black, Color.hsva( 1.0, 1.0, 0.0, 1.0 ) )
|
54
|
+
assert_equal( [0.0, 0.0, 0.0, 1.0], black.hsva )
|
54
55
|
end
|
55
56
|
|
56
57
|
def test_hsl
|
57
58
|
black = Color[0.0, 0.0, 0.0, 1.0]
|
58
59
|
white = Color[1.0, 1.0, 1.0, 1.0]
|
59
60
|
red = Color[1.0, 0.0, 0.0, 1.0]
|
60
|
-
assert_equal( black, Color.
|
61
|
-
assert_equal( white, Color.
|
62
|
-
assert_equal( white, Color.
|
63
|
-
assert_equal( white, Color.
|
64
|
-
assert_equal( white, Color.
|
61
|
+
assert_equal( black, Color.hsla( 0.0, 0.0, 0.0, 1.0 ) )
|
62
|
+
assert_equal( white, Color.hsla( 0.0, 0.0, 1.0, 1.0 ) )
|
63
|
+
assert_equal( white, Color.hsla( 0.0, 1.0, 1.0, 1.0 ) )
|
64
|
+
assert_equal( white, Color.hsla( 2.0, 1.0, 1.0, 1.0 ) )
|
65
|
+
assert_equal( white, Color.hsla( 0.6, 1.0, 1.0, 1.0 ) )
|
66
|
+
assert_equal( [0.0, 0.0, 0.0, 1.0], black.hsla )
|
65
67
|
end
|
66
68
|
|
67
69
|
|
@@ -86,6 +88,10 @@ class ColorTest < Test::Unit::TestCase
|
|
86
88
|
assert_equal( [25,25,25,25], Color[0.1,0.1,0.1,0.1].format255 )
|
87
89
|
end
|
88
90
|
|
91
|
+
def test_complement
|
92
|
+
assert_equal( Color[ 0.0, 1.0, 1.0, 0.5], Color.red(0.5).complement )
|
93
|
+
end
|
94
|
+
|
89
95
|
def test_operators
|
90
96
|
assert_equal( Color[0.2, 0.4, 0.6, 1.0], Color[0.1, 0.2, 0.3, 0.5 ] + Color[0.1, 0.2, 0.3, 0.5 ] )
|
91
97
|
assert_equal( Color[0.2, 0.4, 0.6, 1.0], Color[0.1, 0.2, 0.3, 0.5 ] * 2.0 )
|
data/test/test_utils.rb
CHANGED
@@ -130,6 +130,16 @@ class ArrayTest < Test::Unit::TestCase
|
|
130
130
|
assert_equal( 0.0, [0.0,0.0,0.0].choice )
|
131
131
|
end
|
132
132
|
|
133
|
+
def test_rotate
|
134
|
+
assert_equal( [3,1,2], [1,2,3].rotate(:right) )
|
135
|
+
assert_equal( [2,3,1], [1,2,3].rotate(:left) )
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_rotations
|
139
|
+
assert_equal( [[1,2,3],[2,3,1],[3,1,2]], [1,2,3].rotations(:left) )
|
140
|
+
assert_equal( [[1,2,3],[3,1,2],[2,3,1]], [1,2,3].rotations(:right) )
|
141
|
+
end
|
142
|
+
|
133
143
|
def test_shuffle
|
134
144
|
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
145
|
end
|
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-08-
|
6
|
+
version: 0.0.7
|
7
|
+
date: 2008-08-24 00:00:00 +02:00
|
8
8
|
summary: Ruby vector graphics library
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -31,27 +31,12 @@ authors:
|
|
31
31
|
files:
|
32
32
|
- Rakefile
|
33
33
|
- LICENCE
|
34
|
-
- lib/bezier.rb
|
35
|
-
- lib/bezierbuilders.rb
|
36
|
-
- lib/beziermotifs.rb
|
37
|
-
- lib/bezierspline.rb
|
38
|
-
- lib/beziertools.rb
|
39
|
-
- lib/color.rb
|
40
|
-
- lib/fitting.rb
|
41
|
-
- lib/frame.rb
|
42
34
|
- lib/geometry2D.rb
|
43
|
-
- lib/geovariety.rb
|
44
|
-
- lib/interbezier.rb
|
45
35
|
- lib/interpolation.rb
|
46
36
|
- lib/parametriclength.rb
|
47
|
-
- lib/render.rb
|
48
37
|
- lib/samplation.rb
|
49
|
-
- lib/shape.rb
|
50
|
-
- lib/spiral.rb
|
51
|
-
- lib/style.rb
|
52
38
|
- lib/trace.rb
|
53
39
|
- lib/utils.rb
|
54
|
-
- lib/xrvg.rb
|
55
40
|
- examples/arciterate1.rb
|
56
41
|
- examples/arcrecurse1.rb
|
57
42
|
- examples/arcrecurse2.rb
|