rmagick 1.7.4 → 1.8.0
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.
Potentially problematic release.
This version of rmagick might be problematic. Click here for more details.
- data/ChangeLog +10 -2
- data/README.html +284 -290
- data/README.txt +298 -307
- data/configure +180 -11
- data/configure.ac +18 -2
- data/doc/comtasks.html +1 -1
- data/doc/constants.html +15 -10
- data/doc/css/ref.css +67 -0
- data/doc/draw.html +1 -1
- data/doc/ex/InitialCoords.rb +24 -0
- data/doc/ex/NewCoordSys.rb +33 -0
- data/doc/ex/OrigCoordSys.rb +19 -0
- data/doc/ex/PreserveAspectRatio.rb +206 -0
- data/doc/ex/RotateScale.rb +38 -0
- data/doc/ex/Skew.rb +39 -0
- data/doc/ex/Use01.rb +17 -0
- data/doc/ex/Use02.rb +22 -0
- data/doc/ex/Use03.rb +17 -0
- data/doc/ex/ViewBox.rb +34 -0
- data/doc/ex/arcs01.rb +29 -0
- data/doc/ex/arcs02.rb +62 -0
- data/doc/ex/baseline_shift01.rb +19 -0
- data/doc/ex/bounding_box.rb +31 -37
- data/doc/ex/circle01.rb +18 -0
- data/doc/ex/cubic01.rb +46 -0
- data/doc/ex/cubic02.rb +95 -0
- data/doc/ex/drop_shadow.rb +1 -1
- data/doc/ex/ellipse01.rb +23 -0
- data/doc/ex/evenodd.rb +44 -0
- data/doc/ex/font_styles.rb +29 -0
- data/doc/ex/group.rb +27 -0
- data/doc/ex/image.rb +47 -0
- data/doc/ex/images/big-duck.gif +0 -0
- data/doc/ex/images/duck.gif +0 -0
- data/doc/ex/images/duck0.gif +0 -0
- data/doc/ex/images/duck1.gif +0 -0
- data/doc/ex/images/duck10.gif +0 -0
- data/doc/ex/images/duck11.gif +0 -0
- data/doc/ex/images/duck12.gif +0 -0
- data/doc/ex/images/duck13.gif +0 -0
- data/doc/ex/images/duck14.gif +0 -0
- data/doc/ex/images/duck15.gif +0 -0
- data/doc/ex/images/duck2.gif +0 -0
- data/doc/ex/images/duck3.gif +0 -0
- data/doc/ex/images/duck4.gif +0 -0
- data/doc/ex/images/duck5.gif +0 -0
- data/doc/ex/images/duck6.gif +0 -0
- data/doc/ex/images/duck7.gif +0 -0
- data/doc/ex/images/duck8.gif +0 -0
- data/doc/ex/images/duck9.gif +0 -0
- data/doc/ex/line01.rb +24 -0
- data/doc/ex/nested_rvg.rb +22 -0
- data/doc/ex/nonzero.rb +44 -0
- data/doc/ex/polygon01.rb +24 -0
- data/doc/ex/polyline01.rb +24 -0
- data/doc/ex/quad01.rb +37 -0
- data/doc/ex/rect01.rb +16 -0
- data/doc/ex/rect02.rb +23 -0
- data/doc/ex/rvg_clippath.rb +15 -0
- data/doc/ex/rvg_linecap.rb +44 -0
- data/doc/ex/rvg_linejoin.rb +42 -0
- data/doc/ex/rvg_opacity.rb +20 -0
- data/doc/ex/rvg_pattern.rb +27 -0
- data/doc/ex/rvg_stroke_dasharray.rb +13 -0
- data/doc/ex/sepiatone.rb +15 -0
- data/doc/ex/shadow.rb +37 -0
- data/doc/ex/smile.rb +9 -9
- data/doc/ex/stroke_fill.rb +12 -0
- data/doc/ex/text01.rb +18 -0
- data/doc/ex/text_styles.rb +22 -0
- data/doc/ex/texture_fill_to_border.rb +3 -3
- data/doc/ex/texture_floodfill.rb +3 -2
- data/doc/ex/tref01.rb +26 -0
- data/doc/ex/triangle01.rb +17 -0
- data/doc/ex/tspan01.rb +19 -0
- data/doc/ex/tspan02.rb +20 -0
- data/doc/ex/tspan03.rb +22 -0
- data/doc/ex/writing_mode01.rb +28 -0
- data/doc/ex/writing_mode02.rb +27 -0
- data/doc/ilist.html +1 -1
- data/doc/image1.html +66 -30
- data/doc/image2.html +1 -1
- data/doc/image3.html +274 -49
- data/doc/imageattrs.html +87 -10
- data/doc/imusage.html +1 -1
- data/doc/index.html +80 -39
- data/doc/info.html +149 -13
- data/doc/magick.html +1 -1
- data/doc/rvg.html +890 -0
- data/doc/rvgclip.html +249 -0
- data/doc/rvggroup.html +305 -0
- data/doc/rvgimage.html +288 -0
- data/doc/rvgpattern.html +456 -0
- data/doc/rvgshape.html +376 -0
- data/doc/rvgstyle.html +269 -0
- data/doc/rvgtext.html +464 -0
- data/doc/rvgtspan.html +237 -0
- data/doc/rvgtut.html +512 -0
- data/doc/rvguse.html +145 -0
- data/doc/rvgxform.html +294 -0
- data/doc/struct.html +9 -71
- data/doc/usage.html +22 -7
- data/ext/RMagick/MANIFEST +94 -2
- data/ext/RMagick/rmagick.h +10 -4
- data/ext/RMagick/rmagick_config.h.in +8 -2
- data/ext/RMagick/rmdraw.c +2 -2
- data/ext/RMagick/rmfill.c +2 -2
- data/ext/RMagick/rmilist.c +3 -3
- data/ext/RMagick/rmimage.c +152 -5
- data/ext/RMagick/rminfo.c +208 -2
- data/ext/RMagick/rmmain.c +14 -5
- data/ext/RMagick/rmutil.c +83 -22
- data/lib/RMagick.rb +2 -2
- data/lib/rvg/clippath.rb +46 -0
- data/lib/rvg/container.rb +129 -0
- data/lib/rvg/deep_equal.rb +54 -0
- data/lib/rvg/describable.rb +51 -0
- data/lib/rvg/embellishable.rb +395 -0
- data/lib/rvg/misc.rb +729 -0
- data/lib/rvg/paint.rb +48 -0
- data/lib/rvg/pathdata.rb +129 -0
- data/lib/rvg/rvg.rb +279 -0
- data/lib/rvg/stretchable.rb +150 -0
- data/lib/rvg/stylable.rb +116 -0
- data/lib/rvg/text.rb +185 -0
- data/lib/rvg/transformable.rb +131 -0
- data/lib/rvg/units.rb +64 -0
- data/rmagick.gemspec +1 -1
- data/uninstall.rb +3 -2
- metadata +96 -3
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rvg/rvg'
|
2
|
+
include Magick
|
3
|
+
|
4
|
+
rvg = RVG.new(300, 100) do |canvas|
|
5
|
+
canvas.desc = "Example InitialCoords - SVG's initial coordinate system"
|
6
|
+
canvas.background_fill = 'white'
|
7
|
+
canvas.g.styles(:fill=>'none', :stroke=>'black', :stroke_width=>3) do |grp|
|
8
|
+
grp.line(0, 1.5, 300, 1.5)
|
9
|
+
grp.line(1.5, 0, 1.5, 100)
|
10
|
+
end
|
11
|
+
canvas.g.styles(:fill=>'red', :stroke=>'none') do |grp|
|
12
|
+
grp.rect(3, 3)
|
13
|
+
grp.rect(3, 3, 297, 0)
|
14
|
+
grp.rect(3, 3, 0, 97)
|
15
|
+
end
|
16
|
+
canvas.g.styles(:font_size=>14, :font_family=>'Verdana') do |grp|
|
17
|
+
grp.text(10, 20, '(0,0)')
|
18
|
+
grp.text(240, 20, '(300,0)')
|
19
|
+
grp.text(10, 90, '(0,100)')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
rvg.draw.write('InitialCoords.gif')
|
24
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rvg/rvg'
|
2
|
+
include Magick
|
3
|
+
|
4
|
+
rvg = RVG.new(400, 150) do |canvas|
|
5
|
+
canvas.background_fill = 'white'
|
6
|
+
canvas.desc = 'Example NewCoordSys - New user coordinate system'
|
7
|
+
canvas.g.styles(:fill=>'none', :stroke=>'black', :stroke_width=>3) do |grp|
|
8
|
+
# Draw the axes of the original coordinate system
|
9
|
+
grp.line(0, 1.5, 400, 1.5)
|
10
|
+
grp.line(1.5, 0, 1.5, 150)
|
11
|
+
end
|
12
|
+
|
13
|
+
canvas.g do |grp|
|
14
|
+
grp.text(30, 30, 'ABC (orig coord system)').styles(:font_size=>20, :font_family=>'Verdana')
|
15
|
+
end
|
16
|
+
|
17
|
+
# Establish a new coordinate system, which is
|
18
|
+
# shifted (i.e., translated) from the initial coordinate
|
19
|
+
# system by 50 user units along each axis.
|
20
|
+
canvas.g.translate(50, 50) do |grp|
|
21
|
+
grp.g.styles(:fill=>'none', :stroke=>'red', :stroke_width=>3) do |grp2|
|
22
|
+
# Draw lines of length 50 user units along
|
23
|
+
# the axes of the new coordinate system
|
24
|
+
grp2.line(0, 0, 50, 0)
|
25
|
+
grp2.line(0, 0, 0, 50)
|
26
|
+
end
|
27
|
+
grp.text(30, 30, 'ABC (translated coord system)').styles(:font_size=>20, :font_family=>'Verdana')
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
rvg.draw.write('NewCoordSys.gif')
|
33
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rvg/rvg'
|
2
|
+
include Magick
|
3
|
+
|
4
|
+
rvg = RVG.new(400, 150) do |canvas|
|
5
|
+
canvas.desc = "Example OrigCoordSys - Simple transformations: original picture"
|
6
|
+
canvas.background_fill = 'white'
|
7
|
+
|
8
|
+
canvas.g.styles(:fill=>'none', :stroke=>'black', :stroke_width=>3) do |grp|
|
9
|
+
# Draw the axes of the original coordinate system
|
10
|
+
grp.line(0, 1.5, 400, 1.5)
|
11
|
+
grp.line(1.5, 0, 1.5, 150)
|
12
|
+
end
|
13
|
+
|
14
|
+
canvas.text(30, 30, 'ABC (orig coord system)').styles(:font_size=>20, :font_family=>'Verdana')
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
rvg.draw.write('OrigCoordSys.gif')
|
19
|
+
|
@@ -0,0 +1,206 @@
|
|
1
|
+
require 'rvg/rvg'
|
2
|
+
include Magick
|
3
|
+
|
4
|
+
rvg = RVG.new(450, 300) do |canvas|
|
5
|
+
canvas.desc = 'Example Preserve Aspect Ratio'
|
6
|
+
canvas.background_fill = 'white'
|
7
|
+
|
8
|
+
canvas.rect(448, 298, 1, 1).styles(:fill=>'none', :stroke=>'blue')
|
9
|
+
|
10
|
+
# Define the smiley-face
|
11
|
+
smile = RVG::Group.new do |grp|
|
12
|
+
grp.translate(0, 5)
|
13
|
+
grp.circle(10, 15, 15).styles(:fill=>'yellow', :stroke=>'none')
|
14
|
+
grp.circle(1.5, 12, 12).styles(:fill=>'black', :stroke=>'none')
|
15
|
+
grp.circle(1.5, 17, 12).styles(:fill=>'black', :stroke=>'none')
|
16
|
+
grp.path("M10 19 A 8 8 0 0 0 20 19").styles(:stroke=>'black', :stroke_width=>2)
|
17
|
+
end
|
18
|
+
|
19
|
+
viewport1 = RVG::Group.new do |grp|
|
20
|
+
grp.rect(49, 29, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
|
21
|
+
end
|
22
|
+
|
23
|
+
viewport2 = RVG::Group.new do |grp|
|
24
|
+
grp.rect(29, 39, 0.5, 0.5).styles(:fill=>'black', :stroke=>'red')
|
25
|
+
end
|
26
|
+
|
27
|
+
# SVG to fit
|
28
|
+
grp = canvas.g.styles(:font_size=>9) do |grp|
|
29
|
+
grp.text(10, 30, "SVG to fit")
|
30
|
+
grp.g.translate(20, 40) do |grp2|
|
31
|
+
grp2.use(viewport2)
|
32
|
+
grp2.use(smile)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Viewport 1
|
36
|
+
grp.g.translate(10, 120) do |grp2|
|
37
|
+
grp2.use(viewport1)
|
38
|
+
end
|
39
|
+
grp.text(10, 110, 'Viewport 1')
|
40
|
+
|
41
|
+
# Viewport 2
|
42
|
+
grp.g.translate(20, 190) do |grp2|
|
43
|
+
grp2.rect(29, 50, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
|
44
|
+
end
|
45
|
+
grp.text(10, 180, 'Viewport 2')
|
46
|
+
|
47
|
+
# meet-group-1
|
48
|
+
grp.g.translate(100, 60) do |grp2|
|
49
|
+
grp2.text(0, -30, "--------------- meet ---------------")
|
50
|
+
grp2.g do |grp3|
|
51
|
+
grp3.text(0, -10, "xMin*")
|
52
|
+
grp3.use(viewport1)
|
53
|
+
|
54
|
+
# xMin
|
55
|
+
grp3.rvg(50, 30).viewbox(0,0,30,40).preserve_aspect_ratio('xMinYMin', 'meet') do |canvas2|
|
56
|
+
canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
|
57
|
+
canvas2.use(smile)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# xMid
|
62
|
+
grp2.g.translate(70, 0) do |grp3|
|
63
|
+
grp3.text(0, -10, "xMid*")
|
64
|
+
grp3.use(viewport1)
|
65
|
+
grp3.rvg(50, 30).viewbox(0, 0, 30, 40).preserve_aspect_ratio('xMidYMid', 'meet') do |canvas2|
|
66
|
+
canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
|
67
|
+
canvas2.use(smile)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# xMax
|
72
|
+
grp2.g.translate(0, 70) do |grp3|
|
73
|
+
grp3.text(0, -10, "xMax*")
|
74
|
+
grp3.use(viewport1)
|
75
|
+
grp3.rvg(50, 30).viewbox(0,0,30,40).preserve_aspect_ratio('xMaxYMax', 'meet') do |canvas2|
|
76
|
+
canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
|
77
|
+
canvas2.use(smile)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# meet-group-2
|
83
|
+
grp.g.translate(250, 60) do |grp2|
|
84
|
+
grp2.text(0, -30, "--------------- meet ---------------")
|
85
|
+
|
86
|
+
# xMin
|
87
|
+
grp2.g do |grp3|
|
88
|
+
grp3.text(0, -10, "*YMin")
|
89
|
+
grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
|
90
|
+
grp3.rvg(30, 60).viewbox(0,0,30,40).preserve_aspect_ratio('xMinYMin', 'meet') do |canvas2|
|
91
|
+
canvas2.use(viewport2)
|
92
|
+
canvas2.use(smile)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# xMid
|
97
|
+
grp2.g.translate(50, 0) do |grp3|
|
98
|
+
grp3.text(0, -10, "*YMid")
|
99
|
+
grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
|
100
|
+
grp3.rvg(30, 60).viewbox(0, 0, 30, 40).preserve_aspect_ratio('xMidYMid', 'meet') do |canvas2|
|
101
|
+
canvas2.use(viewport2)
|
102
|
+
canvas2.use(smile)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# xMax
|
107
|
+
grp2.g.translate(100, 0) do |grp3|
|
108
|
+
grp3.text(0, -10, "*YMax")
|
109
|
+
grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
|
110
|
+
grp3.rvg(30, 60).viewbox(0,0,30,40).preserve_aspect_ratio('xMaxYMax', 'meet') do |canvas2|
|
111
|
+
canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
|
112
|
+
canvas2.use(smile)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# slice-group-1
|
118
|
+
grp.g.translate(100, 220) do |grp2|
|
119
|
+
grp2.text(0, -30, "--------------- slice ---------------")
|
120
|
+
|
121
|
+
# xMin
|
122
|
+
grp2.g do |grp3|
|
123
|
+
grp3.text(0, -10, "xMin*")
|
124
|
+
grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
|
125
|
+
grp3.rvg(30, 60) do |canvas2|
|
126
|
+
canvas2.preserve_aspect_ratio('xMinYMin', 'slice')
|
127
|
+
canvas2.viewbox(0,0,30,40)
|
128
|
+
canvas2.use(viewport2)
|
129
|
+
canvas2.use(smile)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
# xMid
|
134
|
+
grp2.g do |grp3|
|
135
|
+
grp3.text(0, -10, "xMid*")
|
136
|
+
grp3.translate(50, 0)
|
137
|
+
grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
|
138
|
+
grp3.rvg(30, 60) do |canvas2|
|
139
|
+
canvas2.preserve_aspect_ratio('xMidYMid', 'slice')
|
140
|
+
canvas2.viewbox(0,0,30,40)
|
141
|
+
canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
|
142
|
+
canvas2.use(smile)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# xMax
|
147
|
+
grp2.g do |grp3|
|
148
|
+
grp3.text(0, -10, "xMax*")
|
149
|
+
grp3.translate(100, 0)
|
150
|
+
grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
|
151
|
+
grp3.rvg(30, 60) do |canvas2|
|
152
|
+
canvas2.preserve_aspect_ratio('xMaxYMax', 'slice')
|
153
|
+
canvas2.viewbox(0,0,30,40)
|
154
|
+
canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
|
155
|
+
canvas2.use(smile)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
# slice-group-2
|
161
|
+
grp.g.translate(250, 200) do |grp2|
|
162
|
+
grp2.text(0, -30, "--------------- slice ---------------")
|
163
|
+
|
164
|
+
# YMin
|
165
|
+
grp2.g do |grp3|
|
166
|
+
grp3.text(0, -10, "*YMin")
|
167
|
+
grp3.use(viewport1)
|
168
|
+
grp3.rvg(50, 30) do |canvas2|
|
169
|
+
canvas2.preserve_aspect_ratio('xMinYMin', 'slice')
|
170
|
+
canvas2.viewbox(0,0,30,40)
|
171
|
+
canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
|
172
|
+
canvas2.use(smile)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
# YMid
|
177
|
+
grp2.g do |grp3|
|
178
|
+
grp3.text(0, -10, "*YMid")
|
179
|
+
grp3.translate(70, 0)
|
180
|
+
grp3.use(viewport1)
|
181
|
+
grp3.rvg(50, 30) do |canvas2|
|
182
|
+
canvas2.preserve_aspect_ratio('xMidYMid', 'slice')
|
183
|
+
canvas2.viewbox(0,0,30,40)
|
184
|
+
canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
|
185
|
+
canvas2.use(smile)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
# YMax
|
190
|
+
grp2.g do |grp3|
|
191
|
+
grp3.text(0, -10, "*YMax")
|
192
|
+
grp3.translate(140, 0)
|
193
|
+
grp3.use(viewport1)
|
194
|
+
grp3.rvg(50, 30) do |canvas2|
|
195
|
+
canvas2.preserve_aspect_ratio('xMaxYMax', 'slice')
|
196
|
+
canvas2.viewbox(0,0,30,40)
|
197
|
+
canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
|
198
|
+
canvas2.use(smile)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
rvg.draw.write('PreserveAspectRatio.gif')
|
206
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rvg/rvg'
|
2
|
+
include Magick
|
3
|
+
|
4
|
+
rvg = RVG.new(400, 120) do |canvas|
|
5
|
+
canvas.desc = 'Example RotateScale - Rotate and scale transforms'
|
6
|
+
canvas.background_fill = 'white'
|
7
|
+
canvas.g.styles(:fill=>'none', :stroke=>'black', :stroke_width=>3) do |grp|
|
8
|
+
# Draw the axes of the original coordinate system
|
9
|
+
grp.line(0, 1.5, 400, 1.5)
|
10
|
+
grp.line(1.5, 0, 1.5, 120)
|
11
|
+
end
|
12
|
+
# Establish a new coordinate system whose origin is at (50,30)
|
13
|
+
# in the original coord. system and which is rotated by 30 degrees.
|
14
|
+
canvas.g.translate(50,30) do |grp|
|
15
|
+
grp.g.rotate(30) do |grp2|
|
16
|
+
grp2.g.styles(:fill=>'none',:stroke=>'red',:stroke_width=>3) do |grp3|
|
17
|
+
grp3.line(0, 0, 50, 0)
|
18
|
+
grp3.line(0, 0, 0, 50)
|
19
|
+
end
|
20
|
+
grp2.text(0, 0, "ABC (rotate)").styles(:font_size=>20, :fill=>'blue', :font_family=>'Verdana')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Establish a new coordinate system whose origin is at (200,40)
|
25
|
+
# in the original coord. systm and which is scaled by 1.5
|
26
|
+
canvas.g.translate(200,40) do |grp|
|
27
|
+
grp.g.scale(1.5) do |grp2|
|
28
|
+
grp2.g.styles(:fill=>'none',:stroke=>'red',:stroke_width=>3) do |grp3|
|
29
|
+
grp3.line(0, 0, 50, 0)
|
30
|
+
grp3.line(0, 0, 0, 50)
|
31
|
+
end
|
32
|
+
grp2.text(0, 0, "ABC (scale)").styles(:font_size=>20, :fill=>'blue', :font_family=>'Verdana')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
rvg.draw.write('RotateScale.gif')
|
38
|
+
|
data/doc/ex/Skew.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rvg/rvg'
|
2
|
+
include Magick
|
3
|
+
|
4
|
+
rvg = RVG.new(400, 120) do |canvas|
|
5
|
+
canvas.desc = 'Example Skew - Show effects of skewX and skewY'
|
6
|
+
canvas.background_fill = 'white'
|
7
|
+
|
8
|
+
canvas.g.styles(:fill=>'none',:stroke=>'black',:stroke_width=>3) do |grp|
|
9
|
+
# Draw the axes of the original coordinate system
|
10
|
+
grp.line(0, 1.5, 400, 1.5)
|
11
|
+
grp.line(1.5, 0, 1.5, 120)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Establisha new coordinate system whose origin is at (30,30)
|
15
|
+
# in the initial coord. system and which is skewed in X by 30 degrees.
|
16
|
+
canvas.g.translate(30,30) do |grp|
|
17
|
+
grp.skewX(30) do |grp2|
|
18
|
+
grp2.g.styles(:fill=>'none', :stroke=>'red', :stroke_width=>3) do |grp3|
|
19
|
+
grp3.line(0, 0, 50, 0)
|
20
|
+
grp3.line(0, 0, 0, 50)
|
21
|
+
end
|
22
|
+
grp.text(0, 0, 'ABC (skewX)').styles(:font_size=>20, :fill=>'blue', :font_family=>'Verdana')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Establish a new coordinate system whose origin is at (200,30)
|
27
|
+
# in the initial coord. system and which is skewed in Y by 30 degrees.
|
28
|
+
canvas.g.translate(200,30) do |grp|
|
29
|
+
grp.skewY(30) do |grp2|
|
30
|
+
grp2.g.styles(:fill=>'none', :stroke=>'red', :stroke_width=>3) do |grp3|
|
31
|
+
grp3.line(0, 0, 50, 0)
|
32
|
+
grp3.line(0, 0, 0, 50)
|
33
|
+
end
|
34
|
+
grp.text(0, 0, 'ABC (skewY)').styles(:font_size=>20, :fill=>'blue', :font_family=>'Verdana')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
rvg.draw.write('Skew.gif')
|
data/doc/ex/Use01.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rvg/rvg'
|
2
|
+
include Magick
|
3
|
+
|
4
|
+
RVG.dpi = 90
|
5
|
+
|
6
|
+
rvg = RVG.new(10.cm, 3.cm).viewbox(0, 0, 100, 30) do |canvas|
|
7
|
+
canvas.background_fill = 'white'
|
8
|
+
canvas.desc = "Example Use01 - Simple case of 'use' on a 'rect'"
|
9
|
+
r = RVG::Group.new do |grp|
|
10
|
+
grp.rect(60, 10)
|
11
|
+
end
|
12
|
+
canvas.rect(99.6, 29.6, 0.1, 0.1).styles(:fill=>'none', :stroke=>'blue', :stroke_width=>0.2)
|
13
|
+
canvas.use(r, 20, 10)
|
14
|
+
end
|
15
|
+
|
16
|
+
rvg.draw.write('Use01.gif')
|
17
|
+
|
data/doc/ex/Use02.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rvg/rvg'
|
2
|
+
include Magick
|
3
|
+
|
4
|
+
RVG.dpi = 90
|
5
|
+
|
6
|
+
rvg = RVG.new(10.cm, 3.5.cm).viewbox(0, 0, 100, 35) do |canvas|
|
7
|
+
canvas.background_fill = 'white'
|
8
|
+
canvas.desc = "Example Use02 - Chain 'styles' to 'use'"
|
9
|
+
r = RVG::Group.new do |grp|
|
10
|
+
grp.rect(60, 10).styles(:fill=>'yellow')
|
11
|
+
end
|
12
|
+
canvas.rect(99.6, 34.6, 0.1, 0.1).styles(:fill=>'none', :stroke=>'blue', :stroke_width=>0.2)
|
13
|
+
|
14
|
+
# Since the rectangle specified the fill color the :fill style is ignored here.
|
15
|
+
# However, since the rectangle did not specify a stroke color, the :stroke style
|
16
|
+
# specified here is respected.
|
17
|
+
canvas.use(r, 20, 5).styles(:fill=>'green', :stroke=>'red')
|
18
|
+
canvas.use(r, 20, 20).styles(:fill=>'green', :stroke=>'blue')
|
19
|
+
end
|
20
|
+
|
21
|
+
rvg.draw.write('Use02.gif')
|
22
|
+
|
data/doc/ex/Use03.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rvg/rvg'
|
2
|
+
include Magick
|
3
|
+
|
4
|
+
RVG.dpi = 90
|
5
|
+
|
6
|
+
rvg = RVG.new(10.cm, 3.cm).viewbox(0, 0, 100, 30) do |canvas|
|
7
|
+
canvas.background_fill = 'white'
|
8
|
+
canvas.desc = "Example Use03 - 'use' with a 'transform' attribute"
|
9
|
+
|
10
|
+
myrect = RVG::Group.new do |grp|
|
11
|
+
grp.rect(60, 10)
|
12
|
+
end
|
13
|
+
canvas.rect(99.6, 29.6, 0.1, 0.1).styles(:fill=>'none', :stroke=>'blue', :stroke_width=>0.2)
|
14
|
+
canvas.use(myrect).translate(20,2.5).rotate(10)
|
15
|
+
end
|
16
|
+
|
17
|
+
rvg.draw.write('Use03.gif')
|
data/doc/ex/ViewBox.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'rvg/rvg'
|
2
|
+
include Magick
|
3
|
+
|
4
|
+
def example(cols, rows)
|
5
|
+
rvg = RVG.new(cols, rows) do |canvas|
|
6
|
+
canvas.background_fill = 'white'
|
7
|
+
canvas.desc = <<-'END_DESC'
|
8
|
+
Example ViewBox - uses the viewBox attribute to automatically create an
|
9
|
+
initial user coordinate system which causes the graphic to scale to fit
|
10
|
+
into the viewport no matter what size the viewport is.
|
11
|
+
END_DESC
|
12
|
+
|
13
|
+
canvas.viewbox(0, 0, 1500, 1000)
|
14
|
+
canvas.preserve_aspect_ratio('none')
|
15
|
+
|
16
|
+
# This rectangle goes from (0,0) to (1500,1000) in user space.
|
17
|
+
# Because of the viewBox attribute above,
|
18
|
+
# the rectangle will end up filling the entire area
|
19
|
+
# reserved for the SVG content.
|
20
|
+
canvas.rect(1500, 1000).styles(:fill=>'yellow',:stroke=>'blue',:stroke_width=>12)
|
21
|
+
|
22
|
+
# A large, red triangle
|
23
|
+
canvas.path("M 750,100 L 250,900 L 1250,900 z").styles(:fill=>'red')
|
24
|
+
|
25
|
+
# A text string that spans most of the viewport
|
26
|
+
canvas.text(100, 600, 'Stretch to fit').styles(:font_size=>200, :font_family=>'Verdana')
|
27
|
+
|
28
|
+
end
|
29
|
+
return rvg.draw
|
30
|
+
end
|
31
|
+
|
32
|
+
example(300, 200).write('ViewBox_300x200.gif')
|
33
|
+
example(150, 200).write('ViewBox_150x200.gif')
|
34
|
+
|